From 2340164394915bad302194bb0eff1e0305d1fc49 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Fri, 27 May 2022 17:21:21 +0200 Subject: [PATCH 001/833] 91874: Themed DsDynamicLookupRelationSearchTabComponent and MetadataRepresentationListComponent --- .../item-pages/project/project.component.html | 4 +- .../publication/publication.component.html | 4 +- .../untyped-item/untyped-item.component.html | 4 +- ...-metadata-representation-list.component.ts | 35 +++++++++ ...ic-lookup-relation-search-tab.component.ts | 71 +++++++++++++++++++ src/app/shared/form/form.module.ts | 2 + src/app/shared/shared.module.ts | 2 + ...etadata-representation-list.component.html | 0 .../metadata-representation-list.component.ts | 11 +++ ...-lookup-relation-search-tab.component.html | 0 ...-lookup-relation-search-tab.component.scss | 0 ...ic-lookup-relation-search-tab.component.ts | 21 ++++++ src/themes/custom/theme.module.ts | 6 +- 13 files changed, 153 insertions(+), 7 deletions(-) create mode 100644 src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts create mode 100644 src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts create mode 100644 src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html create mode 100644 src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts diff --git a/src/app/entity-groups/research-entities/item-pages/project/project.component.html b/src/app/entity-groups/research-entities/item-pages/project/project.component.html index 8f2ff6adcd..515a278a85 100644 --- a/src/app/entity-groups/research-entities/item-pages/project/project.component.html +++ b/src/app/entity-groups/research-entities/item-pages/project/project.component.html @@ -20,12 +20,12 @@ - - + diff --git a/src/app/item-page/simple/item-types/publication/publication.component.html b/src/app/item-page/simple/item-types/publication/publication.component.html index bace9fcd0a..4cf0c1f185 100644 --- a/src/app/item-page/simple/item-types/publication/publication.component.html +++ b/src/app/item-page/simple/item-types/publication/publication.component.html @@ -27,12 +27,12 @@ - - + diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 04794717f1..160f716309 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -30,12 +30,12 @@ - - + diff --git a/src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts b/src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts new file mode 100644 index 0000000000..e7a526bb05 --- /dev/null +++ b/src/app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component.ts @@ -0,0 +1,35 @@ +import { ThemedComponent } from '../../../shared/theme-support/themed.component'; +import { MetadataRepresentationListComponent } from './metadata-representation-list.component'; +import { Component, Input } from '@angular/core'; +import { Item } from '../../../core/shared/item.model'; + +@Component({ + selector: 'ds-themed-metadata-representation-list', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedMetadataRepresentationListComponent extends ThemedComponent { + protected inAndOutputNames: (keyof MetadataRepresentationListComponent & keyof this)[] = ['parentItem', 'itemType', 'metadataFields', 'label', 'incrementBy']; + + @Input() parentItem: Item; + + @Input() itemType: string; + + @Input() metadataFields: string[]; + + @Input() label: string; + + @Input() incrementBy = 10; + + protected getComponentName(): string { + return 'MetadataRepresentationListComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/item-page/simple/metadata-representation-list/metadata-representation-list.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./metadata-representation-list.component`); + } +} diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts new file mode 100644 index 0000000000..da998ed5a6 --- /dev/null +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component.ts @@ -0,0 +1,71 @@ +import { ThemedComponent } from '../../../../../theme-support/themed.component'; +import { DsDynamicLookupRelationSearchTabComponent } from './dynamic-lookup-relation-search-tab.component'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { RelationshipOptions } from '../../../models/relationship-options.model'; +import { Observable } from 'rxjs'; +import { ListableObject } from '../../../../../object-collection/shared/listable-object.model'; +import { Context } from '../../../../../../core/shared/context.model'; +import { RelationshipType } from '../../../../../../core/shared/item-relationships/relationship-type.model'; +import { Item } from '../../../../../../core/shared/item.model'; +import { SearchResult } from '../../../../../search/models/search-result.model'; +import { SearchObjects } from '../../../../../search/models/search-objects.model'; +import { DSpaceObject } from '../../../../../../core/shared/dspace-object.model'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; + +@Component({ + selector: 'ds-themed-dynamic-lookup-relation-search-tab', + styleUrls: [], + templateUrl: '../../../../../theme-support/themed.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] +}) +export class ThemedDynamicLookupRelationSearchTabComponent extends ThemedComponent { + protected inAndOutputNames: (keyof DsDynamicLookupRelationSearchTabComponent & keyof this)[] = ['relationship', 'listId', + 'query', 'repeatable', 'selection$', 'context', 'relationshipType', 'item', 'isLeft', 'toRemove', 'isEditRelationship', + 'deselectObject', 'selectObject', 'resultFound']; + + @Input() relationship: RelationshipOptions; + + @Input() listId: string; + + @Input() query: string; + + @Input() repeatable: boolean; + + @Input() selection$: Observable; + + @Input() context: Context; + + @Input() relationshipType: RelationshipType; + + @Input() item: Item; + + @Input() isLeft: boolean; + + @Input() toRemove: SearchResult[]; + + @Input() isEditRelationship: boolean; + + @Output() deselectObject: EventEmitter = new EventEmitter(); + + @Output() selectObject: EventEmitter = new EventEmitter(); + + @Output() resultFound: EventEmitter> = new EventEmitter>(); + + protected getComponentName(): string { + return 'DsDynamicLookupRelationSearchTabComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../../../themes/${themeName}/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./dynamic-lookup-relation-search-tab.component`); + } +} diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 62ab5bd647..ae85022719 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -30,6 +30,7 @@ import { ExistingRelationListElementComponent } from './builder/ds-dynamic-form- import { ExternalSourceEntryImportModalComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/external-source-entry-import-modal/external-source-entry-import-modal.component'; import { CustomSwitchComponent } from './builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component'; import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap'; +import { ThemedDynamicLookupRelationSearchTabComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component'; const COMPONENTS = [ CustomSwitchComponent, @@ -38,6 +39,7 @@ const COMPONENTS = [ DsDynamicListComponent, DsDynamicLookupComponent, DsDynamicLookupRelationSearchTabComponent, + ThemedDynamicLookupRelationSearchTabComponent, DsDynamicLookupRelationSelectionTabComponent, DsDynamicLookupRelationExternalSourceTabComponent, DsDynamicDisabledComponent, diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 715ee66a99..b6e153db91 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -177,6 +177,7 @@ import { ScopeSelectorModalComponent } from './search-form/scope-selector-modal/ import { BitstreamRequestACopyPageComponent } from './bitstream-request-a-copy-page/bitstream-request-a-copy-page.component'; import { DsSelectComponent } from './ds-select/ds-select.component'; import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'; +import { ThemedMetadataRepresentationListComponent } from '../item-page/simple/metadata-representation-list/themed-metadata-representation-list.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -412,6 +413,7 @@ const SHARED_ITEM_PAGE_COMPONENTS = [ ItemAlertsComponent, GenericItemPageFieldComponent, MetadataRepresentationListComponent, + ThemedMetadataRepresentationListComponent, RelatedItemsComponent, ]; diff --git a/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html b/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts b/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts new file mode 100644 index 0000000000..8a6036a23b --- /dev/null +++ b/src/themes/custom/app/item-page/simple/metadata-representation-list/metadata-representation-list.component.ts @@ -0,0 +1,11 @@ +import { MetadataRepresentationListComponent as BaseComponent } from '../../../../../../app/item-page/simple/metadata-representation-list/metadata-representation-list.component'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-metadata-representation-list', + // templateUrl: './metadata-representation-list.component.html' + templateUrl: '../../../../../../app/item-page/simple/metadata-representation-list/metadata-representation-list.component.html' +}) +export class MetadataRepresentationListComponent extends BaseComponent { + +} diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts new file mode 100644 index 0000000000..2380cc67e8 --- /dev/null +++ b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.ts @@ -0,0 +1,21 @@ +import { DsDynamicLookupRelationSearchTabComponent as BaseComponent } from '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component'; +import { Component } from '@angular/core'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../../../../app/my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../../../../app/core/shared/search/search-configuration.service'; + +@Component({ + selector: 'ds-dynamic-lookup-relation-search-tab', + // styleUrls: ['./dynamic-lookup-relation-search-tab.component.scss'], + styleUrls: ['../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.scss'], + // templateUrl: './dynamic-lookup-relation-search-tab.component.html', + templateUrl: '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] +}) +export class DsDynamicLookupRelationSearchTabComponent extends BaseComponent { + +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..94250b416f 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,8 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { MetadataRepresentationListComponent } from './app/item-page/simple/metadata-representation-list/metadata-representation-list.component'; +import { DsDynamicLookupRelationSearchTabComponent } from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +128,9 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + MetadataRepresentationListComponent, + DsDynamicLookupRelationSearchTabComponent, ]; @NgModule({ From 7eaa50949df4273fa1b9fa55429a62f80b823fd4 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 30 May 2022 14:53:43 +0200 Subject: [PATCH 002/833] 90761: Themed DsDynamicLookupRelationExternalSourceTabComponent --- ...-relation-external-source-tab.component.ts | 62 +++++++++++++++++++ src/app/shared/form/form.module.ts | 2 + ...elation-external-source-tab.component.html | 0 ...elation-external-source-tab.component.scss | 0 ...-relation-external-source-tab.component.ts | 26 ++++++++ src/themes/custom/theme.module.ts | 2 + 6 files changed, 92 insertions(+) create mode 100644 src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss create mode 100644 src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts new file mode 100644 index 0000000000..f3d8421365 --- /dev/null +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component.ts @@ -0,0 +1,62 @@ +import { ThemedComponent } from '../../../../../theme-support/themed.component'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { RelationshipOptions } from '../../../models/relationship-options.model'; +import { ListableObject } from '../../../../../object-collection/shared/listable-object.model'; +import { Context } from '../../../../../../core/shared/context.model'; +import { Item } from '../../../../../../core/shared/item.model'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../core/shared/search/search-configuration.service'; +import { Collection } from '../../../../../../core/shared/collection.model'; +import { ExternalSource } from '../../../../../../core/shared/external-source.model'; +import { DsDynamicLookupRelationExternalSourceTabComponent } from './dynamic-lookup-relation-external-source-tab.component'; +import { fadeIn, fadeInOut } from '../../../../../animations/fade'; + +@Component({ + selector: 'ds-themed-dynamic-lookup-relation-external-source-tab', + styleUrls: [], + templateUrl: '../../../../../theme-support/themed.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ], + animations: [ + fadeIn, + fadeInOut + ] +}) +export class ThemedDynamicLookupRelationExternalSourceTabComponent extends ThemedComponent { + protected inAndOutputNames: (keyof DsDynamicLookupRelationExternalSourceTabComponent & keyof this)[] = ['label', 'listId', + 'item', 'collection', 'relationship', 'context', 'repeatable', 'importedObject', 'externalSource']; + + @Input() label: string; + + @Input() listId: string; + + @Input() item: Item; + + @Input() collection: Collection; + + @Input() relationship: RelationshipOptions; + + @Input() context: Context; + + @Input() repeatable: boolean; + + @Output() importedObject: EventEmitter = new EventEmitter(); + + @Input() externalSource: ExternalSource; + + protected getComponentName(): string { + return 'DsDynamicLookupRelationExternalSourceTabComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../../../themes/${themeName}/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./dynamic-lookup-relation-external-source-tab.component`); + } +} diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index ae85022719..4e9eee7e3a 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -31,6 +31,7 @@ import { ExternalSourceEntryImportModalComponent } from './builder/ds-dynamic-fo import { CustomSwitchComponent } from './builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component'; import { DynamicFormsNGBootstrapUIModule } from '@ng-dynamic-forms/ui-ng-bootstrap'; import { ThemedDynamicLookupRelationSearchTabComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/themed-dynamic-lookup-relation-search-tab.component'; +import { ThemedDynamicLookupRelationExternalSourceTabComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/themed-dynamic-lookup-relation-external-source-tab.component'; const COMPONENTS = [ CustomSwitchComponent, @@ -42,6 +43,7 @@ const COMPONENTS = [ ThemedDynamicLookupRelationSearchTabComponent, DsDynamicLookupRelationSelectionTabComponent, DsDynamicLookupRelationExternalSourceTabComponent, + ThemedDynamicLookupRelationExternalSourceTabComponent, DsDynamicDisabledComponent, DsDynamicLookupRelationModalComponent, DsDynamicScrollableDropdownComponent, diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts new file mode 100644 index 0000000000..569d007b4d --- /dev/null +++ b/src/themes/custom/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.ts @@ -0,0 +1,26 @@ +import { DsDynamicLookupRelationExternalSourceTabComponent as BaseComponent } from '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component'; +import { Component } from '@angular/core'; +import { SEARCH_CONFIG_SERVICE } from '../../../../../../../../../app/my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../../../../../../../app/core/shared/search/search-configuration.service'; +import { fadeIn, fadeInOut } from '../../../../../../../../../app/shared/animations/fade'; + +@Component({ + selector: 'ds-dynamic-lookup-relation-external-source-tab', + // styleUrls: ['./dynamic-lookup-relation-external-source-tab.component.scss'], + styleUrls: ['../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.scss'], + // templateUrl: './dynamic-lookup-relation-external-source-tab.component.html', + templateUrl: '../../../../../../../../../app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component.html', + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ], + animations: [ + fadeIn, + fadeInOut + ] +}) +export class DsDynamicLookupRelationExternalSourceTabComponent extends BaseComponent { + +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 94250b416f..f37b0f820c 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -86,6 +86,7 @@ import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { MetadataRepresentationListComponent } from './app/item-page/simple/metadata-representation-list/metadata-representation-list.component'; import { DsDynamicLookupRelationSearchTabComponent } from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/search-tab/dynamic-lookup-relation-search-tab.component'; +import { DsDynamicLookupRelationExternalSourceTabComponent } from './app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/dynamic-lookup-relation-external-source-tab.component'; const DECLARATIONS = [ FileSectionComponent, @@ -131,6 +132,7 @@ const DECLARATIONS = [ FeedbackComponent, MetadataRepresentationListComponent, DsDynamicLookupRelationSearchTabComponent, + DsDynamicLookupRelationExternalSourceTabComponent, ]; @NgModule({ From 86e084bf0520eaa9fb3705d76c55012884aa97d8 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 30 May 2022 16:27:28 +0200 Subject: [PATCH 003/833] 90761: themed component calls --- .../dynamic-lookup-relation-modal.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html index f95cd98c65..9a7aeee4d2 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/relation-lookup-modal/dynamic-lookup-relation-modal.component.html @@ -12,7 +12,7 @@
  • {{'submission.sections.describe.relationship-lookup.search-tab.tab-title.' + relationshipOptions.relationshipType | translate : { count: (totalInternal$ | async)} }} - - +
  • {{'submission.sections.describe.relationship-lookup.search-tab.tab-title.' + source.id | translate : { count: (totalExternal$ | async)[idx] } }} - - +
  • From 878db5be752595277e68bd71ceb221a416801e63 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Tue, 20 Sep 2022 15:45:04 +0200 Subject: [PATCH 004/833] 94390: Replace DSO page edit buttons with a menu --- .../admin-sidebar-section.component.html | 4 +- .../admin-sidebar-section.component.spec.ts | 106 +++++++--- .../admin-sidebar-section.component.ts | 13 +- ...dable-admin-sidebar-section.component.html | 1 + .../collection-page-routing.module.ts | 7 +- .../collection-page.component.html | 4 +- .../community-page-routing.module.ts | 7 +- .../community-page.component.html | 4 +- .../journal-issue.component.html | 5 +- .../journal-volume.component.html | 4 +- .../item-pages/journal/journal.component.html | 5 +- .../org-unit/org-unit.component.html | 5 +- .../item-pages/person/person.component.html | 5 +- .../item-pages/project/project.component.html | 5 +- .../full/full-item-page.component.html | 5 +- src/app/item-page/item-page-routing.module.ts | 5 +- src/app/item-page/item-page.module.ts | 2 - .../publication/publication.component.html | 4 +- .../untyped-item/untyped-item.component.html | 8 +- .../untyped-item/untyped-item.component.ts | 4 +- .../versioned-item.component.scss | 0 .../versioned-item.component.spec.ts | 95 --------- .../versioned-item.component.ts | 80 -------- .../expandable-navbar-section.component.html | 1 + .../dso-page/dso-edit-menu.resolver.spec.ts | 190 ++++++++++++++++++ .../shared/dso-page/dso-edit-menu.resolver.ts | 164 +++++++++++++++ ...dit-menu-expandable-section.component.html | 18 ++ ...dit-menu-expandable-section.component.scss | 26 +++ ...-menu-expandable-section.component.spec.ts | 75 +++++++ ...-edit-menu-expandable-section.component.ts | 39 ++++ .../dso-edit-menu-section.component.html | 25 +++ .../dso-edit-menu-section.component.scss | 3 + .../dso-edit-menu-section.component.spec.ts | 173 ++++++++++++++++ .../dso-edit-menu-section.component.ts | 51 +++++ .../dso-edit-menu.component.html | 6 + .../dso-edit-menu.component.scss} | 0 .../dso-edit-menu.component.spec.ts | 78 +++++++ .../dso-edit-menu/dso-edit-menu.component.ts | 36 ++++ .../dso-page-edit-button.component.html | 7 - .../dso-page-edit-button.component.scss | 3 - .../dso-page-edit-button.component.spec.ts | 76 ------- .../dso-page-edit-button.component.ts | 43 ---- .../dso-page-version-button.component.html | 8 - .../dso-page-version-button.component.scss | 3 - .../dso-page-version-button.component.spec.ts | 96 --------- .../dso-page-version-button.component.ts | 77 ------- .../dso-versioning-modal.service.spec.ts | 92 +++++++++ .../dso-versioning-modal.service.ts | 98 +++++++++ src/app/shared/menu/initial-menus-state.ts | 14 +- .../menu-item/link-menu-item.component.html | 4 +- .../menu-item/link-menu-item.component.ts | 2 +- .../menu/menu-item/models/altmetric.model.ts | 1 + .../menu/menu-item/models/link.model.ts | 1 + .../menu/menu-item/models/menu-item.model.ts | 1 + .../menu/menu-item/models/onclick.model.ts | 1 + .../menu/menu-item/models/search.model.ts | 1 + .../menu/menu-item/models/text.model.ts | 1 + .../onclick-menu-item.component.html | 4 +- .../menu-item/onclick-menu-item.component.ts | 9 +- .../menu-item/text-menu-item.component.html | 2 +- .../menu-section/menu-section.component.ts | 8 +- src/app/shared/shared.module.ts | 17 +- 62 files changed, 1247 insertions(+), 585 deletions(-) delete mode 100644 src/app/item-page/simple/item-types/versioned-item/versioned-item.component.scss delete mode 100644 src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts delete mode 100644 src/app/item-page/simple/item-types/versioned-item/versioned-item.component.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu.resolver.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.html create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.scss create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.html rename src/app/{item-page/simple/item-types/versioned-item/versioned-item.component.html => shared/dso-page/dso-edit-menu/dso-edit-menu.component.scss} (100%) create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.spec.ts create mode 100644 src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts delete mode 100644 src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.html delete mode 100644 src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.scss delete mode 100644 src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.spec.ts delete mode 100644 src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.ts delete mode 100644 src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.html delete mode 100644 src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.scss delete mode 100644 src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts delete mode 100644 src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.ts create mode 100644 src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts create mode 100644 src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts diff --git a/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.html b/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.html index 8706b40ee0..7f1e8716ba 100644 --- a/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.html +++ b/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.html @@ -1,7 +1,7 @@
    diff --git a/src/app/community-page/community-page-routing.module.ts b/src/app/community-page/community-page-routing.module.ts index ad1b1fd2f2..ac90f3618c 100644 --- a/src/app/community-page/community-page-routing.module.ts +++ b/src/app/community-page/community-page-routing.module.ts @@ -14,6 +14,7 @@ import { CommunityPageAdministratorGuard } from './community-page-administrator. import { MenuItemType } from '../shared/menu/initial-menus-state'; import { LinkMenuItemModel } from '../shared/menu/menu-item/models/link.model'; import { ThemedCommunityPageComponent } from './themed-community-page.component'; +import { DSOEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; @NgModule({ imports: [ @@ -27,7 +28,8 @@ import { ThemedCommunityPageComponent } from './themed-community-page.component' path: ':id', resolve: { dso: CommunityPageResolver, - breadcrumb: CommunityBreadcrumbResolver + breadcrumb: CommunityBreadcrumbResolver, + menu: DSOEditMenuResolver }, runGuardsAndResolvers: 'always', children: [ @@ -72,7 +74,8 @@ import { ThemedCommunityPageComponent } from './themed-community-page.component' DSOBreadcrumbsService, LinkService, CreateCommunityPageGuard, - CommunityPageAdministratorGuard + CommunityPageAdministratorGuard, + DSOEditMenuResolver ] }) export class CommunityPageRoutingModule { diff --git a/src/app/community-page/community-page.component.html b/src/app/community-page/community-page.component.html index cf7282eb4b..cee13eadd6 100644 --- a/src/app/community-page/community-page.component.html +++ b/src/app/community-page/community-page.component.html @@ -20,9 +20,7 @@ [title]="'community.page.news'"> -
    - -
    +
    diff --git a/src/app/entity-groups/journal-entities/item-pages/journal-issue/journal-issue.component.html b/src/app/entity-groups/journal-entities/item-pages/journal-issue/journal-issue.component.html index 5847be7dd2..94dc81fc8f 100644 --- a/src/app/entity-groups/journal-entities/item-pages/journal-issue/journal-issue.component.html +++ b/src/app/entity-groups/journal-entities/item-pages/journal-issue/journal-issue.component.html @@ -2,9 +2,8 @@

    {{'journalissue.page.titleprefix' | translate}}

    -
    - -
    + +
    diff --git a/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.html b/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.html index a0a25766ef..b472f4e648 100644 --- a/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.html +++ b/src/app/entity-groups/journal-entities/item-pages/journal-volume/journal-volume.component.html @@ -2,9 +2,7 @@

    {{'journalvolume.page.titleprefix' | translate}}

    -
    - -
    +
    diff --git a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html index af3ac85959..9b11409a31 100644 --- a/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html +++ b/src/app/entity-groups/journal-entities/item-pages/journal/journal.component.html @@ -2,9 +2,8 @@

    {{'journal.page.titleprefix' | translate}}

    -
    - -
    + +
    diff --git a/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html index c9ea8fb549..21b36de722 100644 --- a/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html +++ b/src/app/entity-groups/research-entities/item-pages/org-unit/org-unit.component.html @@ -2,9 +2,8 @@

    {{'orgunit.page.titleprefix' | translate}}

    -
    - -
    + +
    diff --git a/src/app/entity-groups/research-entities/item-pages/person/person.component.html b/src/app/entity-groups/research-entities/item-pages/person/person.component.html index 5c2fd227fd..c23b543011 100644 --- a/src/app/entity-groups/research-entities/item-pages/person/person.component.html +++ b/src/app/entity-groups/research-entities/item-pages/person/person.component.html @@ -2,9 +2,8 @@

    {{'person.page.titleprefix' | translate}}

    -
    - -
    + +
    diff --git a/src/app/entity-groups/research-entities/item-pages/project/project.component.html b/src/app/entity-groups/research-entities/item-pages/project/project.component.html index 8f2ff6adcd..b9a1a30225 100644 --- a/src/app/entity-groups/research-entities/item-pages/project/project.component.html +++ b/src/app/entity-groups/research-entities/item-pages/project/project.component.html @@ -2,9 +2,8 @@

    {{'project.page.titleprefix' | translate}}

    -
    - -
    + +
    diff --git a/src/app/item-page/full/full-item-page.component.html b/src/app/item-page/full/full-item-page.component.html index d2655c4ad0..8bb7860aaa 100644 --- a/src/app/item-page/full/full-item-page.component.html +++ b/src/app/item-page/full/full-item-page.component.html @@ -6,9 +6,8 @@
    -
    - -
    + +
    diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 04794717f1..c9c88fa085 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -11,12 +11,8 @@

    -
    - - -
    + +
    diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts index 3ce33dc90a..ead62008de 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { Item } from '../../../../core/shared/item.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator'; -import { VersionedItemComponent } from '../versioned-item/versioned-item.component'; +import { ItemComponent } from '../shared/item.component'; /** * Component that represents a publication Item page @@ -15,6 +15,6 @@ import { VersionedItemComponent } from '../versioned-item/versioned-item.compone templateUrl: './untyped-item.component.html', changeDetection: ChangeDetectionStrategy.OnPush, }) -export class UntypedItemComponent extends VersionedItemComponent { +export class UntypedItemComponent extends ItemComponent { } diff --git a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.scss b/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts b/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts deleted file mode 100644 index eff51b1019..0000000000 --- a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.spec.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { VersionedItemComponent } from './versioned-item.component'; -import { VersionHistoryDataService } from '../../../../core/data/version-history-data.service'; -import { TranslateService } from '@ngx-translate/core'; -import { VersionDataService } from '../../../../core/data/version-data.service'; -import { NotificationsService } from '../../../../shared/notifications/notifications.service'; -import { ItemVersionsSharedService } from '../../../../shared/item/item-versions/item-versions-shared.service'; -import { Item } from '../../../../core/shared/item.model'; -import { createSuccessfulRemoteDataObject$ } from '../../../../shared/remote-data.utils'; -import { buildPaginatedList } from '../../../../core/data/paginated-list.model'; -import { PageInfo } from '../../../../core/shared/page-info.model'; -import { MetadataMap } from '../../../../core/shared/metadata.models'; -import { createRelationshipsObservable, mockRouteService } from '../shared/item.component.spec'; -import { RouterTestingModule } from '@angular/router/testing'; -import { Component } from '@angular/core'; -import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service'; -import { SearchService } from '../../../../core/shared/search/search.service'; -import { ItemDataService } from '../../../../core/data/item-data.service'; -import { Version } from '../../../../core/shared/version.model'; -import { RouteService } from '../../../../core/services/route.service'; - -const mockItem: Item = Object.assign(new Item(), { - bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), - metadata: new MetadataMap(), - relationships: createRelationshipsObservable(), - _links: { - self: { - href: 'item-href' - }, - version: { - href: 'version-href' - } - } -}); - - -@Component({template: ''}) -class DummyComponent { -} - -describe('VersionedItemComponent', () => { - let component: VersionedItemComponent; - let fixture: ComponentFixture; - - let versionService: VersionDataService; - let versionHistoryService: VersionHistoryDataService; - - const versionServiceSpy = jasmine.createSpyObj('versionService', { - findByHref: createSuccessfulRemoteDataObject$(new Version()), - }); - - const versionHistoryServiceSpy = jasmine.createSpyObj('versionHistoryService', { - createVersion: createSuccessfulRemoteDataObject$(new Version()), - }); - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [VersionedItemComponent, DummyComponent], - imports: [RouterTestingModule], - providers: [ - { provide: VersionHistoryDataService, useValue: versionHistoryServiceSpy }, - { provide: TranslateService, useValue: {} }, - { provide: VersionDataService, useValue: versionServiceSpy }, - { provide: NotificationsService, useValue: {} }, - { provide: ItemVersionsSharedService, useValue: {} }, - { provide: WorkspaceitemDataService, useValue: {} }, - { provide: SearchService, useValue: {} }, - { provide: ItemDataService, useValue: {} }, - { provide: RouteService, useValue: mockRouteService } - ] - }).compileComponents(); - versionService = TestBed.inject(VersionDataService); - versionHistoryService = TestBed.inject(VersionHistoryDataService); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(VersionedItemComponent); - component = fixture.componentInstance; - component.object = mockItem; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - describe('when onCreateNewVersion() is called', () => { - it('should call versionService.findByHref', () => { - component.onCreateNewVersion(); - expect(versionService.findByHref).toHaveBeenCalledWith('version-href'); - }); - }); - -}); diff --git a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.ts b/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.ts deleted file mode 100644 index cd2eb3a19b..0000000000 --- a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Component } from '@angular/core'; -import { ItemComponent } from '../shared/item.component'; -import { ItemVersionsSummaryModalComponent } from '../../../../shared/item/item-versions/item-versions-summary-modal/item-versions-summary-modal.component'; -import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; -import { RemoteData } from '../../../../core/data/remote-data'; -import { Version } from '../../../../core/shared/version.model'; -import { switchMap, tap } from 'rxjs/operators'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { VersionHistoryDataService } from '../../../../core/data/version-history-data.service'; -import { TranslateService } from '@ngx-translate/core'; -import { VersionDataService } from '../../../../core/data/version-data.service'; -import { ItemVersionsSharedService } from '../../../../shared/item/item-versions/item-versions-shared.service'; -import { Router } from '@angular/router'; -import { WorkspaceitemDataService } from '../../../../core/submission/workspaceitem-data.service'; -import { SearchService } from '../../../../core/shared/search/search.service'; -import { Item } from '../../../../core/shared/item.model'; -import { ItemDataService } from '../../../../core/data/item-data.service'; -import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; -import { RouteService } from '../../../../core/services/route.service'; - -@Component({ - selector: 'ds-versioned-item', - templateUrl: './versioned-item.component.html', - styleUrls: ['./versioned-item.component.scss'] -}) -export class VersionedItemComponent extends ItemComponent { - - constructor( - private modalService: NgbModal, - private versionHistoryService: VersionHistoryDataService, - private translateService: TranslateService, - private versionService: VersionDataService, - private itemVersionShared: ItemVersionsSharedService, - private router: Router, - private workspaceItemDataService: WorkspaceitemDataService, - private searchService: SearchService, - private itemService: ItemDataService, - protected routeService: RouteService - ) { - super(routeService); - } - - /** - * Open a modal that allows to create a new version starting from the specified item, with optional summary - */ - onCreateNewVersion(): void { - - const item = this.object; - const versionHref = item._links.version.href; - - // Open modal - const activeModal = this.modalService.open(ItemVersionsSummaryModalComponent); - - // Show current version in modal - this.versionService.findByHref(versionHref).pipe(getFirstCompletedRemoteData()).subscribe((res: RemoteData) => { - // if res.hasNoContent then the item is unversioned - activeModal.componentInstance.firstVersion = res.hasNoContent; - activeModal.componentInstance.versionNumber = (res.hasNoContent ? undefined : res.payload.version); - }); - - // On createVersionEvent emitted create new version and notify - activeModal.componentInstance.createVersionEvent.pipe( - switchMap((summary: string) => this.versionHistoryService.createVersion(item._links.self.href, summary)), - getFirstCompletedRemoteData(), - // show success/failure notification - tap((res: RemoteData) => { this.itemVersionShared.notifyCreateNewVersion(res); }), - // get workspace item - getFirstSucceededRemoteDataPayload(), - switchMap((newVersion: Version) => this.itemService.findByHref(newVersion._links.item.href)), - getFirstSucceededRemoteDataPayload(), - switchMap((newVersionItem: Item) => this.workspaceItemDataService.findByItem(newVersionItem.uuid, true, false)), - getFirstSucceededRemoteDataPayload(), - ).subscribe((wsItem) => { - const wsiId = wsItem.id; - const route = 'workspaceitems/' + wsiId + '/edit'; - this.router.navigateByUrl(route); - }); - - } -} diff --git a/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.html b/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.html index d8a517dc55..a77b6bc253 100644 --- a/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.html +++ b/src/app/navbar/expandable-navbar-section/expandable-navbar-section.component.html @@ -6,6 +6,7 @@ (mouseenter)="activateSection($event)" (mouseleave)="deactivateSection($event)"> { + + const MENU_STATE = { + id: 'some menu' + }; + + let resolver: DSOEditMenuResolver; + + let dSpaceObjectDataService; + let menuService; + let authorizationService; + let dsoVersioningModalService; + + const route = { + data: { + menu: { + 'statistics': [{ + id: 'statistics-dummy-1', + active: false, + visible: true, + model: null + }] + } + }, + params: {id: 'test-uuid'}, + }; + + const state = { + url: 'test-url' + }; + + const testObject = Object.assign(new Item(), {uuid: 'test-uuid', type: 'item', _links: {self: {href: 'self-link'}}}); + + const dummySections1 = [{ + id: 'dummy-1', + active: false, + visible: true, + model: null + }, + { + id: 'dummy-2', + active: false, + visible: true, + model: null + }]; + + const dummySections2 = [{ + id: 'dummy-3', + active: false, + visible: true, + model: null + }, + { + id: 'dummy-4', + active: false, + visible: true, + model: null + }, + { + id: 'dummy-5', + active: false, + visible: true, + model: null + }]; + + beforeEach(waitForAsync(() => { + menuService = new MenuServiceStub(); + spyOn(menuService, 'getMenu').and.returnValue(observableOf(MENU_STATE)); + + dSpaceObjectDataService = jasmine.createSpyObj('dSpaceObjectDataService', { + findById: createSuccessfulRemoteDataObject$(testObject) + }); + authorizationService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true) + }); + dsoVersioningModalService = jasmine.createSpyObj('dsoVersioningModalService', { + isNewVersionButtonDisabled: observableOf(false), + getVersioningTooltipMessage: observableOf('message'), + openCreateVersionModal: {} + }); + + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot(), NoopAnimationsModule, RouterTestingModule], + declarations: [AdminSidebarComponent], + providers: [ + {provide: DSpaceObjectDataService, useValue: dSpaceObjectDataService}, + {provide: MenuService, useValue: menuService}, + {provide: AuthorizationDataService, useValue: authorizationService}, + {provide: DsoVersioningModalService, useValue: dsoVersioningModalService}, + { + provide: NgbModal, useValue: { + open: () => {/*comment*/ + } + } + } + ], + schemas: [NO_ERRORS_SCHEMA] + }); + resolver = TestBed.inject(DSOEditMenuResolver); + + spyOn(menuService, 'addSection'); + })); + + it('should be created', () => { + expect(resolver).toBeTruthy(); + }); + + describe('resolve', () => { + it('should create all menus when a dso is found', (done) => { + spyOn(resolver, 'getDsoMenus').and.returnValue( + [observableOf(dummySections1), observableOf(dummySections2)] + ); + resolver.resolve(route as any, null).subscribe(resolved => { + expect(resolved).toEqual( + { + ...route.data.menu, + [MenuID.DSO_EDIT]: [ + ...dummySections1.map((menu) => Object.assign(menu, {id: menu.id + '-test-uuid'})), + ...dummySections2.map((menu) => Object.assign(menu, {id: menu.id + '-test-uuid'})) + ] + } + ); + expect(resolver.getDsoMenus).toHaveBeenCalled(); + done(); + }); + }); + it('should return the statistics menu when no dso is found', (done) => { + (dSpaceObjectDataService.findById as jasmine.Spy).and.returnValue(createFailedRemoteDataObject$()); + + resolver.resolve(route as any, null).subscribe(resolved => { + expect(resolved).toEqual( + { + ...route.data.menu + } + ); + done(); + }); + }); + }); + describe('getDsoMenus', () => { + it('should return as first part the item version list ', (done) => { + const result = resolver.getDsoMenus(testObject, route, state); + result[0].subscribe((menuList) => { + expect(menuList.length).toEqual(1); + expect(menuList[0].id).toEqual('version-dso'); + expect(menuList[0].active).toEqual(false); + expect(menuList[0].visible).toEqual(true); + expect(menuList[0].model.type).toEqual(MenuItemType.ONCLICK); + expect(menuList[0].model.text).toEqual('message'); + expect(menuList[0].model.disabled).toEqual(false); + expect(menuList[0].icon).toEqual('code-branch'); + done(); + }); + + }); + it('should return as second part the common list ', (done) => { + const result = resolver.getDsoMenus(testObject, route, state); + result[1].subscribe((menuList) => { + expect(menuList.length).toEqual(1); + expect(menuList[0].id).toEqual('edit-dso'); + expect(menuList[0].active).toEqual(false); + expect(menuList[0].visible).toEqual(true); + expect(menuList[0].model.type).toEqual(MenuItemType.LINK); + expect(menuList[0].model.text).toEqual('item.page.edit'); + expect(menuList[0].model.link).toEqual('test-url/edit/metadata'); + expect(menuList[0].icon).toEqual('pencil-alt'); + done(); + }); + + }); + }); +}); diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.ts new file mode 100644 index 0000000000..003e61df95 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts @@ -0,0 +1,164 @@ +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { combineLatest, Observable, of as observableOf } from 'rxjs'; +import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { MenuID, MenuItemType } from '../menu/initial-menus-state'; +import { MenuService } from '../menu/menu.service'; +import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; +import { Injectable } from '@angular/core'; +import { LinkMenuItemModel } from '../menu/menu-item/models/link.model'; +import { Item } from '../../core/shared/item.model'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { OnClickMenuItemModel } from '../menu/menu-item/models/onclick.model'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { map, switchMap } from 'rxjs/operators'; +import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service'; +import { URLCombiner } from '../../core/url-combiner/url-combiner'; +import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-versioning-modal.service'; +import { hasValue } from '../empty.util'; +import { MenuSection } from '../menu/menu.reducer'; + +/** + * Creates the menus for the dspace object pages + */ +@Injectable({ + providedIn: 'root' +}) +export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection[] }> { + + constructor( + protected dSpaceObjectDataService: DSpaceObjectDataService, + protected menuService: MenuService, + protected authorizationService: AuthorizationDataService, + protected modalService: NgbModal, + protected dsoVersioningModalService: DsoVersioningModalService, + ) { + } + + /** + * Initialise all dspace object related menus + */ + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<{ [key: string]: MenuSection[] }> { + const uuid = route.params.id; + return this.dSpaceObjectDataService.findById(uuid, true, false).pipe( + getFirstCompletedRemoteData(), + switchMap((dsoRD) => { + if (dsoRD.hasSucceeded) { + const dso = dsoRD.payload; + return combineLatest(this.getDsoMenus(dso, route, state)).pipe( + map((combinedMenus) => [].concat.apply([], combinedMenus)), + map((menus) => this.addDsoUuidToMenuIDs(menus, dso)), + map((menus) => { + return { + ...route.data?.menu, + [MenuID.DSO_EDIT]: menus + }; + }) + ); + } else { + return observableOf({...route.data?.menu}); + } + }) + ); + } + + /** + * Return all the menus for a dso based on the route and state + */ + getDsoMenus(dso, route, state) { + return [ + this.getItemMenu(dso), + this.getCommonMenu(dso, state) + ]; + } + + /** + * Get the common menus between all dspace objects + */ + protected getCommonMenu(dso, state): Observable { + return combineLatest([ + this.authorizationService.isAuthorized(FeatureID.CanEditMetadata, dso.self), + ]).pipe( + map(([canEditItem]) => { + return [ + { + id: 'edit-dso', + active: false, + visible: canEditItem, + model: { + type: MenuItemType.LINK, + text: this.getDsoType(dso) + '.page.edit', + link: new URLCombiner(state.url, 'edit', 'metadata').toString() + } as LinkMenuItemModel, + icon: 'pencil-alt', + index: 1 + }, + ]; + + }) + ); + } + + /** + * Get item sepcific menus + */ + protected getItemMenu(dso): Observable { + if (dso instanceof Item) { + return combineLatest([ + this.authorizationService.isAuthorized(FeatureID.CanCreateVersion, dso.self), + this.dsoVersioningModalService.isNewVersionButtonDisabled(dso), + this.dsoVersioningModalService.getVersioningTooltipMessage(dso, 'item.page.version.hasDraft', 'item.page.version.create') + ]).pipe( + map(([canCreateVersion, disableVersioning, versionTooltip]) => { + return [ + { + id: 'version-dso', + active: false, + visible: canCreateVersion, + model: { + type: MenuItemType.ONCLICK, + text: versionTooltip, + disabled: disableVersioning, + function: () => { + this.dsoVersioningModalService.openCreateVersionModal(dso); + } + } as OnClickMenuItemModel, + icon: 'code-branch', + index: 0 + }, + ]; + }), + ); + } else { + return observableOf([]); + } + } + + /** + * Retrieve the dso or entity type for an object to be used in generic messages + */ + protected getDsoType(dso) { + const renderType = dso.getRenderTypes()[0]; + if (typeof renderType === 'string' || renderType instanceof String) { + return renderType.toLowerCase(); + } else { + return dso.type.toString().toLowerCase(); + } + } + + /** + * Add the dso uuid to all provided menu ids and parent ids + */ + protected addDsoUuidToMenuIDs(menus, dso) { + return menus.map((menu) => { + Object.assign(menu, { + id: menu.id + '-' + dso.uuid + }); + if (hasValue(menu.parentID)) { + Object.assign(menu, { + parentID: menu.parentID + '-' + dso.uuid + }); + } + return menu; + }); + } +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html new file mode 100644 index 0000000000..b330b1e87d --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html @@ -0,0 +1,18 @@ +
    +
    + +
      + + + +
    +
    +
    + + + + diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss new file mode 100644 index 0000000000..61ec6347f9 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss @@ -0,0 +1,26 @@ +.btn-dark { + background-color: var(--ds-admin-sidebar-bg); +} + +.dso-button-menu { + .dropdown-toggle::after { + display: none; + } +} + +ul.dropdown-menu { + background-color: var(--ds-admin-sidebar-bg); + color: white; + + ::ng-deep a { + color: white; + + &.disabled { + color: $btn-link-disabled-color; + } + } + + .disabled { + color: $btn-link-disabled-color; + } +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts new file mode 100644 index 0000000000..211fd0bdf0 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.spec.ts @@ -0,0 +1,75 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MenuServiceStub } from '../../../testing/menu-service.stub'; +import { TranslateModule } from '@ngx-translate/core'; +import { MenuService } from '../../../menu/menu.service'; +import { CSSVariableService } from '../../../sass-helper/sass-helper.service'; +import { CSSVariableServiceStub } from '../../../testing/css-variable-service.stub'; +import { Router } from '@angular/router'; +import { RouterStub } from '../../../testing/router.stub'; +import { of as observableOf } from 'rxjs'; +import { Component } from '@angular/core'; +import { DsoEditMenuExpandableSectionComponent } from './dso-edit-menu-expandable-section.component'; +import { MenuItemType } from '../../../menu/initial-menus-state'; +import { By } from '@angular/platform-browser'; + +describe('DsoEditMenuExpandableSectionComponent', () => { + let component: DsoEditMenuExpandableSectionComponent; + let fixture: ComponentFixture; + const menuService = new MenuServiceStub(); + const iconString = 'test'; + + const dummySection = { + id: 'dummy', + active: false, + visible: true, + model: { + type: MenuItemType.TEXT, + disabled: false, + text: 'text' + }, + icon: iconString + }; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [DsoEditMenuExpandableSectionComponent, TestComponent], + providers: [ + {provide: 'sectionDataProvider', useValue: dummySection}, + {provide: MenuService, useValue: menuService}, + {provide: CSSVariableService, useClass: CSSVariableServiceStub}, + {provide: Router, useValue: new RouterStub()}, + ] + }).overrideComponent(DsoEditMenuExpandableSectionComponent, { + set: { + entryComponents: [TestComponent] + } + }) + .compileComponents(); + })); + + beforeEach(() => { + spyOn(menuService, 'getSubSectionsByParentID').and.returnValue(observableOf([])); + fixture = TestBed.createComponent(DsoEditMenuExpandableSectionComponent); + component = fixture.componentInstance; + spyOn(component as any, 'getMenuItemComponent').and.returnValue(TestComponent); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should show a button with the icon', () => { + const button = fixture.debugElement.query(By.css('.btn-dark')); + expect(button.nativeElement.innerHTML).toContain('fa-' + iconString); + }); +}); + +// declare a test component +@Component({ + selector: 'ds-test-cmp', + template: `` +}) +class TestComponent { +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts new file mode 100644 index 0000000000..e0ad28617b --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.ts @@ -0,0 +1,39 @@ +import { Component, Inject, Injector } from '@angular/core'; +import { MenuID } from 'src/app/shared/menu/initial-menus-state'; +import { rendersSectionForMenu } from 'src/app/shared/menu/menu-section.decorator'; +import { MenuSectionComponent } from 'src/app/shared/menu/menu-section/menu-section.component'; +import { MenuService } from '../../../menu/menu.service'; +import { MenuSection } from '../../../menu/menu.reducer'; +import { Router } from '@angular/router'; + +/** + * Represents an expandable section in the dso edit menus + */ +@Component({ + /* tslint:disable:component-selector */ + selector: 'ds-dso-edit-menu-expandable-section', + templateUrl: './dso-edit-menu-expandable-section.component.html', + styleUrls: ['./dso-edit-menu-expandable-section.component.scss'], +}) +@rendersSectionForMenu(MenuID.DSO_EDIT, true) +export class DsoEditMenuExpandableSectionComponent extends MenuSectionComponent { + + menuID: MenuID = MenuID.DSO_EDIT; + itemModel; + + constructor( + @Inject('sectionDataProvider') menuSection: MenuSection, + protected menuService: MenuService, + protected injector: Injector, + protected router: Router, + ) { + super(menuSection, menuService, injector); + this.itemModel = menuSection.model; + } + + ngOnInit(): void { + this.menuService.activateSection(this.menuID, this.section.id); + super.ngOnInit(); + } + +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.html b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.html new file mode 100644 index 0000000000..0fc6d19667 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.html @@ -0,0 +1,25 @@ +
    + + + +
    + +
    +
    + +
    + +
    diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.scss b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.scss new file mode 100644 index 0000000000..cf0e81c553 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.scss @@ -0,0 +1,3 @@ +.btn-dark { + background-color: var(--ds-admin-sidebar-bg); +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts new file mode 100644 index 0000000000..bcfeab8180 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.spec.ts @@ -0,0 +1,173 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MenuServiceStub } from '../../../testing/menu-service.stub'; +import { TranslateModule } from '@ngx-translate/core'; +import { MenuService } from '../../../menu/menu.service'; +import { CSSVariableService } from '../../../sass-helper/sass-helper.service'; +import { CSSVariableServiceStub } from '../../../testing/css-variable-service.stub'; +import { Router } from '@angular/router'; +import { RouterStub } from '../../../testing/router.stub'; +import { of as observableOf } from 'rxjs'; +import { Component } from '@angular/core'; +import { MenuItemType } from '../../../menu/initial-menus-state'; +import { By } from '@angular/platform-browser'; +import { DsoEditMenuSectionComponent } from './dso-edit-menu-section.component'; +import { OnClickMenuItemModel } from '../../../menu/menu-item/models/onclick.model'; + +function initAsync(dummySectionText: { visible: boolean; icon: string; active: boolean; model: { disabled: boolean; text: string; type: MenuItemType }; id: string }, menuService: MenuServiceStub) { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [DsoEditMenuSectionComponent, TestComponent], + providers: [ + {provide: 'sectionDataProvider', useValue: dummySectionText}, + {provide: MenuService, useValue: menuService}, + {provide: CSSVariableService, useClass: CSSVariableServiceStub}, + {provide: Router, useValue: new RouterStub()}, + ] + }).overrideComponent(DsoEditMenuSectionComponent, { + set: { + entryComponents: [TestComponent] + } + }) + .compileComponents(); + })); +} + +describe('DsoEditMenuSectionComponent', () => { + let component: DsoEditMenuSectionComponent; + let fixture: ComponentFixture; + const menuService = new MenuServiceStub(); + const iconString = 'test'; + + const dummySectionText = { + id: 'dummy', + active: false, + visible: true, + model: { + type: MenuItemType.TEXT, + disabled: false, + text: 'text' + }, + icon: iconString + }; + const dummySectionLink = { + id: 'dummy', + active: false, + visible: true, + model: { + type: MenuItemType.LINK, + disabled: false, + text: 'text', + link: 'link' + }, + icon: iconString + }; + + const dummySectionClick = { + id: 'dummy', + active: false, + visible: true, + model: { + type: MenuItemType.ONCLICK, + disabled: false, + text: 'text', + function: () => 'test' + }, + icon: iconString + }; + + describe('text model', () => { + initAsync(dummySectionText, menuService); + beforeEach(() => { + spyOn(menuService, 'getSubSectionsByParentID').and.returnValue(observableOf([])); + fixture = TestBed.createComponent(DsoEditMenuSectionComponent); + component = fixture.componentInstance; + spyOn(component as any, 'getMenuItemComponent').and.returnValue(TestComponent); + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should show a button with the icon', () => { + const button = fixture.debugElement.query(By.css('.btn-dark')); + expect(button.nativeElement.innerHTML).toContain('fa-' + iconString); + }); + describe('when the section model in a disabled link or text', () => { + it('should show just the button', () => { + const textButton = fixture.debugElement.query(By.css('div div button')); + expect(textButton.nativeElement.innerHTML).toContain('fa-' + iconString); + }); + }); + }); + describe('on click model', () => { + initAsync(dummySectionClick, menuService); + beforeEach(() => { + spyOn(menuService, 'getSubSectionsByParentID').and.returnValue(observableOf([])); + fixture = TestBed.createComponent(DsoEditMenuSectionComponent); + component = fixture.componentInstance; + spyOn(component as any, 'getMenuItemComponent').and.returnValue(TestComponent); + fixture.detectChanges(); + }); + + describe('when the section model in an on click menu', () => { + it('should call the activate method when clicking the button', () => { + spyOn(component, 'activate'); + + const button = fixture.debugElement.query(By.css('.btn-dark')); + button.triggerEventHandler('click', null); + + expect(component.activate).toHaveBeenCalled(); + }); + }); + describe('activate', () => { + const mockEvent = jasmine.createSpyObj('event', { + preventDefault: jasmine.createSpy('preventDefault'), + stopPropagation: jasmine.createSpy('stopPropagation'), + }); + it('should call the item model function when not disabled', () => { + spyOn(component.section.model as OnClickMenuItemModel, 'function'); + component.activate(mockEvent); + + expect((component.section.model as OnClickMenuItemModel).function).toHaveBeenCalled(); + }); + it('should call not the item model function when disabled', () => { + spyOn(component.section.model as OnClickMenuItemModel, 'function'); + component.itemModel.disabled = true; + component.activate(mockEvent); + + expect((component.section.model as OnClickMenuItemModel).function).not.toHaveBeenCalled(); + component.itemModel.disabled = false; + }); + }); + + }); + + describe('link model', () => { + initAsync(dummySectionLink, menuService); + beforeEach(() => { + spyOn(menuService, 'getSubSectionsByParentID').and.returnValue(observableOf([])); + fixture = TestBed.createComponent(DsoEditMenuSectionComponent); + component = fixture.componentInstance; + spyOn(component as any, 'getMenuItemComponent').and.returnValue(TestComponent); + fixture.detectChanges(); + }); + + describe('when the section model in a non disabled link', () => { + it('should show a link element with the button in it', () => { + const link = fixture.debugElement.query(By.css('a')); + expect(link.nativeElement.innerHTML).toContain('button'); + }); + }); + + }); +}); + +// declare a test component +@Component({ + selector: 'ds-test-cmp', + template: `` +}) +class TestComponent { +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts new file mode 100644 index 0000000000..63354e9749 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component.ts @@ -0,0 +1,51 @@ +import { Component, Inject, Injector, OnInit } from '@angular/core'; +import { MenuID } from 'src/app/shared/menu/initial-menus-state'; +import { rendersSectionForMenu } from 'src/app/shared/menu/menu-section.decorator'; +import { MenuSectionComponent } from 'src/app/shared/menu/menu-section/menu-section.component'; +import { MenuService } from '../../../menu/menu.service'; +import { MenuSection } from '../../../menu/menu.reducer'; +import { isNotEmpty } from '../../../empty.util'; + +/** + * Represents a non-expandable section in the dso edit menus + */ +@Component({ + /* tslint:disable:component-selector */ + selector: 'ds-dso-edit-menu-section', + templateUrl: './dso-edit-menu-section.component.html', + styleUrls: ['./dso-edit-menu-section.component.scss'] +}) +@rendersSectionForMenu(MenuID.DSO_EDIT, false) +export class DsoEditMenuSectionComponent extends MenuSectionComponent implements OnInit { + + menuID: MenuID = MenuID.DSO_EDIT; + itemModel; + hasLink: boolean; + canActivate: boolean; + + constructor( + @Inject('sectionDataProvider') menuSection: MenuSection, + protected menuService: MenuService, + protected injector: Injector, + ) { + super(menuSection, menuService, injector); + this.itemModel = menuSection.model; + } + + ngOnInit(): void { + this.hasLink = isNotEmpty(this.itemModel?.link); + this.canActivate = isNotEmpty(this.itemModel?.function); + super.ngOnInit(); + } + + /** + * Activate the section's model funtion + */ + public activate(event: any) { + event.preventDefault(); + if (!this.itemModel.disabled) { + this.itemModel.function(); + } + event.stopPropagation(); + } +} diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.html b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.html new file mode 100644 index 0000000000..9ef6fff1dc --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.html @@ -0,0 +1,6 @@ +
    +
    + +
    +
    diff --git a/src/app/item-page/simple/item-types/versioned-item/versioned-item.component.html b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.scss similarity index 100% rename from src/app/item-page/simple/item-types/versioned-item/versioned-item.component.html rename to src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.scss diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.spec.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.spec.ts new file mode 100644 index 0000000000..f2fb656ecc --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.spec.ts @@ -0,0 +1,78 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { TranslateModule } from '@ngx-translate/core'; +import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; +import { of as observableOf } from 'rxjs'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; +import { DsoEditMenuComponent } from './dso-edit-menu.component'; +import { MenuServiceStub } from '../../testing/menu-service.stub'; +import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; +import { AuthService } from '../../../core/auth/auth.service'; +import { AuthServiceStub } from '../../testing/auth-service.stub'; +import { MenuService } from '../../menu/menu.service'; +import { + ExpandableNavbarSectionComponent +} from '../../../navbar/expandable-navbar-section/expandable-navbar-section.component'; +import { MenuItemModel } from '../../menu/menu-item/models/menu-item.model'; + +describe('DsoEditMenuComponent', () => { + let comp: DsoEditMenuComponent; + let fixture: ComponentFixture; + const menuService = new MenuServiceStub(); + let authorizationService: AuthorizationDataService; + + const routeStub = { + children: [] + }; + + const section = { + id: 'edit-dso', + active: false, + visible: true, + model: { + type: null, + disabled: false, + } as MenuItemModel, + icon: 'pencil-alt', + index: 1 + }; + + + beforeEach(waitForAsync(() => { + authorizationService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true) + }); + spyOn(menuService, 'getMenuTopSections').and.returnValue(observableOf([section])); + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot(), RouterTestingModule], + declarations: [DsoEditMenuComponent], + providers: [ + Injector, + {provide: MenuService, useValue: menuService}, + {provide: AuthService, useClass: AuthServiceStub}, + {provide: ActivatedRoute, useValue: routeStub}, + {provide: AuthorizationDataService, useValue: authorizationService}, + ], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ExpandableNavbarSectionComponent, { + set: { + changeDetection: ChangeDetectionStrategy.Default, + } + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DsoEditMenuComponent); + comp = fixture.componentInstance; + comp.sections = observableOf([]); + fixture.detectChanges(); + }); + + describe('onInit', () => { + it('should create', () => { + expect(comp).toBeTruthy(); + }); + }); +}); + diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts new file mode 100644 index 0000000000..d754e07b32 --- /dev/null +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts @@ -0,0 +1,36 @@ +import { Component, Injector } from '@angular/core'; +import { AuthorizationDataService } from 'src/app/core/data/feature-authorization/authorization-data.service'; +import { MenuID } from '../../menu/initial-menus-state'; +import { MenuComponent } from '../../menu/menu.component'; +import { MenuService } from '../../menu/menu.service'; +import { ActivatedRoute } from '@angular/router'; +import { AuthService } from '../../../core/auth/auth.service'; + +/** + * Component representing the edit menu and other menus on the dspace object pages + */ +@Component({ + selector: 'ds-dso-edit-menu', + styleUrls: ['./dso-edit-menu.component.scss'], + templateUrl: './dso-edit-menu.component.html', +}) +export class DsoEditMenuComponent extends MenuComponent { + /** + * The menu ID of this component is DSO_EDIT + * @type {MenuID.DSO_EDIT} + */ + menuID = MenuID.DSO_EDIT; + + constructor(protected menuService: MenuService, + protected injector: Injector, + public authorizationService: AuthorizationDataService, + public route: ActivatedRoute, + private authService: AuthService, + ) { + super(menuService, injector, authorizationService, route); + } + + ngOnInit(): void { + super.ngOnInit(); + } +} diff --git a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.html b/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.html deleted file mode 100644 index d680c140d8..0000000000 --- a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - - diff --git a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.scss b/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.scss deleted file mode 100644 index e8b7d689a3..0000000000 --- a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -.btn-dark { - background-color: var(--ds-admin-sidebar-bg); -} diff --git a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.spec.ts b/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.spec.ts deleted file mode 100644 index 5949a98f71..0000000000 --- a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.spec.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { DsoPageEditButtonComponent } from './dso-page-edit-button.component'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { Item } from '../../../core/shared/item.model'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { of as observableOf } from 'rxjs'; -import { TranslateModule } from '@ngx-translate/core'; -import { RouterTestingModule } from '@angular/router/testing'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { By } from '@angular/platform-browser'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; - -describe('DsoPageEditButtonComponent', () => { - let component: DsoPageEditButtonComponent; - let fixture: ComponentFixture; - - let authorizationService: AuthorizationDataService; - let dso: DSpaceObject; - - beforeEach(waitForAsync(() => { - dso = Object.assign(new Item(), { - id: 'test-item', - _links: { - self: { href: 'test-item-selflink' } - } - }); - authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) - }); - TestBed.configureTestingModule({ - declarations: [DsoPageEditButtonComponent], - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NgbModule], - providers: [ - { provide: AuthorizationDataService, useValue: authorizationService } - ] - }).compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DsoPageEditButtonComponent); - component = fixture.componentInstance; - component.dso = dso; - component.pageRoute = 'test'; - fixture.detectChanges(); - }); - - it('should check the authorization of the current user', () => { - expect(authorizationService.isAuthorized).toHaveBeenCalledWith(FeatureID.CanEditMetadata, dso.self); - }); - - describe('when the user is authorized', () => { - beforeEach(() => { - (authorizationService.isAuthorized as jasmine.Spy).and.returnValue(observableOf(true)); - component.ngOnInit(); - fixture.detectChanges(); - }); - - it('should render a link', () => { - const link = fixture.debugElement.query(By.css('a')); - expect(link).not.toBeNull(); - }); - }); - - describe('when the user is not authorized', () => { - beforeEach(() => { - (authorizationService.isAuthorized as jasmine.Spy).and.returnValue(observableOf(false)); - component.ngOnInit(); - fixture.detectChanges(); - }); - - it('should not render a link', () => { - const link = fixture.debugElement.query(By.css('a')); - expect(link).toBeNull(); - }); - }); -}); diff --git a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.ts b/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.ts deleted file mode 100644 index 1879581d23..0000000000 --- a/src/app/shared/dso-page/dso-page-edit-button/dso-page-edit-button.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { Observable } from 'rxjs'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; - -@Component({ - selector: 'ds-dso-page-edit-button', - templateUrl: './dso-page-edit-button.component.html', - styleUrls: ['./dso-page-edit-button.component.scss'] -}) -/** - * Display a button linking to the edit page of a DSpaceObject - */ -export class DsoPageEditButtonComponent implements OnInit { - /** - * The DSpaceObject to display a button to the edit page for - */ - @Input() dso: DSpaceObject; - - /** - * The prefix of the route to the edit page (before the object's UUID, e.g. "items") - */ - @Input() pageRoute: string; - - /** - * A message for the tooltip on the button - * Supports i18n keys - */ - @Input() tooltipMsg: string; - - /** - * Whether or not the current user is authorized to edit the DSpaceObject - */ - isAuthorized$: Observable; - - constructor(protected authorizationService: AuthorizationDataService) { } - - ngOnInit() { - this.isAuthorized$ = this.authorizationService.isAuthorized(FeatureID.CanEditMetadata, this.dso.self); - } - -} diff --git a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.html b/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.html deleted file mode 100644 index 0e2e35dcb7..0000000000 --- a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.html +++ /dev/null @@ -1,8 +0,0 @@ - diff --git a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.scss b/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.scss deleted file mode 100644 index e8b7d689a3..0000000000 --- a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -.btn-dark { - background-color: var(--ds-admin-sidebar-bg); -} diff --git a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts b/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts deleted file mode 100644 index 9839507d57..0000000000 --- a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.spec.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { DsoPageVersionButtonComponent } from './dso-page-version-button.component'; -import { Item } from '../../../core/shared/item.model'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { Observable, of, of as observableOf } from 'rxjs'; -import { TranslateModule } from '@ngx-translate/core'; -import { RouterTestingModule } from '@angular/router/testing'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { By } from '@angular/platform-browser'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { VersionHistoryDataService } from '../../../core/data/version-history-data.service'; - -describe('DsoPageVersionButtonComponent', () => { - let component: DsoPageVersionButtonComponent; - let fixture: ComponentFixture; - - let authorizationService: AuthorizationDataService; - let versionHistoryService: VersionHistoryDataService; - - let dso: Item; - let tooltipMsg: Observable; - - const authorizationServiceSpy = jasmine.createSpyObj('authorizationService', ['isAuthorized']); - - const versionHistoryServiceSpy = jasmine.createSpyObj('versionHistoryService', - ['getVersions', 'getLatestVersionFromHistory$', 'isLatest$', 'hasDraftVersion$'] - ); - - beforeEach(waitForAsync(() => { - dso = Object.assign(new Item(), { - id: 'test-item', - _links: { - self: { href: 'test-item-selflink' }, - version: { href: 'test-item-version-selflink' }, - }, - }); - tooltipMsg = of('tooltip-msg'); - - TestBed.configureTestingModule({ - declarations: [DsoPageVersionButtonComponent], - imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), NgbModule], - providers: [ - { provide: AuthorizationDataService, useValue: authorizationServiceSpy }, - { provide: VersionHistoryDataService, useValue: versionHistoryServiceSpy }, - ] - }).compileComponents(); - - authorizationService = TestBed.inject(AuthorizationDataService); - versionHistoryService = TestBed.inject(VersionHistoryDataService); - - versionHistoryServiceSpy.hasDraftVersion$.and.returnValue(observableOf(true)); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DsoPageVersionButtonComponent); - component = fixture.componentInstance; - component.dso = dso; - component.tooltipMsg$ = tooltipMsg; - fixture.detectChanges(); - }); - - it('should check the authorization of the current user', () => { - expect(authorizationService.isAuthorized).toHaveBeenCalledWith(FeatureID.CanCreateVersion, dso.self); - }); - - it('should check if the item has a draft version', () => { - expect(versionHistoryServiceSpy.hasDraftVersion$).toHaveBeenCalledWith(dso._links.version.href); - }); - - describe('when the user is authorized', () => { - beforeEach(() => { - authorizationServiceSpy.isAuthorized.and.returnValue(observableOf(true)); - component.ngOnInit(); - fixture.detectChanges(); - }); - - it('should render a button', () => { - const button = fixture.debugElement.query(By.css('button')); - expect(button).not.toBeNull(); - }); - }); - - describe('when the user is not authorized', () => { - beforeEach(() => { - authorizationServiceSpy.isAuthorized.and.returnValue(observableOf(false)); - component.ngOnInit(); - fixture.detectChanges(); - }); - - it('should render a button', () => { - const button = fixture.debugElement.query(By.css('button')); - expect(button).toBeNull(); - }); - }); - -}); diff --git a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.ts b/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.ts deleted file mode 100644 index cf07953c75..0000000000 --- a/src/app/shared/dso-page/dso-page-version-button/dso-page-version-button.component.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; -import { Observable, of } from 'rxjs'; -import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { VersionHistoryDataService } from '../../../core/data/version-history-data.service'; -import { Item } from '../../../core/shared/item.model'; -import { map, startWith, switchMap } from 'rxjs/operators'; - -@Component({ - selector: 'ds-dso-page-version-button', - templateUrl: './dso-page-version-button.component.html', - styleUrls: ['./dso-page-version-button.component.scss'] -}) -/** - * Display a button linking to the edit page of a DSpaceObject - */ -export class DsoPageVersionButtonComponent implements OnInit { - /** - * The item for which display a button to create a new version - */ - @Input() dso: Item; - - /** - * A message for the tooltip on the button - * Supports i18n keys - */ - @Input() tooltipMsgCreate: string; - - /** - * A message for the tooltip on the button (when is disabled) - * Supports i18n keys - */ - @Input() tooltipMsgHasDraft: string; - - /** - * Emits an event that triggers the creation of the new version - */ - @Output() newVersionEvent = new EventEmitter(); - - /** - * Whether or not the current user is authorized to create a new version of the DSpaceObject - */ - isAuthorized$: Observable; - - disableNewVersionButton$: Observable; - - tooltipMsg$: Observable; - - constructor( - protected authorizationService: AuthorizationDataService, - protected versionHistoryService: VersionHistoryDataService, - ) { - } - - /** - * Creates a new version for the current item - */ - createNewVersion() { - this.newVersionEvent.emit(); - } - - ngOnInit() { - this.isAuthorized$ = this.authorizationService.isAuthorized(FeatureID.CanCreateVersion, this.dso.self); - - this.disableNewVersionButton$ = this.versionHistoryService.hasDraftVersion$(this.dso._links.version.href).pipe( - // button is disabled if hasDraftVersion = true, and enabled if hasDraftVersion = false or null - // (hasDraftVersion is null when a version history does not exist) - map((res) => Boolean(res)), - startWith(true), - ); - - this.tooltipMsg$ = this.disableNewVersionButton$.pipe( - switchMap((hasDraftVersion) => of(hasDraftVersion ? this.tooltipMsgHasDraft : this.tooltipMsgCreate)), - ); - } - -} diff --git a/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts new file mode 100644 index 0000000000..0a02481d58 --- /dev/null +++ b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts @@ -0,0 +1,92 @@ +import { DsoVersioningModalService } from './dso-versioning-modal.service'; +import { waitForAsync } from '@angular/core/testing'; +import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; +import { Version } from '../../../core/shared/version.model'; +import { Item } from '../../../core/shared/item.model'; +import { MetadataMap } from '../../../core/shared/metadata.models'; +import { createRelationshipsObservable } from '../../../item-page/simple/item-types/shared/item.component.spec'; +import { buildPaginatedList } from '../../../core/data/paginated-list.model'; +import { PageInfo } from '../../../core/shared/page-info.model'; +import { EMPTY, of as observableOf } from 'rxjs'; + +fdescribe('DsoVersioningModalService', () => { + let service: DsoVersioningModalService; + let modalService; + let versionService; + let versionHistoryService; + let itemVersionShared; + let router; + let workspaceItemDataService; + let itemService; + + const mockItem: Item = Object.assign(new Item(), { + bundles: createSuccessfulRemoteDataObject$(buildPaginatedList(new PageInfo(), [])), + metadata: new MetadataMap(), + relationships: createRelationshipsObservable(), + _links: { + self: { + href: 'item-href' + }, + version: { + href: 'version-href' + } + } + }); + + beforeEach(waitForAsync(() => { + modalService = jasmine.createSpyObj('modalService', { + open: {componentInstance: {firstVersion: {}, versionNumber: {}, createVersionEvent: EMPTY}} + }); + versionService = jasmine.createSpyObj('versionService', { + findByHref: createSuccessfulRemoteDataObject$(new Version()), + }); + versionHistoryService = jasmine.createSpyObj('versionHistoryService', { + createVersion: createSuccessfulRemoteDataObject$(new Version()), + hasDraftVersion$: observableOf(false) + }); + itemVersionShared = jasmine.createSpyObj('itemVersionShared', ['notifyCreateNewVersion']); + router = jasmine.createSpyObj('router', ['navigateByUrl']); + workspaceItemDataService = jasmine.createSpyObj('workspaceItemDataService', ['findByItem']); + itemService = jasmine.createSpyObj('itemService', ['findByHref']); + + service = new DsoVersioningModalService( + modalService, + versionService, + versionHistoryService, + itemVersionShared, + router, + workspaceItemDataService, + itemService + ); + })); + describe('when onCreateNewVersion() is called', () => { + it('should call versionService.findByHref', () => { + service.openCreateVersionModal(mockItem); + expect(versionService.findByHref).toHaveBeenCalledWith('version-href'); + }); + }); + + describe('isNewVersionButtonDisabled', () => { + it('should call versionHistoryService.hasDraftVersion$', () => { + service.isNewVersionButtonDisabled(mockItem); + expect(versionHistoryService.hasDraftVersion$).toHaveBeenCalledWith(mockItem._links.version.href); + }); + }); + + describe('getVersioningTooltipMessage', () => { + it('should return the create message when isNewVersionButtonDisabled returns false', (done) => { + spyOn(service, 'isNewVersionButtonDisabled').and.returnValue(observableOf(false)); + service.getVersioningTooltipMessage(mockItem, 'draft-message', 'create-message').subscribe((message) => { + expect(message).toEqual('create-message'); + done(); + }); + }); + it('should return the draft message when isNewVersionButtonDisabled returns true', (done) => { + spyOn(service, 'isNewVersionButtonDisabled').and.returnValue(observableOf(true)); + service.getVersioningTooltipMessage(mockItem, 'draft-message', 'create-message').subscribe((message) => { + expect(message).toEqual('draft-message'); + done(); + }); + }); + }); +}); diff --git a/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts new file mode 100644 index 0000000000..e1b827a50b --- /dev/null +++ b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.ts @@ -0,0 +1,98 @@ +import { + ItemVersionsSummaryModalComponent +} from '../../item/item-versions/item-versions-summary-modal/item-versions-summary-modal.component'; +import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../../../core/shared/operators'; +import { RemoteData } from '../../../core/data/remote-data'; +import { Version } from '../../../core/shared/version.model'; +import { map, startWith, switchMap, tap } from 'rxjs/operators'; +import { Item } from '../../../core/shared/item.model'; +import { WorkspaceItem } from '../../../core/submission/models/workspaceitem.model'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { VersionDataService } from '../../../core/data/version-data.service'; +import { VersionHistoryDataService } from '../../../core/data/version-history-data.service'; +import { ItemVersionsSharedService } from '../../item/item-versions/item-versions-shared.service'; +import { Router } from '@angular/router'; +import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem-data.service'; +import { ItemDataService } from '../../../core/data/item-data.service'; +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +/** + * Service to take care of all the functionality related to the version creation modal + */ +@Injectable({ + providedIn: 'root' +}) +export class DsoVersioningModalService { + + constructor( + protected modalService: NgbModal, + protected versionService: VersionDataService, + protected versionHistoryService: VersionHistoryDataService, + protected itemVersionShared: ItemVersionsSharedService, + protected router: Router, + protected workspaceItemDataService: WorkspaceitemDataService, + protected itemService: ItemDataService, + ) { + } + + /** + * Open the create version modal for the provided dso + */ + openCreateVersionModal(dso): void { + + const item = dso; + const versionHref = item._links.version.href; + + // Open modal + const activeModal = this.modalService.open(ItemVersionsSummaryModalComponent); + + // Show current version in modal + this.versionService.findByHref(versionHref).pipe(getFirstCompletedRemoteData()).subscribe((res: RemoteData) => { + // if res.hasNoContent then the item is unversioned + activeModal.componentInstance.firstVersion = res.hasNoContent; + activeModal.componentInstance.versionNumber = (res.hasNoContent ? undefined : res.payload.version); + }); + + // On createVersionEvent emitted create new version and notify + activeModal.componentInstance.createVersionEvent.pipe( + switchMap((summary: string) => this.versionHistoryService.createVersion(item._links.self.href, summary)), + getFirstCompletedRemoteData(), + // show success/failure notification + tap((res: RemoteData) => { + this.itemVersionShared.notifyCreateNewVersion(res); + }), + // get workspace item + getFirstSucceededRemoteDataPayload(), + switchMap((newVersion: Version) => this.itemService.findByHref(newVersion._links.item.href)), + getFirstSucceededRemoteDataPayload(), + switchMap((newVersionItem: Item) => this.workspaceItemDataService.findByItem(newVersionItem.uuid, true, false)), + getFirstSucceededRemoteDataPayload(), + ).subscribe((wsItem) => { + const wsiId = wsItem.id; + const route = 'workspaceitems/' + wsiId + '/edit'; + this.router.navigateByUrl(route); + }); + } + + /** + * Checks if the new version button should be disabled for the provided dso + */ + isNewVersionButtonDisabled(dso): Observable { + return this.versionHistoryService.hasDraftVersion$(dso._links.version.href).pipe( + // button is disabled if hasDraftVersion = true, and enabled if hasDraftVersion = false or null + // (hasDraftVersion is null when a version history does not exist) + map((res) => Boolean(res)), + startWith(true), + ); + } + + /** + * Checks and returns the tooltip that needs to be used for the create version button tooltip + */ + getVersioningTooltipMessage(dso, tooltipMsgHasDraft, tooltipMsgCreate): Observable { + return this.isNewVersionButtonDisabled(dso).pipe( + switchMap((hasDraftVersion) => of(hasDraftVersion ? tooltipMsgHasDraft : tooltipMsgCreate)), + ); + } +} diff --git a/src/app/shared/menu/initial-menus-state.ts b/src/app/shared/menu/initial-menus-state.ts index 7b900540b6..086c7c30fa 100644 --- a/src/app/shared/menu/initial-menus-state.ts +++ b/src/app/shared/menu/initial-menus-state.ts @@ -5,7 +5,8 @@ import { MenusState } from './menu.reducer'; */ export enum MenuID { ADMIN = 'admin-sidebar', - PUBLIC = 'public' + PUBLIC = 'public', + DSO_EDIT = 'dso-edit' } /** @@ -36,5 +37,14 @@ export const initialMenusState: MenusState = { visible: true, sections: {}, sectionToSubsectionIndex: {} - } + }, + [MenuID.DSO_EDIT]: + { + id: MenuID.DSO_EDIT, + collapsed: true, + previewCollapsed: true, + visible: false, + sections: {}, + sectionToSubsectionIndex: {} + }, }; diff --git a/src/app/shared/menu/menu-item/link-menu-item.component.html b/src/app/shared/menu/menu-item/link-menu-item.component.html index b2cc73bcf4..4dacc14cbe 100644 --- a/src/app/shared/menu/menu-item/link-menu-item.component.html +++ b/src/app/shared/menu/menu-item/link-menu-item.component.html @@ -1,6 +1,6 @@ {}; } diff --git a/src/app/shared/menu/menu-item/models/search.model.ts b/src/app/shared/menu/menu-item/models/search.model.ts index e8eeda5501..d2f728ba9f 100644 --- a/src/app/shared/menu/menu-item/models/search.model.ts +++ b/src/app/shared/menu/menu-item/models/search.model.ts @@ -6,6 +6,7 @@ import { MenuItemModel } from './menu-item.model'; */ export class SearchMenuItemModel implements MenuItemModel { type = MenuItemType.SEARCH; + disabled: boolean; placeholder: string; action: string; } diff --git a/src/app/shared/menu/menu-item/models/text.model.ts b/src/app/shared/menu/menu-item/models/text.model.ts index bbaf7804d9..d50ec821ad 100644 --- a/src/app/shared/menu/menu-item/models/text.model.ts +++ b/src/app/shared/menu/menu-item/models/text.model.ts @@ -6,5 +6,6 @@ import { MenuItemModel } from './menu-item.model'; */ export class TextMenuItemModel implements MenuItemModel { type = MenuItemType.TEXT; + disabled: boolean; text: string; } diff --git a/src/app/shared/menu/menu-item/onclick-menu-item.component.html b/src/app/shared/menu/menu-item/onclick-menu-item.component.html index fd0192ad5f..5e8aecbd44 100644 --- a/src/app/shared/menu/menu-item/onclick-menu-item.component.html +++ b/src/app/shared/menu/menu-item/onclick-menu-item.component.html @@ -1,4 +1,5 @@ -{{item.text | translate}} +{{item.text | translate}} diff --git a/src/app/shared/menu/menu-item/onclick-menu-item.component.ts b/src/app/shared/menu/menu-item/onclick-menu-item.component.ts index 002bfbc819..ba47e2ad4a 100644 --- a/src/app/shared/menu/menu-item/onclick-menu-item.component.ts +++ b/src/app/shared/menu/menu-item/onclick-menu-item.component.ts @@ -14,13 +14,16 @@ import { OnClickMenuItemModel } from './models/onclick.model'; @rendersMenuItemForType(MenuItemType.ONCLICK) export class OnClickMenuItemComponent { item: OnClickMenuItemModel; + constructor(@Inject('itemModelProvider') item: OnClickMenuItemModel) { this.item = item; } public activate(event: any) { - event.preventDefault(); - this.item.function(); - event.stopPropagation(); + if (!this.item.disabled) { + event.preventDefault(); + this.item.function(); + event.stopPropagation(); + } } } diff --git a/src/app/shared/menu/menu-item/text-menu-item.component.html b/src/app/shared/menu/menu-item/text-menu-item.component.html index 7ba353e5e7..11c4420402 100644 --- a/src/app/shared/menu/menu-item/text-menu-item.component.html +++ b/src/app/shared/menu/menu-item/text-menu-item.component.html @@ -1 +1 @@ -{{item.text | translate}} \ No newline at end of file +{{item.text | translate}} diff --git a/src/app/shared/menu/menu-section/menu-section.component.ts b/src/app/shared/menu/menu-section/menu-section.component.ts index fcd96c65f1..8c845a58d6 100644 --- a/src/app/shared/menu/menu-section/menu-section.component.ts +++ b/src/app/shared/menu/menu-section/menu-section.component.ts @@ -64,7 +64,9 @@ export class MenuSectionComponent implements OnInit, OnDestroy { */ toggleSection(event: Event) { event.preventDefault(); - this.menuService.toggleActiveSection(this.menuID, this.section.id); + if (!this.section.model?.disabled) { + this.menuService.toggleActiveSection(this.menuID, this.section.id); + } } /** @@ -73,7 +75,9 @@ export class MenuSectionComponent implements OnInit, OnDestroy { */ activateSection(event: Event) { event.preventDefault(); - this.menuService.activateSection(this.menuID, this.section.id); + if (!this.section.model?.disabled) { + this.menuService.activateSection(this.menuID, this.section.id); + } } /** diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 715ee66a99..0454646c96 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -157,8 +157,6 @@ import { SidebarSearchListElementComponent } from './object-list/sidebar-search- import { CollectionSidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/collection/collection-sidebar-search-list-element.component'; import { CommunitySidebarSearchListElementComponent } from './object-list/sidebar-search-list-element/community/community-sidebar-search-list-element.component'; import { AuthorizedCollectionSelectorComponent } from './dso-selector/dso-selector/authorized-collection-selector/authorized-collection-selector.component'; -import { DsoPageEditButtonComponent } from './dso-page/dso-page-edit-button/dso-page-edit-button.component'; -import { DsoPageVersionButtonComponent } from './dso-page/dso-page-version-button/dso-page-version-button.component'; import { HoverClassDirective } from './hover-class.directive'; import { ValidationSuggestionsComponent } from './input-suggestions/validation-suggestions/validation-suggestions.component'; import { ItemAlertsComponent } from './item/item-alerts/item-alerts.component'; @@ -177,6 +175,13 @@ import { ScopeSelectorModalComponent } from './search-form/scope-selector-modal/ import { BitstreamRequestACopyPageComponent } from './bitstream-request-a-copy-page/bitstream-request-a-copy-page.component'; import { DsSelectComponent } from './ds-select/ds-select.component'; import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'; +import { + DsoEditMenuSectionComponent +} from './dso-page/dso-edit-menu/dso-edit-menu-section/dso-edit-menu-section.component'; +import { DsoEditMenuComponent } from './dso-page/dso-edit-menu/dso-edit-menu.component'; +import { + DsoEditMenuExpandableSectionComponent +} from './dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -402,18 +407,20 @@ const ENTRY_COMPONENTS = [ OnClickMenuItemComponent, TextMenuItemComponent, ScopeSelectorModalComponent, + DsoEditMenuSectionComponent, + DsoEditMenuExpandableSectionComponent, ]; const SHARED_ITEM_PAGE_COMPONENTS = [ MetadataFieldWrapperComponent, MetadataValuesComponent, - DsoPageEditButtonComponent, - DsoPageVersionButtonComponent, ItemAlertsComponent, GenericItemPageFieldComponent, MetadataRepresentationListComponent, RelatedItemsComponent, - + DsoEditMenuSectionComponent, + DsoEditMenuComponent, + DsoEditMenuExpandableSectionComponent, ]; const PROVIDERS = [ From 96ba1c931992340dbc5e611e26a9acf9b736ad2b Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Wed, 21 Sep 2022 14:28:53 +0200 Subject: [PATCH 005/833] 94390: Implement feedback --- .../admin-sidebar-section.component.ts | 2 +- src/app/collection-page/collection-page-routing.module.ts | 1 - src/app/community-page/community-page-routing.module.ts | 1 - src/app/item-page/item-page-routing.module.ts | 1 - .../dso-edit-menu-expandable-section.component.scss | 4 ++-- .../dso-page/dso-edit-menu/dso-edit-menu.component.ts | 6 +----- 6 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.ts b/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.ts index 620681c654..97b16c0522 100644 --- a/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.ts +++ b/src/app/admin/admin-sidebar/admin-sidebar-section/admin-sidebar-section.component.ts @@ -49,7 +49,7 @@ export class AdminSidebarSectionComponent extends MenuSectionComponent implement navigate(event: any): void { event.preventDefault(); - if (this.isDisabled) { + if (!this.isDisabled) { this.router.navigate(this.itemModel.link); } } diff --git a/src/app/collection-page/collection-page-routing.module.ts b/src/app/collection-page/collection-page-routing.module.ts index c5759f833f..3101347990 100644 --- a/src/app/collection-page/collection-page-routing.module.ts +++ b/src/app/collection-page/collection-page-routing.module.ts @@ -93,7 +93,6 @@ import { DSOEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; LinkService, CreateCollectionPageGuard, CollectionPageAdministratorGuard, - DSOEditMenuResolver ] }) export class CollectionPageRoutingModule { diff --git a/src/app/community-page/community-page-routing.module.ts b/src/app/community-page/community-page-routing.module.ts index ac90f3618c..2c97c99081 100644 --- a/src/app/community-page/community-page-routing.module.ts +++ b/src/app/community-page/community-page-routing.module.ts @@ -75,7 +75,6 @@ import { DSOEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; LinkService, CreateCommunityPageGuard, CommunityPageAdministratorGuard, - DSOEditMenuResolver ] }) export class CommunityPageRoutingModule { diff --git a/src/app/item-page/item-page-routing.module.ts b/src/app/item-page/item-page-routing.module.ts index 1c4da9a267..069936ebd3 100644 --- a/src/app/item-page/item-page-routing.module.ts +++ b/src/app/item-page/item-page-routing.module.ts @@ -90,7 +90,6 @@ import { DSOEditMenuResolver } from '../shared/dso-page/dso-edit-menu.resolver'; LinkService, ItemPageAdministratorGuard, VersionResolver, - DSOEditMenuResolver ] }) diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss index 61ec6347f9..ad6166398c 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.scss @@ -16,11 +16,11 @@ ul.dropdown-menu { color: white; &.disabled { - color: $btn-link-disabled-color; + color: var(--bs-btn-link-disabled-color); } } .disabled { - color: $btn-link-disabled-color; + color: var(--bs-btn-link-disabled-color); } } diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts index d754e07b32..f222966ed8 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-menu.component.ts @@ -24,13 +24,9 @@ export class DsoEditMenuComponent extends MenuComponent { constructor(protected menuService: MenuService, protected injector: Injector, public authorizationService: AuthorizationDataService, - public route: ActivatedRoute, - private authService: AuthService, + public route: ActivatedRoute ) { super(menuService, injector, authorizationService, route); } - ngOnInit(): void { - super.ngOnInit(); - } } From a92060c45ac9b2caca449a0a9f75fadde8997543 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 22 Sep 2022 12:15:34 +0200 Subject: [PATCH 006/833] 94390: Add comment to array flattening --- src/app/shared/dso-page/dso-edit-menu.resolver.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.ts index 003e61df95..d461584358 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts @@ -45,6 +45,7 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection if (dsoRD.hasSucceeded) { const dso = dsoRD.payload; return combineLatest(this.getDsoMenus(dso, route, state)).pipe( + // Menu sections are retrieved as an array of arrays and flattened into a single array map((combinedMenus) => [].concat.apply([], combinedMenus)), map((menus) => this.addDsoUuidToMenuIDs(menus, dso)), map((menus) => { From b7c1e76b7f70894660843285d48324226d220a91 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 22 Sep 2022 16:10:43 +0200 Subject: [PATCH 007/833] 94390: Remove fdescribe --- .../dso-versioning-modal.service.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts index 0a02481d58..fc5c1dafc9 100644 --- a/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts +++ b/src/app/shared/dso-page/dso-versioning-modal-service/dso-versioning-modal.service.spec.ts @@ -9,7 +9,7 @@ import { buildPaginatedList } from '../../../core/data/paginated-list.model'; import { PageInfo } from '../../../core/shared/page-info.model'; import { EMPTY, of as observableOf } from 'rxjs'; -fdescribe('DsoVersioningModalService', () => { +describe('DsoVersioningModalService', () => { let service: DsoVersioningModalService; let modalService; let versionService; From 6a932ec6ac65ef6794b3945fc6be0dbd0fd30af1 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Tue, 27 Sep 2022 16:21:56 +0200 Subject: [PATCH 008/833] 94390: Remove unused import --- .../research-entities/item-pages/person/person.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/entity-groups/research-entities/item-pages/person/person.component.ts b/src/app/entity-groups/research-entities/item-pages/person/person.component.ts index 1ac70bad9d..e5e2a52338 100644 --- a/src/app/entity-groups/research-entities/item-pages/person/person.component.ts +++ b/src/app/entity-groups/research-entities/item-pages/person/person.component.ts @@ -1,7 +1,6 @@ import { Component } from '@angular/core'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../../shared/object-collection/shared/listable-object/listable-object.decorator'; -import { MetadataValue } from '../../../../core/shared/metadata.models'; import { ItemComponent } from '../../../../item-page/simple/item-types/shared/item.component'; @listableObjectComponent('Person', ViewMode.StandalonePage) From 4489b3417c633386b82ee5de1126465bf5ba4234 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Wed, 28 Sep 2022 18:09:30 +0200 Subject: [PATCH 009/833] 94391: intermittent commit --- ...expandable-admin-sidebar-section.component.html | 2 +- .../shared/dso-page/dso-edit-menu.resolver.spec.ts | 8 +++++--- src/app/shared/dso-page/dso-edit-menu.resolver.ts | 9 +++++---- ...dso-edit-menu-expandable-section.component.html | 14 ++++++++------ src/styles/_global-styles.scss | 5 +++++ 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/app/admin/admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component.html b/src/app/admin/admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component.html index 259dbd1060..1f4666bbd0 100644 --- a/src/app/admin/admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component.html +++ b/src/app/admin/admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component.html @@ -7,7 +7,7 @@ [attr.aria-labelledby]="'sidebarName-' + section.id" [attr.aria-expanded]="expanded | async" [title]="('menu.section.icon.' + section.id) | translate" - [class.disabled]="section.model.disabled" + [class.disabled]="section.model?.disabled" (click)="toggleSection($event)" (keyup.space)="toggleSection($event)" (keyup.enter)="toggleSection($event)" diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts index 3f1e34b0e0..ac4c4dae17 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.spec.ts @@ -15,6 +15,8 @@ import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-ve import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.service'; import { Item } from '../../core/shared/item.model'; import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$ } from '../remote-data.utils'; +import { TextMenuItemModel } from '../menu/menu-item/models/text.model'; +import { LinkMenuItemModel } from '../menu/menu-item/models/link.model'; describe('DSOEditMenuResolver', () => { @@ -164,7 +166,7 @@ describe('DSOEditMenuResolver', () => { expect(menuList[0].active).toEqual(false); expect(menuList[0].visible).toEqual(true); expect(menuList[0].model.type).toEqual(MenuItemType.ONCLICK); - expect(menuList[0].model.text).toEqual('message'); + expect((menuList[0].model as TextMenuItemModel).text).toEqual('message'); expect(menuList[0].model.disabled).toEqual(false); expect(menuList[0].icon).toEqual('code-branch'); done(); @@ -179,8 +181,8 @@ describe('DSOEditMenuResolver', () => { expect(menuList[0].active).toEqual(false); expect(menuList[0].visible).toEqual(true); expect(menuList[0].model.type).toEqual(MenuItemType.LINK); - expect(menuList[0].model.text).toEqual('item.page.edit'); - expect(menuList[0].model.link).toEqual('test-url/edit/metadata'); + expect((menuList[0].model as LinkMenuItemModel).text).toEqual('item.page.edit'); + expect((menuList[0].model as LinkMenuItemModel).link).toEqual('test-url/edit/metadata'); expect(menuList[0].icon).toEqual('pencil-alt'); done(); }); diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.ts index d461584358..ceedda7b60 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts @@ -16,6 +16,7 @@ import { URLCombiner } from '../../core/url-combiner/url-combiner'; import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-versioning-modal.service'; import { hasValue } from '../empty.util'; import { MenuSection } from '../menu/menu.reducer'; +import { TextMenuItemModel } from '../menu/menu-item/models/text.model'; /** * Creates the menus for the dspace object pages @@ -65,17 +66,17 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection /** * Return all the menus for a dso based on the route and state */ - getDsoMenus(dso, route, state) { + getDsoMenus(dso, route, state): Observable[] { return [ this.getItemMenu(dso), - this.getCommonMenu(dso, state) + this.getCommonMenu(dso, state), ]; } /** * Get the common menus between all dspace objects */ - protected getCommonMenu(dso, state): Observable { + protected getCommonMenu(dso, state): Observable { return combineLatest([ this.authorizationService.isAuthorized(FeatureID.CanEditMetadata, dso.self), ]).pipe( @@ -102,7 +103,7 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection /** * Get item sepcific menus */ - protected getItemMenu(dso): Observable { + protected getItemMenu(dso): Observable { if (dso instanceof Item) { return combineLatest([ this.authorizationService.isAuthorized(FeatureID.CanCreateVersion, dso.self), diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html index b330b1e87d..d44238eb6e 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html @@ -1,14 +1,16 @@ -
    +
    - -
      - +
        +
    diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss index e337539c15..c71a9695f9 100644 --- a/src/styles/_global-styles.scss +++ b/src/styles/_global-styles.scss @@ -92,3 +92,8 @@ ngb-modal-backdrop { hyphens: auto; } + +ul.dso-edit-dropdown-menu li.nav-item ng-deep a.nav-link { + padding: 0; + display: inline; +} From 785e4085fcb4432d26997e51fa7287037cf3e75e Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Wed, 28 Sep 2022 18:28:41 +0200 Subject: [PATCH 010/833] 94389: Fix icon alignment & dropdown styles --- src/app/shared/dso-page/dso-edit-menu.resolver.ts | 2 -- .../dso-edit-menu-expandable-section.component.html | 9 ++++++--- .../dso-edit-menu-expandable-section.component.scss | 4 ++++ .../dso-edit-menu-expandable-section.component.ts | 12 +++++++++++- src/styles/_global-styles.scss | 3 ++- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/app/shared/dso-page/dso-edit-menu.resolver.ts b/src/app/shared/dso-page/dso-edit-menu.resolver.ts index ceedda7b60..2bf1aa08b5 100644 --- a/src/app/shared/dso-page/dso-edit-menu.resolver.ts +++ b/src/app/shared/dso-page/dso-edit-menu.resolver.ts @@ -16,7 +16,6 @@ import { URLCombiner } from '../../core/url-combiner/url-combiner'; import { DsoVersioningModalService } from './dso-versioning-modal-service/dso-versioning-modal.service'; import { hasValue } from '../empty.util'; import { MenuSection } from '../menu/menu.reducer'; -import { TextMenuItemModel } from '../menu/menu-item/models/text.model'; /** * Creates the menus for the dspace object pages @@ -95,7 +94,6 @@ export class DSOEditMenuResolver implements Resolve<{ [key: string]: MenuSection index: 1 }, ]; - }) ); } diff --git a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html index d44238eb6e..a119cf0327 100644 --- a/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html +++ b/src/app/shared/dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component.html @@ -4,9 +4,12 @@ -
      -
    -
    - +
    + + {{ 'system-wide-alert.form.label.countdownTo.enable' | translate }}
    -
    -
    -
    - - +
    +
    +
    +
    + + +
    -
    -
    -
    - +
    +
    + +
    -
    -
    -
    - +
    +
    + +
    -
    +
    {{'system-wide-alert.form.label.countdownTo.hint' | translate}}
    + +
    +
    +
    + +
    +
    +
    + + + {{'system-wide-alert-banner.countdown.prefix' | translate }} + + + {{'system-wide-alert-banner.countdown.days' | translate: { + days: previewDays + } }} + + + {{'system-wide-alert-banner.countdown.hours' | translate: { + hours: previewHours + } }} + + + {{'system-wide-alert-banner.countdown.minutes' | translate: { + minutes: previewMinutes + } }} + + + {{formMessage.value}} +
    +
    +
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index 65ff75a731..cd040b224b 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index 0c5824c6d6..12f55f63b9 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index 6d88c9761b..a36acf74d1 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,4 +1,4 @@ - + + +
    - +

    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index 680a9909bc..dfb32ec7ef 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index 204f8fc8cb..ad3b71ff30 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index fb0ad21b6e..de9743f15c 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    + - + diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 8adbcbeec3..39183d7fc3 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -95,16 +95,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Output() contentChange = new EventEmitter(); - /** - * Whether or not the "Private" badge should be displayed for this listable object - */ - privateBadge = false; - - /** - * Whether or not the "Withdrawn" badge should be displayed for this listable object - */ - withdrawnBadge = false; - /** * Array to track all subscriptions and unsubscribe them onDestroy * @type {Array} @@ -160,8 +150,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges private instantiateComponent(object) { - this.initBadges(); - const component = this.getComponent(object.getRenderTypes(), this.viewMode, this.context); const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component); @@ -191,19 +179,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges } } - /** - * Initialize which badges should be visible in the listable component - */ - initBadges() { - let objectAsAny = this.object as any; - if (hasValue(objectAsAny.indexableObject)) { - objectAsAny = objectAsAny.indexableObject; - } - const objectExistsAndValidViewMode = hasValue(objectAsAny) && this.viewMode !== ViewMode.StandalonePage; - this.privateBadge = objectExistsAndValidViewMode && hasValue(objectAsAny.isDiscoverable) && !objectAsAny.isDiscoverable; - this.withdrawnBadge = objectExistsAndValidViewMode && hasValue(objectAsAny.isWithdrawn) && objectAsAny.isWithdrawn; - } - /** * Fetch the component depending on the item's entity type, view mode and context * @returns {GenericConstructor} diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index 739fa6c7a8..24f2ad7c78 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -8,7 +8,7 @@
    - +

    {{dso.name}}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index d8c253c8a9..d9405711e6 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -8,7 +8,7 @@
    - +

    {{dso.name}}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index d2454b28e6..035e6041a6 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -17,7 +17,7 @@
    - +

    diff --git a/src/app/shared/object-list/badges/badges.component.html b/src/app/shared/object-list/badges/badges.component.html new file mode 100644 index 0000000000..2a5704970c --- /dev/null +++ b/src/app/shared/object-list/badges/badges.component.html @@ -0,0 +1,6 @@ +
    + +
    +
    + +
    diff --git a/src/app/shared/object-list/badges/badges.component.scss b/src/app/shared/object-list/badges/badges.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/object-list/badges/badges.component.spec.ts b/src/app/shared/object-list/badges/badges.component.spec.ts new file mode 100644 index 0000000000..1ca24639f8 --- /dev/null +++ b/src/app/shared/object-list/badges/badges.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BadgesComponent } from './badges.component'; + +describe('BadgesComponent', () => { + let component: BadgesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BadgesComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BadgesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/object-list/badges/badges.component.ts b/src/app/shared/object-list/badges/badges.component.ts new file mode 100644 index 0000000000..31baba1d2c --- /dev/null +++ b/src/app/shared/object-list/badges/badges.component.ts @@ -0,0 +1,11 @@ +import { Component, Input } from '@angular/core'; +import { DSpaceObject } from '../../../core/shared/dspace-object.model'; + +@Component({ + selector: 'ds-badges', + templateUrl: './badges.component.html', + styleUrls: ['./badges.component.scss'] +}) +export class BadgesComponent { + @Input() object: DSpaceObject; +} diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/app/shared/object-list/badges/status-badge/status-badge.component.html new file mode 100644 index 0000000000..1f28aedf34 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.html @@ -0,0 +1,6 @@ + + {{ "item.badge.private" | translate }} + + + {{ "item.badge.withdrawn" | translate }} + diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts new file mode 100644 index 0000000000..09bc7ea585 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts @@ -0,0 +1,78 @@ +import { Item } from '../../../../core/shared/item.model'; +import { of as observableOf } from 'rxjs'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { TranslateModule } from '@ngx-translate/core'; +import { TruncatePipe } from '../../../utils/truncate.pipe'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { By } from '@angular/platform-browser'; +import { StatusBadgeComponent } from './status-badge.component'; + +let comp: StatusBadgeComponent; +let fixture: ComponentFixture; + +const type = 'authorOfPublication'; + +const mockItemWithEntityType = Object.assign(new Item(), { + bundles: observableOf({}), + metadata: { + 'dspace.entity.type': [ + { + language: 'en_US', + value: type + } + ] + } +}); + +const mockItemWithoutEntityType = Object.assign(new Item(), { + bundles: observableOf({}), + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'This is just another title' + } + ] + } +}); + +describe('ItemTypeBadgeComponent', () => { + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [StatusBadgeComponent, TruncatePipe], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(StatusBadgeComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } + }).compileComponents(); + })); + + beforeEach(waitForAsync(() => { + fixture = TestBed.createComponent(StatusBadgeComponent); + comp = fixture.componentInstance; + })); + + describe('When the item has an entity type', () => { + beforeEach(() => { + comp.object = mockItemWithEntityType; + fixture.detectChanges(); + }); + + it('should show the entity type badge', () => { + const badge = fixture.debugElement.query(By.css('span.badge')); + expect(badge.nativeElement.textContent).toContain(type.toLowerCase()); + }); + }); + + describe('When the item has no entity type', () => { + beforeEach(() => { + comp.object = mockItemWithoutEntityType; + fixture.detectChanges(); + }); + + it('should show an item badge', () => { + const badge = fixture.debugElement.query(By.css('span.badge')); + expect(badge.nativeElement.textContent).toContain('item'); + }); + }); +}); diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.ts new file mode 100644 index 0000000000..7f52741c51 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.ts @@ -0,0 +1,41 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { hasValue } from '../../../empty.util'; + +@Component({ + selector: 'ds-status-badge', + templateUrl: './status-badge.component.html' +}) +/** + * Component rendering the status of an item as a badge + */ +export class StatusBadgeComponent implements OnInit { + + /** + * The component used to retrieve the status from + */ + @Input() object: DSpaceObject; + + /** + * Whether or not the "Private" badge should be displayed for this listable object + */ + privateBadge = false; + + /** + * Whether or not the "Withdrawn" badge should be displayed for this listable object + */ + withdrawnBadge = false; + + /** + * Initialize which badges should be visible + */ + ngOnInit(): void { + let objectAsAny = this.object as any; + if (hasValue(objectAsAny.indexableObject)) { + objectAsAny = objectAsAny.indexableObject; + } + const objectExists = hasValue(objectAsAny); + this.privateBadge = objectExists && hasValue(objectAsAny.isDiscoverable) && !objectAsAny.isDiscoverable; + this.withdrawnBadge = objectExists && hasValue(objectAsAny.isWithdrawn) && objectAsAny.isWithdrawn; + } +} diff --git a/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts b/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts new file mode 100644 index 0000000000..d855fda555 --- /dev/null +++ b/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts @@ -0,0 +1,31 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../theme-support/themed.component'; +import { StatusBadgeComponent } from './status-badge.component'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { TypeBadgeComponent } from '../type-badge/type-badge.component'; + +/** + * Themed wrapper for StatusBadgeComponent + */ +@Component({ + selector: 'ds-themed-status-badge', + styleUrls: [], + templateUrl: '../../../../shared/theme-support/themed.component.html', +}) +export class ThemedStatusBadgeComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof StatusBadgeComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'StatusBadgeComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/object-list/badges/status-badge/status-badge.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./status-badge.component`); + } +} diff --git a/src/app/shared/object-list/badges/themed-badges.component.ts b/src/app/shared/object-list/badges/themed-badges.component.ts new file mode 100644 index 0000000000..8682e33e2e --- /dev/null +++ b/src/app/shared/object-list/badges/themed-badges.component.ts @@ -0,0 +1,32 @@ +import { Component, Input } from '@angular/core'; +import { BadgesComponent } from './badges.component'; +import { ThemedComponent } from '../../theme-support/themed.component'; +import { Observable } from 'rxjs/internal/Observable'; +import { SearchFiltersComponent } from '../../search/search-filters/search-filters.component'; +import { DSpaceObject } from '../../../core/shared/dspace-object.model'; + +/** + * Themed wrapper for BadgesComponent + */ +@Component({ + selector: 'ds-themed-badges', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedBadgesComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof BadgesComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'BadgesComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/shared/object-list/badges/badges.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./badges.component`); + } +} diff --git a/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts b/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts new file mode 100644 index 0000000000..58e56dbe88 --- /dev/null +++ b/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts @@ -0,0 +1,31 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../theme-support/themed.component'; +import { TypeBadgeComponent } from './type-badge.component'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { BadgesComponent } from '../badges.component'; + +/** + * Themed wrapper for TypeBadgeComponent + */ +@Component({ + selector: 'ds-themed-type-badge', + styleUrls: [], + templateUrl: '../../../../shared/theme-support/themed.component.html', +}) +export class ThemedTypeBadgeComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof TypeBadgeComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'TypeBadgeComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/object-list/badges/type-badge/type-badge.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./type-badge.component`); + } +} diff --git a/src/app/shared/object-list/type-badge/type-badge.component.html b/src/app/shared/object-list/badges/type-badge/type-badge.component.html similarity index 66% rename from src/app/shared/object-list/type-badge/type-badge.component.html rename to src/app/shared/object-list/badges/type-badge/type-badge.component.html index 0c2bd7544e..119702c375 100644 --- a/src/app/shared/object-list/type-badge/type-badge.component.html +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.html @@ -1,3 +1,3 @@ -
    + {{ typeMessage | translate }} -
    + diff --git a/src/app/shared/object-list/type-badge/type-badge.component.spec.ts b/src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts similarity index 94% rename from src/app/shared/object-list/type-badge/type-badge.component.spec.ts rename to src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts index 9a7e22c551..21c12ec372 100644 --- a/src/app/shared/object-list/type-badge/type-badge.component.spec.ts +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts @@ -1,8 +1,8 @@ -import { Item } from '../../../core/shared/item.model'; +import { Item } from '../../../../core/shared/item.model'; import { of as observableOf } from 'rxjs'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { TruncatePipe } from '../../utils/truncate.pipe'; +import { TruncatePipe } from '../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { TypeBadgeComponent } from './type-badge.component'; diff --git a/src/app/shared/object-list/type-badge/type-badge.component.ts b/src/app/shared/object-list/badges/type-badge/type-badge.component.ts similarity index 84% rename from src/app/shared/object-list/type-badge/type-badge.component.ts rename to src/app/shared/object-list/badges/type-badge/type-badge.component.ts index 8e843af1e7..2fba2515a9 100644 --- a/src/app/shared/object-list/type-badge/type-badge.component.ts +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import { hasValue, isEmpty } from '../../empty.util'; -import { getResourceTypeValueFor } from '../../../core/cache/object-cache.reducer'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { hasValue, isEmpty } from '../../../empty.util'; +import { getResourceTypeValueFor } from '../../../../core/cache/object-cache.reducer'; @Component({ selector: 'ds-type-badge', diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html index c518d39bd9..31f48475a6 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html @@ -2,7 +2,7 @@ - +

    diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index c98003cd1d..739c16a341 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index e0f0319ffc..8090fe13df 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index 8898632eb5..e6b9acfc6c 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,4 +1,4 @@ - + Date: Mon, 23 Jan 2023 17:25:49 +0100 Subject: [PATCH 186/833] 97425: Fix issue when no previous alert is present --- .../alert-form/system-wide-alert-form.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html index 062b06c294..d6eeaf5046 100644 --- a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html +++ b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html @@ -69,7 +69,7 @@
    -
    +
    From d49ae535a11ee8837606fce309896056a2583e1d Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Mon, 23 Jan 2023 18:08:59 +0100 Subject: [PATCH 187/833] 98819: Added StartsWithDateComponent & StartsWithTextComponent to custom folder --- .../date/starts-with-date.component.html | 0 .../date/starts-with-date.component.scss | 0 .../date/starts-with-date.component.ts | 16 ++++++++++++++++ .../text/starts-with-text.component.html | 0 .../text/starts-with-text.component.scss | 0 .../text/starts-with-text.component.ts | 16 ++++++++++++++++ src/themes/custom/entry-components.ts | 6 +++++- src/themes/custom/theme.module.ts | 6 +++++- 8 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/themes/custom/app/shared/starts-with/date/starts-with-date.component.html create mode 100644 src/themes/custom/app/shared/starts-with/date/starts-with-date.component.scss create mode 100644 src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts create mode 100644 src/themes/custom/app/shared/starts-with/text/starts-with-text.component.html create mode 100644 src/themes/custom/app/shared/starts-with/text/starts-with-text.component.scss create mode 100644 src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts diff --git a/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.html b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.scss b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts new file mode 100644 index 0000000000..ed7efb3ba6 --- /dev/null +++ b/src/themes/custom/app/shared/starts-with/date/starts-with-date.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { renderStartsWithFor, StartsWithType } from '../../../../../../app/shared/starts-with/starts-with-decorator'; +import { + StartsWithDateComponent as BaseComponent +} from '../../../../../../app/shared/starts-with/date/starts-with-date.component'; + +@Component({ + selector: 'ds-starts-with-date', + // styleUrls: ['./starts-with-date.component.scss'], + styleUrls: ['../../../../../../app/shared/starts-with/date/starts-with-date.component.scss'], + // templateUrl: './starts-with-date.component.html', + templateUrl: '../../../../../../app/shared/starts-with/date/starts-with-date.component.html', +}) +@renderStartsWithFor(StartsWithType.date) +export class StartsWithDateComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.html b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.scss b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts new file mode 100644 index 0000000000..9c7a721230 --- /dev/null +++ b/src/themes/custom/app/shared/starts-with/text/starts-with-text.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { renderStartsWithFor, StartsWithType } from '../../../../../../app/shared/starts-with/starts-with-decorator'; +import { + StartsWithTextComponent as BaseComponent +} from '../../../../../../app/shared/starts-with/text/starts-with-text.component'; + +@Component({ + selector: 'ds-starts-with-text', + // styleUrls: ['./starts-with-text.component.scss'], + styleUrls: ['../../../../../../app/shared/starts-with/text/starts-with-text.component.scss'], + // templateUrl: './starts-with-text.component.html', + templateUrl: '../../../../../../app/shared/starts-with/text/starts-with-text.component.html', +}) +@renderStartsWithFor(StartsWithType.text) +export class StartsWithTextComponent extends BaseComponent { +} diff --git a/src/themes/custom/entry-components.ts b/src/themes/custom/entry-components.ts index b518e4cc45..b70fa065f4 100644 --- a/src/themes/custom/entry-components.ts +++ b/src/themes/custom/entry-components.ts @@ -1,5 +1,9 @@ import { PublicationComponent } from './app/item-page/simple/item-types/publication/publication.component'; +import { StartsWithDateComponent } from './app/shared/starts-with/date/starts-with-date.component'; +import { StartsWithTextComponent } from './app/shared/starts-with/text/starts-with-text.component'; export const ENTRY_COMPONENTS = [ - PublicationComponent + PublicationComponent, + StartsWithDateComponent, + StartsWithTextComponent, ]; diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index dac941546b..9d2cccbc8c 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -79,6 +79,8 @@ import { HeaderComponent } from './app/header/header.component'; import { FooterComponent } from './app/footer/footer.component'; import { BreadcrumbsComponent } from './app/breadcrumbs/breadcrumbs.component'; import { HeaderNavbarWrapperComponent } from './app/header-nav-wrapper/header-navbar-wrapper.component'; +import { StartsWithDateComponent } from './app/shared/starts-with/date/starts-with-date.component'; +import { StartsWithTextComponent } from './app/shared/starts-with/text/starts-with-text.component'; const DECLARATIONS = [ HomePageComponent, @@ -119,7 +121,9 @@ const DECLARATIONS = [ HeaderComponent, NavbarComponent, HeaderNavbarWrapperComponent, - BreadcrumbsComponent + BreadcrumbsComponent, + StartsWithDateComponent, + StartsWithTextComponent, ]; @NgModule({ From 3ca8ce509889522eb10ad8546d7931236a4b7ee8 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Mon, 23 Jan 2023 10:59:27 -0800 Subject: [PATCH 188/833] Added regex property to item component --- .../simple/item-types/shared/item.component.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/simple/item-types/shared/item.component.ts b/src/app/item-page/simple/item-types/shared/item.component.ts index 572debdd71..93e6a0b346 100644 --- a/src/app/item-page/simple/item-types/shared/item.component.ts +++ b/src/app/item-page/simple/item-types/shared/item.component.ts @@ -19,7 +19,13 @@ export class ItemComponent implements OnInit { @Input() object: Item; /** - * Used to show or hide the back to results button. + * This regex matches previous routes. The button is shown + * for matching paths and hidden in other cases. + */ + previousRoute = /^(\/search|\/browse|\/collections|\/admin\/search|\/mydspace)/; + + /** + * Used to show or hide the back to results button in the view. */ showBackButton: Observable; @@ -68,7 +74,7 @@ export class ItemComponent implements OnInit { this.itemPageRoute = getItemPageRoute(this.object); // hide/show the back button this.showBackButton = this.routeService.getPreviousUrl().pipe( - filter(url => /^(\/search|\/browse|\/collections|\/admin\/search|\/mydspace)/.test(url)), + filter(url => this.previousRoute.test(url)), take(1), map(() => true) ); From db9a6e4a866e8887a326a8edcab52d9a500f1016 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Mon, 23 Jan 2023 11:04:19 -0800 Subject: [PATCH 189/833] Minor comment update. --- .../shared/results-back-button/results-back-button.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/results-back-button/results-back-button.component.ts b/src/app/shared/results-back-button/results-back-button.component.ts index 779ba81154..cf29cf2f4a 100644 --- a/src/app/shared/results-back-button/results-back-button.component.ts +++ b/src/app/shared/results-back-button/results-back-button.component.ts @@ -9,7 +9,7 @@ import { TranslateService } from '@ngx-translate/core'; changeDetection: ChangeDetectionStrategy.OnPush, }) /** - * Component to add back to result list button to item. + * Component for creating a back to result list button. */ export class ResultsBackButtonComponent implements OnInit { From d7b38b2a7871fbf9e4b8ad31d8afee8374928835 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 08:24:37 +0100 Subject: [PATCH 190/833] Fixed issues with new badges --- ...min-search-result-list-element.component.html | 3 +-- ...stable-object-component-loader.component.html | 8 -------- ...listable-object-component-loader.component.ts | 16 +--------------- ...listable-object-component-loader.component.ts | 3 +-- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index b34868f736..3bf756b9cd 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -2,6 +2,5 @@ [viewMode]="viewModes.ListElement" [index]="index" [linkType]="linkType" - [listID]="listID" - [hideBadges]="true"> + [listID]="listID"> diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html index 9ed4e9eaa8..58561f0277 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html @@ -1,9 +1 @@ -
    -
    - {{ "item.badge.private" | translate }} -
    -
    - {{ "item.badge.withdrawn" | translate }} -
    -
    diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 39183d7fc3..168c696034 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -74,22 +74,11 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Input() value: string; - /** - * Whether or not informational badges (e.g. Private, Withdrawn) should be hidden - */ - @Input() hideBadges = false; - /** * Directive hook used to place the dynamic child component */ @ViewChild(ListableObjectDirective, {static: true}) listableObjectDirective: ListableObjectDirective; - /** - * View on the badges template, to be passed on to the loaded component (which will place the badges in the desired - * location, or on top if not specified) - */ - @ViewChild('badges', { static: true }) badges: ElementRef; - /** * Emit when the listable object has been reloaded. */ @@ -160,10 +149,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges this.compRef = viewContainerRef.createComponent( componentFactory, 0, - undefined, - [ - [this.badges.nativeElement], - ]); + undefined); this.connectInputsAndOutputs(); diff --git a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts index 44836fe2fc..33f8df7030 100644 --- a/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts @@ -16,7 +16,7 @@ import { CollectionElementLinkType } from '../../collection-element-link.type'; }) export class ThemedListableObjectComponentLoaderComponent extends ThemedComponent { protected inAndOutputNames: (keyof ListableObjectComponentLoaderComponent & keyof this)[] = [ - 'object', 'index', 'viewMode', 'context', 'linkType', 'listID', 'linkType', 'showLabel', 'value', 'hideBadges', 'contentChange']; + 'object', 'index', 'viewMode', 'context', 'linkType', 'listID', 'linkType', 'showLabel', 'value', 'contentChange']; @Input() object: ListableObject; @Input() index: number; @@ -26,7 +26,6 @@ export class ThemedListableObjectComponentLoaderComponent extends ThemedComponen @Input() listID: string; @Input() showLabel = true; @Input() value: string; - @Input() hideBadges = false; @Output() contentChange = new EventEmitter(); protected getComponentName(): string { From 1f2897664a18a741fac1cd1a88c345e73bba0d7e Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 09:30:45 +0100 Subject: [PATCH 191/833] Fixing tests --- ...arch-result-grid-element.component.spec.ts | 5 +- ...top-level-community-list.component.spec.ts | 3 +- ...-object-component-loader.component.spec.ts | 58 ------------- .../object-list/badges/badges.component.html | 8 +- .../status-badge/status-badge.component.html | 8 +- .../status-badge.component.spec.ts | 87 +++++++++++-------- .../type-badge/type-badge.component.html | 4 +- .../item-list-preview.component.spec.ts | 4 +- .../search-form/search-form.component.spec.ts | 32 ++++--- 9 files changed, 84 insertions(+), 125 deletions(-) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts index 2cb0413bbc..9a28fd745f 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component.spec.ts @@ -14,6 +14,8 @@ import { By } from '@angular/platform-browser'; import { RouterTestingModule } from '@angular/router/testing'; import { getCollectionEditRoute } from '../../../../../collection-page/collection-page-routing-paths'; import { LinkService } from '../../../../../core/cache/builders/link.service'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; describe('CollectionAdminSearchResultGridElementComponent', () => { let component: CollectionAdminSearchResultGridElementComponent; @@ -45,7 +47,8 @@ describe('CollectionAdminSearchResultGridElementComponent', () => { providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: BitstreamDataService, useValue: {} }, - { provide: LinkService, useValue: linkService } + { provide: LinkService, useValue: linkService }, + { provide: ThemeService, useValue: getMockThemeService() }, ] }) .compileComponents(); diff --git a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts index 00408e4696..c9e8f37ee9 100644 --- a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts +++ b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts @@ -26,7 +26,7 @@ import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; import { ThemeService } from '../../shared/theme-support/theme.service'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; -describe('TopLevelCommunityList Component', () => { +fdescribe('TopLevelCommunityList Component', () => { let comp: TopLevelCommunityListComponent; let fixture: ComponentFixture; let communityDataServiceStub: any; @@ -131,7 +131,6 @@ describe('TopLevelCommunityList Component', () => { { provide: SelectableListService, useValue: {} }, { provide: ThemeService, useValue: themeService }, ], - schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); })); diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts index edf0b3ea7c..4a63a256b6 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts @@ -72,64 +72,6 @@ describe('ListableObjectComponentLoaderComponent', () => { }); }); - describe('when the object is an item and viewMode is a list', () => { - beforeEach(() => { - comp.object = Object.assign(new Item()); - comp.viewMode = ViewMode.ListElement; - }); - - describe('when the item is not withdrawn', () => { - beforeEach(() => { - (comp.object as any).isWithdrawn = false; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should not show the withdrawn badge', () => { - const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); - expect(badge).toBeNull(); - }); - }); - - describe('when the item is withdrawn', () => { - beforeEach(() => { - (comp.object as any).isWithdrawn = true; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should show the withdrawn badge', () => { - const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); - expect(badge).not.toBeNull(); - }); - }); - - describe('when the item is not private', () => { - beforeEach(() => { - (comp.object as any).isDiscoverable = true; - comp.initBadges(); - fixture.detectChanges(); - }); - it('should not show the private badge', () => { - const badge = fixture.debugElement.query(By.css('div.private-badge')); - expect(badge).toBeNull(); - }); - }); - - describe('when the item is private', () => { - beforeEach(() => { - (comp.object as any).isDiscoverable = false; - comp.initBadges(); - fixture.detectChanges(); - }); - - it('should show the private badge', () => { - const badge = fixture.debugElement.query(By.css('div.private-badge')); - expect(badge).not.toBeNull(); - }); - }); - }); - describe('When a reloadedObject is emitted', () => { let listableComponent; let reloadedObject: any; diff --git a/src/app/shared/object-list/badges/badges.component.html b/src/app/shared/object-list/badges/badges.component.html index 2a5704970c..1e59ca3660 100644 --- a/src/app/shared/object-list/badges/badges.component.html +++ b/src/app/shared/object-list/badges/badges.component.html @@ -1,6 +1,2 @@ -
    - -
    -
    - -
    + + diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/app/shared/object-list/badges/status-badge/status-badge.component.html index 1f28aedf34..c864f22afa 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.html +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.html @@ -1,6 +1,6 @@ - +
    {{ "item.badge.private" | translate }} - - +
    +
    {{ "item.badge.withdrawn" | translate }} - +
    diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts index 09bc7ea585..4cfa0e2341 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts +++ b/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts @@ -6,37 +6,17 @@ import { TruncatePipe } from '../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { StatusBadgeComponent } from './status-badge.component'; +import { ViewMode } from '../../../../core/shared/view-mode.model'; let comp: StatusBadgeComponent; let fixture: ComponentFixture; -const type = 'authorOfPublication'; +let withdrawnItem = Object.assign(new Item(), { isWithdrawn: true }); +let notWithdrawnItem = Object.assign(new Item(), { isWithdrawn: false }); +let privateItem = Object.assign(new Item(), { isDiscoverable: false }); +let notPrivateItem = Object.assign(new Item(), { isDiscoverable: true }); -const mockItemWithEntityType = Object.assign(new Item(), { - bundles: observableOf({}), - metadata: { - 'dspace.entity.type': [ - { - language: 'en_US', - value: type - } - ] - } -}); - -const mockItemWithoutEntityType = Object.assign(new Item(), { - bundles: observableOf({}), - metadata: { - 'dc.title': [ - { - language: 'en_US', - value: 'This is just another title' - } - ] - } -}); - -describe('ItemTypeBadgeComponent', () => { +describe('ItemStatusBadgeComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot()], @@ -45,34 +25,69 @@ describe('ItemTypeBadgeComponent', () => { }).overrideComponent(StatusBadgeComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); + init(); })); + function init() { + withdrawnItem = Object.assign(new Item(), { isWithdrawn: true }); + notWithdrawnItem = Object.assign(new Item(), { isWithdrawn: false }); + privateItem = Object.assign(new Item(), { isDiscoverable: false }); + notPrivateItem = Object.assign(new Item(), { isDiscoverable: true }); + } beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(StatusBadgeComponent); comp = fixture.componentInstance; })); - describe('When the item has an entity type', () => { + + describe('when the item is not withdrawn', () => { beforeEach(() => { - comp.object = mockItemWithEntityType; + comp.object = notWithdrawnItem; + comp.ngOnInit(); fixture.detectChanges(); }); - it('should show the entity type badge', () => { - const badge = fixture.debugElement.query(By.css('span.badge')); - expect(badge.nativeElement.textContent).toContain(type.toLowerCase()); + it('should not show the withdrawn badge', () => { + const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); + expect(badge).toBeNull(); }); }); - describe('When the item has no entity type', () => { + describe('when the item is withdrawn', () => { beforeEach(() => { - comp.object = mockItemWithoutEntityType; + comp.object = withdrawnItem; + comp.ngOnInit(); fixture.detectChanges(); }); - it('should show an item badge', () => { - const badge = fixture.debugElement.query(By.css('span.badge')); - expect(badge.nativeElement.textContent).toContain('item'); + it('should show the withdrawn badge', () => { + const badge = fixture.debugElement.query(By.css('div.withdrawn-badge')); + expect(badge).not.toBeNull(); + }); + }); + + describe('when the item is not private', () => { + beforeEach(() => { + comp.object = notPrivateItem; + comp.ngOnInit(); + fixture.detectChanges(); + }); + it('should not show the private badge', () => { + const badge = fixture.debugElement.query(By.css('div.private-badge')); + expect(badge).toBeNull(); + }); + }); + + describe('when the item is private', () => { + beforeEach(() => { + comp.object = privateItem; + comp.ngOnInit(); + fixture.detectChanges(); + }); + + it('should show the private badge', () => { + const badge = fixture.debugElement.query(By.css('div.private-badge')); + expect(badge).not.toBeNull(); }); }); }); diff --git a/src/app/shared/object-list/badges/type-badge/type-badge.component.html b/src/app/shared/object-list/badges/type-badge/type-badge.component.html index 119702c375..0c2bd7544e 100644 --- a/src/app/shared/object-list/badges/type-badge/type-badge.component.html +++ b/src/app/shared/object-list/badges/type-badge/type-badge.component.html @@ -1,3 +1,3 @@ - +
    {{ typeMessage | translate }} - +
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts index 023b51a8dd..65147f17d4 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.spec.ts @@ -154,8 +154,8 @@ describe('ItemListPreviewComponent', () => { fixture.detectChanges(); }); - it('should show the entity type span', () => { - const entityField = fixture.debugElement.query(By.css('ds-type-badge')); + it('should show the badges', () => { + const entityField = fixture.debugElement.query(By.css('ds-themed-badges')); expect(entityField).not.toBeNull(); }); }); diff --git a/src/app/shared/search-form/search-form.component.spec.ts b/src/app/shared/search-form/search-form.component.spec.ts index 20c9435eb4..f1c05d47df 100644 --- a/src/app/shared/search-form/search-form.component.spec.ts +++ b/src/app/shared/search-form/search-form.component.spec.ts @@ -36,7 +36,9 @@ describe('SearchFormComponent', () => { { provide: SearchConfigurationService, useValue: searchConfigService }, { provide: DSpaceObjectDataService, useValue: { findById: () => createSuccessfulRemoteDataObject$(undefined)} } ], - declarations: [SearchFormComponent] + declarations: [ + SearchFormComponent, + ] }).compileComponents(); })); @@ -47,21 +49,23 @@ describe('SearchFormComponent', () => { el = de.nativeElement; }); - it('should not display scopes when empty', () => { - fixture.detectChanges(); - const select = de.query(By.css('select')); - expect(select).toBeNull(); - }); - - it('should not display scopes when scopeSelectable is false', () => { - comp.scopeSelectable = false; - comp.scopes = objects; - comp.scope = objects[1].id; + it('should not display scopes when showScopeSelector is false', fakeAsync(() => { + comp.showScopeSelector = false; fixture.detectChanges(); - const select = de.query(By.css('select')); - expect(select).toBeNull(); - }); + tick(); + + expect(de.query(By.css('.scope-button'))).toBeFalsy(); + })); + + it('should display scopes when showScopeSelector is true', fakeAsync(() => { + comp.showScopeSelector = true; + + fixture.detectChanges(); + tick(); + + expect(de.query(By.css('.scope-button'))).toBeTruthy(); + })); it('should display set query value in input field', fakeAsync(() => { const testString = 'This is a test query'; From 906c26bbe4d816a9e34a77a238c8ef8fee524b0d Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 09:51:33 +0100 Subject: [PATCH 192/833] Revert "Made ListableObjectComponentLoaderComponent themeable" This reverts commit a4679ca7 --- ...-search-result-list-element.component.html | 4 +- ...admin-workflow-list-element.component.html | 4 +- .../item-delete/item-delete.component.html | 8 ++-- .../edit-relationship.component.html | 4 +- .../virtual-metadata.component.html | 4 +- .../item-page/simple/item-page.component.html | 2 +- .../related-items.component.html | 4 +- .../related-items.component.spec.ts | 2 +- .../shared/browse-by/browse-by.component.html | 2 +- .../dso-selector/dso-selector.component.html | 4 +- ...sting-relation-list-element.component.html | 2 +- .../dso-input-suggestions.component.html | 2 +- ...table-object-component-loader.component.ts | 42 ------------------- .../object-detail.component.html | 2 +- .../object-grid/object-grid.component.html | 2 +- .../item-metadata-list-element.component.html | 2 +- ...em-metadata-list-element.component.spec.ts | 2 +- .../object-list/object-list.component.html | 4 +- src/app/shared/shared.module.ts | 2 - ...ble-object-component-loader.component.html | 0 ...ble-object-component-loader.component.scss | 0 ...table-object-component-loader.component.ts | 13 ------ src/themes/custom/theme.module.ts | 2 - 23 files changed, 27 insertions(+), 86 deletions(-) delete mode 100644 src/app/shared/object-collection/shared/listable-object/themed-listable-object-component-loader.component.ts delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss delete mode 100644 src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html index 3bf756b9cd..991508335f 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component.html @@ -1,6 +1,6 @@ - + [listID]="listID"> diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html index 909882361a..192cc751f2 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html @@ -1,10 +1,10 @@
    {{ "admin.workflow.item.workflow" | translate }}
    - + [listID]="listID"> diff --git a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html index fb8acb61f3..df50e13b48 100644 --- a/src/app/item-page/edit-item-page/item-delete/item-delete.component.html +++ b/src/app/item-page/edit-item-page/item-delete/item-delete.component.html @@ -31,11 +31,11 @@ class="d-flex flex-row"> - - +
  • diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 20b6981f88..bc20d02f02 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -173,7 +173,6 @@ import { BitstreamRequestACopyPageComponent } from './bitstream-request-a-copy-p import { DsSelectComponent } from './ds-select/ds-select.component'; import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'; import { ThemedItemListPreviewComponent } from './object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component'; -import { ThemedListableObjectComponentLoaderComponent } from './object-collection/shared/listable-object/themed-listable-object-component-loader.component'; import { StatusBadgeComponent } from './object-list/badges/status-badge/status-badge.component'; import { BadgesComponent } from './object-list/badges/badges.component'; import { ThemedBadgesComponent } from './object-list/badges/themed-badges.component'; @@ -292,7 +291,6 @@ const COMPONENTS = [ CommunitySearchResultGridElementComponent, PageSizeSelectorComponent, ListableObjectComponentLoaderComponent, - ThemedListableObjectComponentLoaderComponent, CollectionListElementComponent, CommunityListElementComponent, CollectionGridElementComponent, diff --git a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts deleted file mode 100644 index 49d79a7cbd..0000000000 --- a/src/themes/custom/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Component } from '@angular/core'; -import { ListableObjectComponentLoaderComponent as BaseComponent } from 'src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component'; - -@Component({ - selector: 'ds-listable-object-component-loader', - // styleUrls: ['./listable-object-component-loader.component.scss'], - styleUrls: ['../../../../../../../app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.scss'], - // templateUrl: './listable-object-component-loader.component.html' - templateUrl: '../../../../../../../app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.html' -}) - -export class ListableObjectComponentLoaderComponent extends BaseComponent { -} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 9da48db722..4c4829e132 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -86,7 +86,6 @@ import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component'; import { SearchSidebarComponent } from './app/shared/search/search-sidebar/search-sidebar.component'; -import { ListableObjectComponentLoaderComponent } from './app/shared/object-collection/shared/listable-object/listable-object-component-loader.component'; import { BadgesComponent } from './app/shared/object-list/badges/badges.component'; import { StatusBadgeComponent } from './app/shared/object-list/badges/status-badge/status-badge.component'; import { TypeBadgeComponent } from './app/shared/object-list/badges/type-badge/type-badge.component'; @@ -135,7 +134,6 @@ const DECLARATIONS = [ FeedbackComponent, SearchFiltersComponent, SearchSidebarComponent, - ListableObjectComponentLoaderComponent, BadgesComponent, StatusBadgeComponent, TypeBadgeComponent, From 715d3ae014a74f510be41a7eaedae1b9e986382f Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Tue, 24 Jan 2023 11:24:13 +0100 Subject: [PATCH 193/833] Fix issues with module changes --- .../alert-form/system-wide-alert-form.component.spec.ts | 4 ++-- src/app/system-wide-alert/system-wide-alert.module.ts | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts index 608170a094..4fc79c1caa 100644 --- a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts +++ b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts @@ -12,8 +12,8 @@ import { RouterStub } from '../../shared/testing/router.stub'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { Router } from '@angular/router'; import { FormsModule } from '@angular/forms'; -import { SharedModule } from '../../shared/shared.module'; import { UiSwitchModule } from 'ngx-ui-switch'; +import { SystemWideAlertModule } from '../system-wide-alert.module'; describe('SystemWideAlertFormComponent', () => { let comp: SystemWideAlertFormComponent; @@ -52,7 +52,7 @@ describe('SystemWideAlertFormComponent', () => { router = new RouterStub(); TestBed.configureTestingModule({ - imports: [FormsModule, SharedModule, UiSwitchModule, TranslateModule.forRoot()], + imports: [FormsModule, SystemWideAlertModule, UiSwitchModule, TranslateModule.forRoot()], declarations: [SystemWideAlertFormComponent], providers: [ {provide: SystemWideAlertDataService, useValue: systemWideAlertDataService}, diff --git a/src/app/system-wide-alert/system-wide-alert.module.ts b/src/app/system-wide-alert/system-wide-alert.module.ts index ce2a87f982..ca200fa4f1 100644 --- a/src/app/system-wide-alert/system-wide-alert.module.ts +++ b/src/app/system-wide-alert/system-wide-alert.module.ts @@ -6,6 +6,7 @@ import { SharedModule } from '../shared/shared.module'; import { SystemWideAlertDataService } from '../core/data/system-wide-alert-data.service'; import { SystemWideAlertRoutingModule } from './system-wide-alert-routing.module'; import { UiSwitchModule } from 'ngx-ui-switch'; +import { NgbDatepickerModule, NgbTimepickerModule } from '@ng-bootstrap/ng-bootstrap'; @NgModule({ imports: [ @@ -13,6 +14,8 @@ import { UiSwitchModule } from 'ngx-ui-switch'; SharedModule, UiSwitchModule, SystemWideAlertRoutingModule, + NgbTimepickerModule, + NgbDatepickerModule, ], exports: [ SystemWideAlertBannerComponent From a475fa10bee74628f5431d31d0ec52cdc86732d9 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 13:28:02 +0100 Subject: [PATCH 194/833] Fixed more tests and imports --- ...arch-result-grid-element.component.spec.ts | 5 +++- ...top-level-community-list.component.spec.ts | 6 ++-- .../browse-by/browse-by.component.spec.ts | 1 + .../shared/badges/badges.component.html | 5 ++++ .../shared}/badges/badges.component.scss | 0 .../shared}/badges/badges.component.spec.ts | 7 ++++- .../shared}/badges/badges.component.ts | 4 ++- .../my-dspace-item-status-type.ts | 0 .../my-dspace-status-badge.component.html} | 0 .../my-dspace-status-badge.component.scss} | 0 .../my-dspace-status-badge.component.spec.ts} | 22 +++++++------- .../my-dspace-status-badge.component.ts} | 8 ++--- ...themed-my-dspace-status-badge.component.ts | 30 +++++++++++++++++++ .../status-badge/status-badge.component.html | 0 .../status-badge.component.spec.ts | 6 ++-- .../status-badge/status-badge.component.ts | 4 +-- .../themed-status-badge.component.ts | 9 +++--- .../shared}/badges/themed-badges.component.ts | 14 ++++----- .../type-badge/themed-type-badge.component.ts | 9 +++--- .../type-badge/type-badge.component.html | 0 .../type-badge/type-badge.component.spec.ts | 4 +-- .../badges/type-badge/type-badge.component.ts | 6 ++-- ...ch-result-detail-element.component.spec.ts | 2 +- ...-search-result-detail-element.component.ts | 2 +- .../item-detail-preview.component.html | 4 +-- .../item-detail-preview.component.ts | 2 +- ...ch-result-detail-element.component.spec.ts | 2 +- ...-search-result-detail-element.component.ts | 2 +- ...ch-result-detail-element.component.spec.ts | 2 +- ...-search-result-detail-element.component.ts | 2 +- ...ch-result-detail-element.component.spec.ts | 2 +- ...-search-result-detail-element.component.ts | 2 +- ...ch-result-detail-element.component.spec.ts | 2 +- ...-search-result-detail-element.component.ts | 2 +- .../object-list/badges/badges.component.html | 2 -- ...arch-result-list-element.component.spec.ts | 2 +- ...ed-search-result-list-element.component.ts | 2 +- ...arch-result-list-element.component.spec.ts | 2 +- ...ed-search-result-list-element.component.ts | 2 +- ...arch-result-list-element.component.spec.ts | 2 +- ...ed-search-result-list-element.component.ts | 2 +- .../item-list-preview.component.html | 5 +--- .../item-list-preview.component.ts | 2 +- .../themed-item-list-preview.component.ts | 2 +- ...-list-element-submission.component.spec.ts | 2 +- ...esult-list-element-submission.component.ts | 2 +- ...arch-result-list-element.component.spec.ts | 2 +- ...ol-search-result-list-element.component.ts | 2 +- ...arch-result-list-element.component.spec.ts | 2 +- ...em-search-result-list-element.component.ts | 2 +- ...arch-result-list-element.component.spec.ts | 2 +- ...em-search-result-list-element.component.ts | 2 +- src/app/shared/shared.module.ts | 18 ++++++----- .../shared}/badges/badges.component.html | 0 .../shared}/badges/badges.component.scss | 0 .../shared}/badges/badges.component.ts | 4 +-- .../my-dspace-status-badge.component.html} | 0 .../my-dspace-status-badge.component.scss} | 0 .../my-dspace-status-badge.component.ts | 12 ++++++++ .../status-badge/status-badge.component.html} | 0 .../status-badge/status-badge.component.scss} | 0 .../status-badge/status-badge.component.ts | 4 +-- .../type-badge/type-badge.component.html | 0 .../type-badge/type-badge.component.scss | 0 .../badges/type-badge/type-badge.component.ts | 4 +-- src/themes/custom/theme.module.ts | 8 +++-- 66 files changed, 152 insertions(+), 103 deletions(-) create mode 100644 src/app/shared/object-collection/shared/badges/badges.component.html rename src/app/shared/{object-list => object-collection/shared}/badges/badges.component.scss (100%) rename src/app/shared/{object-list => object-collection/shared}/badges/badges.component.spec.ts (63%) rename src/app/shared/{object-list => object-collection/shared}/badges/badges.component.ts (52%) rename src/app/shared/object-collection/shared/{mydspace-item-status => badges/my-dspace-status-badge}/my-dspace-item-status-type.ts (100%) rename src/app/shared/object-collection/shared/{mydspace-item-status/my-dspace-item-status.component.html => badges/my-dspace-status-badge/my-dspace-status-badge.component.html} (100%) rename src/app/shared/object-collection/shared/{mydspace-item-status/my-dspace-item-status.component.scss => badges/my-dspace-status-badge/my-dspace-status-badge.component.scss} (100%) rename src/app/shared/object-collection/shared/{mydspace-item-status/my-dspace-item-status.component.spec.ts => badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts} (79%) rename src/app/shared/object-collection/shared/{mydspace-item-status/my-dspace-item-status.component.ts => badges/my-dspace-status-badge/my-dspace-status-badge.component.ts} (84%) create mode 100644 src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts rename src/app/shared/{object-list => object-collection/shared}/badges/status-badge/status-badge.component.html (100%) rename src/app/shared/{object-list => object-collection/shared}/badges/status-badge/status-badge.component.spec.ts (92%) rename src/app/shared/{object-list => object-collection/shared}/badges/status-badge/status-badge.component.ts (89%) rename src/app/shared/{object-list => object-collection/shared}/badges/status-badge/themed-status-badge.component.ts (62%) rename src/app/shared/{object-list => object-collection/shared}/badges/themed-badges.component.ts (55%) rename src/app/shared/{object-list => object-collection/shared}/badges/type-badge/themed-type-badge.component.ts (63%) rename src/app/shared/{object-list => object-collection/shared}/badges/type-badge/type-badge.component.html (100%) rename src/app/shared/{object-list => object-collection/shared}/badges/type-badge/type-badge.component.spec.ts (94%) rename src/app/shared/{object-list => object-collection/shared}/badges/type-badge/type-badge.component.ts (83%) delete mode 100644 src/app/shared/object-list/badges/badges.component.html rename src/themes/custom/app/shared/{object-list => object-collection/shared}/badges/badges.component.html (100%) rename src/themes/custom/app/shared/{object-list => object-collection/shared}/badges/badges.component.scss (100%) rename src/themes/custom/app/shared/{object-list => object-collection/shared}/badges/badges.component.ts (65%) rename src/themes/custom/app/shared/{object-list/badges/status-badge/status-badge.component.html => object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html} (100%) rename src/themes/custom/app/shared/{object-list/badges/status-badge/status-badge.component.scss => object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.scss} (100%) create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts rename src/themes/custom/app/shared/{object-list/badges/type-badge/type-badge.component.html => object-collection/shared/badges/status-badge/status-badge.component.html} (100%) rename src/themes/custom/app/shared/{object-list/badges/type-badge/type-badge.component.scss => object-collection/shared/badges/status-badge/status-badge.component.scss} (100%) rename src/themes/custom/app/shared/{object-list => object-collection/shared}/badges/status-badge/status-badge.component.ts (61%) create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.scss rename src/themes/custom/app/shared/{object-list => object-collection/shared}/badges/type-badge/type-badge.component.ts (61%) diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component.spec.ts b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component.spec.ts index 17ce2cd7a1..cdb91d3b13 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component.spec.ts @@ -16,6 +16,8 @@ import { CommunitySearchResult } from '../../../../../shared/object-collection/s import { Community } from '../../../../../core/shared/community.model'; import { getCommunityEditRoute } from '../../../../../community-page/community-page-routing-paths'; import { LinkService } from '../../../../../core/cache/builders/link.service'; +import { ThemeService } from '../../../../../shared/theme-support/theme.service'; +import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; describe('CommunityAdminSearchResultGridElementComponent', () => { let component: CommunityAdminSearchResultGridElementComponent; @@ -47,7 +49,8 @@ describe('CommunityAdminSearchResultGridElementComponent', () => { providers: [ { provide: TruncatableService, useValue: mockTruncatableService }, { provide: BitstreamDataService, useValue: {} }, - { provide: LinkService, useValue: linkService } + { provide: LinkService, useValue: linkService }, + { provide: ThemeService, useValue: getMockThemeService() } ], schemas: [NO_ERRORS_SCHEMA] }) diff --git a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts index c9e8f37ee9..e111c858bf 100644 --- a/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts +++ b/src/app/home-page/top-level-community-list/top-level-community-list.component.spec.ts @@ -18,15 +18,12 @@ import { HostWindowService } from '../../shared/host-window.service'; import { HostWindowServiceStub } from '../../shared/testing/host-window-service.stub'; import { CommunityDataService } from '../../core/data/community-data.service'; import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; -import { of as observableOf } from 'rxjs'; -import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; -import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; import { PaginationService } from '../../core/pagination/pagination.service'; import { getMockThemeService } from '../../shared/mocks/theme-service.mock'; import { ThemeService } from '../../shared/theme-support/theme.service'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; -fdescribe('TopLevelCommunityList Component', () => { +describe('TopLevelCommunityList Component', () => { let comp: TopLevelCommunityListComponent; let fixture: ComponentFixture; let communityDataServiceStub: any; @@ -131,6 +128,7 @@ fdescribe('TopLevelCommunityList Component', () => { { provide: SelectableListService, useValue: {} }, { provide: ThemeService, useValue: themeService }, ], + schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); })); diff --git a/src/app/shared/browse-by/browse-by.component.spec.ts b/src/app/shared/browse-by/browse-by.component.spec.ts index 896537b63a..3f26b0ad9c 100644 --- a/src/app/shared/browse-by/browse-by.component.spec.ts +++ b/src/app/shared/browse-by/browse-by.component.spec.ts @@ -79,6 +79,7 @@ describe('BrowseByComponent', () => { themeService = jasmine.createSpyObj('themeService', { getThemeName: 'dspace', getThemeName$: observableOf('dspace'), + getThemeConfigFor: undefined, }); TestBed.configureTestingModule({ imports: [ diff --git a/src/app/shared/object-collection/shared/badges/badges.component.html b/src/app/shared/object-collection/shared/badges/badges.component.html new file mode 100644 index 0000000000..b10c723fca --- /dev/null +++ b/src/app/shared/object-collection/shared/badges/badges.component.html @@ -0,0 +1,5 @@ + + + + + diff --git a/src/app/shared/object-list/badges/badges.component.scss b/src/app/shared/object-collection/shared/badges/badges.component.scss similarity index 100% rename from src/app/shared/object-list/badges/badges.component.scss rename to src/app/shared/object-collection/shared/badges/badges.component.scss diff --git a/src/app/shared/object-list/badges/badges.component.spec.ts b/src/app/shared/object-collection/shared/badges/badges.component.spec.ts similarity index 63% rename from src/app/shared/object-list/badges/badges.component.spec.ts rename to src/app/shared/object-collection/shared/badges/badges.component.spec.ts index 1ca24639f8..9e0c277a08 100644 --- a/src/app/shared/object-list/badges/badges.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/badges.component.spec.ts @@ -1,6 +1,9 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BadgesComponent } from './badges.component'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { ThemeService } from '../../../theme-support/theme.service'; +import { getMockThemeService } from '../../../mocks/theme-service.mock'; describe('BadgesComponent', () => { let component: BadgesComponent; @@ -8,7 +11,9 @@ describe('BadgesComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BadgesComponent ] + declarations: [ BadgesComponent ], + providers: [{provide: ThemeService, useValue: getMockThemeService()}], + schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); }); diff --git a/src/app/shared/object-list/badges/badges.component.ts b/src/app/shared/object-collection/shared/badges/badges.component.ts similarity index 52% rename from src/app/shared/object-list/badges/badges.component.ts rename to src/app/shared/object-collection/shared/badges/badges.component.ts index 31baba1d2c..1d7df0002e 100644 --- a/src/app/shared/object-list/badges/badges.component.ts +++ b/src/app/shared/object-collection/shared/badges/badges.component.ts @@ -1,5 +1,6 @@ import { Component, Input } from '@angular/core'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { MyDspaceItemStatusType } from './my-dspace-status-badge/my-dspace-item-status-type'; @Component({ selector: 'ds-badges', @@ -8,4 +9,5 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model'; }) export class BadgesComponent { @Input() object: DSpaceObject; + @Input() myDSpaceStatus?: MyDspaceItemStatusType; } diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status-type.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type.ts similarity index 100% rename from src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status-type.ts rename to src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type.ts diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.html b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html similarity index 100% rename from src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.html rename to src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.scss b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.scss similarity index 100% rename from src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.scss rename to src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.scss diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.spec.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts similarity index 79% rename from src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.spec.ts rename to src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts index 44e6a44b70..788774c9bb 100644 --- a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts @@ -4,17 +4,17 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; -import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; -import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; -import { EPersonMock } from '../../../testing/eperson.mock'; -import { MyDSpaceItemStatusComponent } from './my-dspace-item-status.component'; +import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; +import { PoolTask } from '../../../../../core/tasks/models/pool-task-object.model'; +import { EPersonMock } from '../../../../testing/eperson.mock'; +import { MyDSpaceStatusBadgeComponent } from './my-dspace-status-badge.component'; import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; -import { TranslateLoaderMock } from '../../../mocks/translate-loader.mock'; +import { TranslateLoaderMock } from '../../../../mocks/translate-loader.mock'; import { By } from '@angular/platform-browser'; -import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; +import { createSuccessfulRemoteDataObject } from '../../../../remote-data.utils'; -let component: MyDSpaceItemStatusComponent; -let fixture: ComponentFixture; +let component: MyDSpaceStatusBadgeComponent; +let fixture: ComponentFixture; let mockResultObject: PoolTask; @@ -34,15 +34,15 @@ describe('MyDSpaceItemStatusComponent', () => { } }) ], - declarations: [MyDSpaceItemStatusComponent], + declarations: [MyDSpaceStatusBadgeComponent], schemas: [NO_ERRORS_SCHEMA] - }).overrideComponent(MyDSpaceItemStatusComponent, { + }).overrideComponent(MyDSpaceStatusBadgeComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } }).compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(MyDSpaceItemStatusComponent); + fixture = TestBed.createComponent(MyDSpaceStatusBadgeComponent); component = fixture.componentInstance; }); diff --git a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts similarity index 84% rename from src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.ts rename to src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts index 917dd45acc..6a1678a45a 100644 --- a/src/app/shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component.ts +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts @@ -5,11 +5,11 @@ import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; * This component represents a badge with mydspace item status */ @Component({ - selector: 'ds-mydspace-item-status', - styleUrls: ['./my-dspace-item-status.component.scss'], - templateUrl: './my-dspace-item-status.component.html' + selector: 'ds-my-dspace-status-badge', + styleUrls: ['./my-dspace-status-badge.component.scss'], + templateUrl: './my-dspace-status-badge.component.html' }) -export class MyDSpaceItemStatusComponent implements OnInit { +export class MyDSpaceStatusBadgeComponent implements OnInit { /** * This mydspace item status diff --git a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts new file mode 100644 index 0000000000..9f7bb16853 --- /dev/null +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts @@ -0,0 +1,30 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../../theme-support/themed.component'; +import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; +import { MyDSpaceStatusBadgeComponent } from './my-dspace-status-badge.component'; + +/** + * Themed wrapper for MyDSpaceStatusBadge + */ +@Component({ + selector: 'ds-themed-my-dspace-status-badge', + styleUrls: [], + templateUrl: '../../../../theme-support/themed.component.html', +}) +export class ThemedMyDSpaceStatusBadgeComponent extends ThemedComponent { + @Input() status: MyDspaceItemStatusType; + + protected inAndOutputNames: (keyof MyDSpaceStatusBadgeComponent & keyof this)[] = ['status']; + + protected getComponentName(): string { + return 'MyDSpaceStatusBadgeComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../../themes/${themeName}/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./my-dspace-status-badge.component`); + } +} diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.html similarity index 100% rename from src/app/shared/object-list/badges/status-badge/status-badge.component.html rename to src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.html diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts b/src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.spec.ts similarity index 92% rename from src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts rename to src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.spec.ts index 4cfa0e2341..f3115073c3 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.spec.ts @@ -1,12 +1,10 @@ -import { Item } from '../../../../core/shared/item.model'; -import { of as observableOf } from 'rxjs'; +import { Item } from '../../../../../core/shared/item.model'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { TruncatePipe } from '../../../utils/truncate.pipe'; +import { TruncatePipe } from '../../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { StatusBadgeComponent } from './status-badge.component'; -import { ViewMode } from '../../../../core/shared/view-mode.model'; let comp: StatusBadgeComponent; let fixture: ComponentFixture; diff --git a/src/app/shared/object-list/badges/status-badge/status-badge.component.ts b/src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.ts similarity index 89% rename from src/app/shared/object-list/badges/status-badge/status-badge.component.ts rename to src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.ts index 7f52741c51..a52f3f6f32 100644 --- a/src/app/shared/object-list/badges/status-badge/status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/status-badge/status-badge.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; -import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { hasValue } from '../../../empty.util'; +import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; +import { hasValue } from '../../../../empty.util'; @Component({ selector: 'ds-status-badge', diff --git a/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/status-badge/themed-status-badge.component.ts similarity index 62% rename from src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts rename to src/app/shared/object-collection/shared/badges/status-badge/themed-status-badge.component.ts index d855fda555..f50d029fff 100644 --- a/src/app/shared/object-list/badges/status-badge/themed-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/status-badge/themed-status-badge.component.ts @@ -1,8 +1,7 @@ import { Component, Input } from '@angular/core'; -import { ThemedComponent } from '../../../theme-support/themed.component'; +import { ThemedComponent } from '../../../../theme-support/themed.component'; import { StatusBadgeComponent } from './status-badge.component'; -import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { TypeBadgeComponent } from '../type-badge/type-badge.component'; +import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; /** * Themed wrapper for StatusBadgeComponent @@ -10,7 +9,7 @@ import { TypeBadgeComponent } from '../type-badge/type-badge.component'; @Component({ selector: 'ds-themed-status-badge', styleUrls: [], - templateUrl: '../../../../shared/theme-support/themed.component.html', + templateUrl: '../../../../theme-support/themed.component.html', }) export class ThemedStatusBadgeComponent extends ThemedComponent { @Input() object: DSpaceObject; @@ -22,7 +21,7 @@ export class ThemedStatusBadgeComponent extends ThemedComponent { - return import(`../../../../../themes/${themeName}/app/shared/object-list/badges/status-badge/status-badge.component`); + return import(`../../../../../../themes/${themeName}/app/shared/object-collection/shared/badges/status-badge/status-badge.component`); } protected importUnthemedComponent(): Promise { diff --git a/src/app/shared/object-list/badges/themed-badges.component.ts b/src/app/shared/object-collection/shared/badges/themed-badges.component.ts similarity index 55% rename from src/app/shared/object-list/badges/themed-badges.component.ts rename to src/app/shared/object-collection/shared/badges/themed-badges.component.ts index 8682e33e2e..05f519e09d 100644 --- a/src/app/shared/object-list/badges/themed-badges.component.ts +++ b/src/app/shared/object-collection/shared/badges/themed-badges.component.ts @@ -1,9 +1,8 @@ import { Component, Input } from '@angular/core'; import { BadgesComponent } from './badges.component'; -import { ThemedComponent } from '../../theme-support/themed.component'; -import { Observable } from 'rxjs/internal/Observable'; -import { SearchFiltersComponent } from '../../search/search-filters/search-filters.component'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { ThemedComponent } from '../../../theme-support/themed.component'; +import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +import { MyDspaceItemStatusType } from './my-dspace-status-badge/my-dspace-item-status-type'; /** * Themed wrapper for BadgesComponent @@ -11,19 +10,20 @@ import { DSpaceObject } from '../../../core/shared/dspace-object.model'; @Component({ selector: 'ds-themed-badges', styleUrls: [], - templateUrl: '../../../shared/theme-support/themed.component.html', + templateUrl: '../../../theme-support/themed.component.html', }) export class ThemedBadgesComponent extends ThemedComponent { @Input() object: DSpaceObject; + @Input() myDSpaceStatus: MyDspaceItemStatusType; - protected inAndOutputNames: (keyof BadgesComponent & keyof this)[] = ['object']; + protected inAndOutputNames: (keyof BadgesComponent & keyof this)[] = ['object', 'myDSpaceStatus']; protected getComponentName(): string { return 'BadgesComponent'; } protected importThemedComponent(themeName: string): Promise { - return import(`../../../../themes/${themeName}/app/shared/object-list/badges/badges.component`); + return import(`../../../../../themes/${themeName}/app/shared/object-collection/shared/badges/badges.component`); } protected importUnthemedComponent(): Promise { diff --git a/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts b/src/app/shared/object-collection/shared/badges/type-badge/themed-type-badge.component.ts similarity index 63% rename from src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts rename to src/app/shared/object-collection/shared/badges/type-badge/themed-type-badge.component.ts index 58e56dbe88..a8dd0ee04c 100644 --- a/src/app/shared/object-list/badges/type-badge/themed-type-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/type-badge/themed-type-badge.component.ts @@ -1,8 +1,7 @@ import { Component, Input } from '@angular/core'; -import { ThemedComponent } from '../../../theme-support/themed.component'; +import { ThemedComponent } from '../../../../theme-support/themed.component'; import { TypeBadgeComponent } from './type-badge.component'; -import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { BadgesComponent } from '../badges.component'; +import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; /** * Themed wrapper for TypeBadgeComponent @@ -10,7 +9,7 @@ import { BadgesComponent } from '../badges.component'; @Component({ selector: 'ds-themed-type-badge', styleUrls: [], - templateUrl: '../../../../shared/theme-support/themed.component.html', + templateUrl: '../../../../theme-support/themed.component.html', }) export class ThemedTypeBadgeComponent extends ThemedComponent { @Input() object: DSpaceObject; @@ -22,7 +21,7 @@ export class ThemedTypeBadgeComponent extends ThemedComponent { - return import(`../../../../../themes/${themeName}/app/shared/object-list/badges/type-badge/type-badge.component`); + return import(`../../../../../../themes/${themeName}/app/shared/object-collection/shared/badges/type-badge/type-badge.component`); } protected importUnthemedComponent(): Promise { diff --git a/src/app/shared/object-list/badges/type-badge/type-badge.component.html b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html similarity index 100% rename from src/app/shared/object-list/badges/type-badge/type-badge.component.html rename to src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html diff --git a/src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.spec.ts similarity index 94% rename from src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts rename to src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.spec.ts index 21c12ec372..87adc3761a 100644 --- a/src/app/shared/object-list/badges/type-badge/type-badge.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.spec.ts @@ -1,8 +1,8 @@ -import { Item } from '../../../../core/shared/item.model'; +import { Item } from '../../../../../core/shared/item.model'; import { of as observableOf } from 'rxjs'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { TruncatePipe } from '../../../utils/truncate.pipe'; +import { TruncatePipe } from '../../../../utils/truncate.pipe'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { TypeBadgeComponent } from './type-badge.component'; diff --git a/src/app/shared/object-list/badges/type-badge/type-badge.component.ts b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.ts similarity index 83% rename from src/app/shared/object-list/badges/type-badge/type-badge.component.ts rename to src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.ts index 2fba2515a9..ea912063b6 100644 --- a/src/app/shared/object-list/badges/type-badge/type-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core'; -import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { hasValue, isEmpty } from '../../../empty.util'; -import { getResourceTypeValueFor } from '../../../../core/cache/object-cache.reducer'; +import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; +import { hasValue, isEmpty } from '../../../../empty.util'; +import { getResourceTypeValueFor } from '../../../../../core/cache/object-cache.reducer'; @Component({ selector: 'ds-type-badge', diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts index a6a3e2020b..9cf282da1c 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.spec.ts @@ -7,7 +7,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { ClaimedTaskSearchResultDetailElementComponent } from './claimed-task-search-result-detail-element.component'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts index 74411d2341..a380133bc9 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts @@ -7,7 +7,7 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; import { followLink } from '../../../utils/follow-link-config.model'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html index 61e2955deb..46e1a06ada 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html @@ -1,7 +1,5 @@
    - - - +

    diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts index 778e455004..e7c316579c 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts @@ -6,7 +6,7 @@ import { BitstreamDataService } from '../../../../core/data/bitstream-data.servi import { Item } from '../../../../core/shared/item.model'; import { getFirstSucceededRemoteListPayload } from '../../../../core/shared/operators'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { fadeInOut } from '../../../animations/fade'; import { Bitstream } from '../../../../core/shared/bitstream.model'; import { FileService } from '../../../../core/shared/file.service'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts index 8d602d5eb2..0e9fe29cd7 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts @@ -6,7 +6,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { ItemSearchResultDetailElementComponent } from './item-search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; let component: ItemSearchResultDetailElementComponent; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts index 7e611ec3c8..8e52ebbd3e 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts @@ -3,7 +3,7 @@ import { Component } from '@angular/core'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { Item } from '../../../../core/shared/item.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts index 8e0458d49f..6e62d9087a 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.spec.ts @@ -6,7 +6,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { PoolSearchResultDetailElementComponent } from './pool-search-result-detail-element.component'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts index df27abd42e..dc48a8a27a 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { RemoteData } from '../../../../core/data/remote-data'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts index 536bd6d0bb..345860485a 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts @@ -7,7 +7,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItemSearchResultDetailElementComponent } from './workflow-item-search-result-detail-element.component'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts index 8dc510d2aa..614045dd7d 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts @@ -4,7 +4,7 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../core/data/remote-data'; import { find } from 'rxjs/operators'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts index 00a20b006a..0d5b18919f 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts @@ -7,7 +7,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { WorkspaceItemSearchResultDetailElementComponent } from './workspace-item-search-result-detail-element.component'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts index e4781fe0b2..c314678e89 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts @@ -8,7 +8,7 @@ import { Item } from '../../../../core/shared/item.model'; import { RemoteData } from '../../../../core/data/remote-data'; import { isNotUndefined } from '../../../empty.util'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspace-item-search-result.model'; diff --git a/src/app/shared/object-list/badges/badges.component.html b/src/app/shared/object-list/badges/badges.component.html deleted file mode 100644 index 1e59ca3660..0000000000 --- a/src/app/shared/object-list/badges/badges.component.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts index c2b106c76a..0d1505333e 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts @@ -12,7 +12,7 @@ import { getMockLinkService } from '../../../../mocks/link-service.mock'; import { VarDirective } from '../../../../utils/var.directive'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; import { LinkService } from '../../../../../core/cache/builders/link.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ClaimedApprovedTaskSearchResult } from '../../../../object-collection/shared/claimed-approved-task-search-result.model'; import { ClaimedApprovedSearchResultListElementComponent } from './claimed-approved-search-result-list-element.component'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts index eaf407d787..fbe718f2a5 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts @@ -4,7 +4,7 @@ import { ClaimedApprovedTaskSearchResult } from '../../../../object-collection/s import { listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator'; import { LinkService } from '../../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts index 15b5a5345d..df4703ef1d 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts @@ -14,7 +14,7 @@ import { getMockLinkService } from '../../../../mocks/link-service.mock'; import { VarDirective } from '../../../../utils/var.directive'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; import { LinkService } from '../../../../../core/cache/builders/link.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../mocks/dso-name.service.mock'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts index 0b9a925dbf..fa590c0891 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts @@ -5,7 +5,7 @@ import { ClaimedDeclinedTaskSearchResult } from '../../../../object-collection/s import { ViewMode } from '../../../../../core/shared/view-mode.model'; import { LinkService } from '../../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts index 7896061a73..77609e2111 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts @@ -7,7 +7,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { ClaimedSearchResultListElementComponent } from './claimed-search-result-list-element.component'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts index 2cf8f9a231..fd4f6938f6 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts @@ -5,7 +5,7 @@ import { listableObjectComponent } from '../../../object-collection/shared/lista import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html index 31f48475a6..4b7ee25533 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html @@ -1,8 +1,5 @@
    - - - - +

    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts index 840960d51f..455fd204ca 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts @@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core'; import { Item } from '../../../../core/shared/item.model'; import { fadeInOut } from '../../../animations/fade'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { SearchResult } from '../../../search/models/search-result.model'; /** diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts index 982a04207f..cb27b6bc12 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts @@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core'; import { ThemedComponent } from '../../../theme-support/themed.component'; import { ItemListPreviewComponent } from './item-list-preview.component'; import { Item } from '../../../../core/shared/item.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { SearchResult } from '../../../search/models/search-result.model'; /** diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts index d1871d0996..8fb3aaf48e 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts @@ -5,7 +5,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; import { ItemSearchResultListElementSubmissionComponent } from './item-search-result-list-element-submission.component'; import { TruncatableService } from '../../../truncatable/truncatable.service'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts index 3ef45d1c47..a6d435a98b 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Item } from '../../../../core/shared/item.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { Context } from '../../../../core/shared/context.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts index 18db9abd67..506c958fba 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts @@ -7,7 +7,7 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { PoolSearchResultListElementComponent } from './pool-search-result-list-element.component'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-search-result.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts index e9d64db572..e33cc60c16 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts @@ -6,7 +6,7 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { RemoteData } from '../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-search-result.model'; import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts index 61337b0cb3..31adb90cd1 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts @@ -10,7 +10,7 @@ import { ItemDataService } from '../../../../core/data/item-data.service'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { TruncatableService } from '../../../truncatable/truncatable.service'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts index 836a3ee268..8991ac2f0a 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts @@ -10,7 +10,7 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { isNotUndefined } from '../../../empty.util'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { TruncatableService } from '../../../truncatable/truncatable.service'; import { followLink } from '../../../utils/follow-link-config.model'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts index 87f5fd3733..e3402e4bff 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts @@ -10,7 +10,7 @@ import { ItemDataService } from '../../../../core/data/item-data.service'; import { Item } from '../../../../core/shared/item.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { TruncatableService } from '../../../truncatable/truncatable.service'; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts index 5edfc1929e..55d245dbf9 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts @@ -10,7 +10,7 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { isNotUndefined } from '../../../empty.util'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; +import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspace-item-search-result.model'; import { TruncatableService } from '../../../truncatable/truncatable.service'; import { followLink } from '../../../utils/follow-link-config.model'; diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index bc20d02f02..4d1ca19aa9 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -59,7 +59,7 @@ import { ClaimedTaskActionsComponent } from './mydspace-actions/claimed-task/cla import { PoolTaskActionsComponent } from './mydspace-actions/pool-task/pool-task-actions.component'; import { ObjectDetailComponent } from './object-detail/object-detail.component'; import { ItemDetailPreviewComponent } from './object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component'; -import { MyDSpaceItemStatusComponent } from './object-collection/shared/mydspace-item-status/my-dspace-item-status.component'; +import { MyDSpaceStatusBadgeComponent } from './object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component'; import { WorkspaceitemActionsComponent } from './mydspace-actions/workspaceitem/workspaceitem-actions.component'; import { WorkflowitemActionsComponent } from './mydspace-actions/workflowitem/workflowitem-actions.component'; import { ItemSubmitterComponent } from './object-collection/shared/mydspace-item-submitter/item-submitter.component'; @@ -111,7 +111,7 @@ import { CollectionSelectComponent } from './object-select/collection-select/col import { FilterInputSuggestionsComponent } from './input-suggestions/filter-suggestions/filter-input-suggestions.component'; import { DsoInputSuggestionsComponent } from './input-suggestions/dso-input-suggestions/dso-input-suggestions.component'; import { ItemGridElementComponent } from './object-grid/item-grid-element/item-types/item/item-grid-element.component'; -import { TypeBadgeComponent } from './object-list/badges/type-badge/type-badge.component'; +import { TypeBadgeComponent } from './object-collection/shared/badges/type-badge/type-badge.component'; import { MetadataRepresentationLoaderComponent } from './metadata-representation/metadata-representation-loader.component'; import { MetadataRepresentationDirective } from './metadata-representation/metadata-representation.directive'; import { ListableObjectComponentLoaderComponent } from './object-collection/shared/listable-object/listable-object-component-loader.component'; @@ -173,11 +173,12 @@ import { BitstreamRequestACopyPageComponent } from './bitstream-request-a-copy-p import { DsSelectComponent } from './ds-select/ds-select.component'; import { LogInOidcComponent } from './log-in/methods/oidc/log-in-oidc.component'; import { ThemedItemListPreviewComponent } from './object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component'; -import { StatusBadgeComponent } from './object-list/badges/status-badge/status-badge.component'; -import { BadgesComponent } from './object-list/badges/badges.component'; -import { ThemedBadgesComponent } from './object-list/badges/themed-badges.component'; -import { ThemedStatusBadgeComponent } from './object-list/badges/status-badge/themed-status-badge.component'; -import { ThemedTypeBadgeComponent } from './object-list/badges/type-badge/themed-type-badge.component'; +import { StatusBadgeComponent } from './object-collection/shared/badges/status-badge/status-badge.component'; +import { BadgesComponent } from './object-collection/shared/badges/badges.component'; +import { ThemedBadgesComponent } from './object-collection/shared/badges/themed-badges.component'; +import { ThemedStatusBadgeComponent } from './object-collection/shared/badges/status-badge/themed-status-badge.component'; +import { ThemedTypeBadgeComponent } from './object-collection/shared/badges/type-badge/themed-type-badge.component'; +import { ThemedMyDSpaceStatusBadgeComponent } from './object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component'; const MODULES = [ // Do NOT include UniversalModule, HttpModule, or JsonpModule here @@ -254,7 +255,8 @@ const COMPONENTS = [ FileDropzoneNoUploaderComponent, ItemListPreviewComponent, ThemedItemListPreviewComponent, - MyDSpaceItemStatusComponent, + MyDSpaceStatusBadgeComponent, + ThemedMyDSpaceStatusBadgeComponent, ItemSubmitterComponent, ItemDetailPreviewComponent, ItemDetailPreviewFieldComponent, diff --git a/src/themes/custom/app/shared/object-list/badges/badges.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.html similarity index 100% rename from src/themes/custom/app/shared/object-list/badges/badges.component.html rename to src/themes/custom/app/shared/object-collection/shared/badges/badges.component.html diff --git a/src/themes/custom/app/shared/object-list/badges/badges.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.scss similarity index 100% rename from src/themes/custom/app/shared/object-list/badges/badges.component.scss rename to src/themes/custom/app/shared/object-collection/shared/badges/badges.component.scss diff --git a/src/themes/custom/app/shared/object-list/badges/badges.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts similarity index 65% rename from src/themes/custom/app/shared/object-list/badges/badges.component.ts rename to src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts index e3946823f3..8cdbf32d36 100644 --- a/src/themes/custom/app/shared/object-list/badges/badges.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts @@ -1,11 +1,11 @@ import { Component } from '@angular/core'; -import { BadgesComponent as BaseComponent } from 'src/app/shared/object-list/badges/badges.component'; +import { BadgesComponent as BaseComponent } from 'src/app/shared/object-collection/shared/badges/badges.component'; @Component({ selector: 'ds-badges', // styleUrls: ['./badges.component.scss'], // templateUrl: './badges.component.html', - templateUrl: '../../../../../../app/shared/object-list/badges/badges.component.html', + templateUrl: '../../../../../../../app/shared/object-collection/shared/badges/badges.component.html', }) export class BadgesComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html similarity index 100% rename from src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.html rename to src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html diff --git a/src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.scss similarity index 100% rename from src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.scss rename to src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.scss diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts new file mode 100644 index 0000000000..eadd9a9ad4 --- /dev/null +++ b/src/themes/custom/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { MyDSpaceStatusBadgeComponent as BaseComponent } from 'src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component'; + +@Component({ + selector: 'ds-my-dspace-status-badge', + // styleUrls: ['./my-dspace-status-badge.component.scss'], + styleUrls: ['../../../../../../../../app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.scss'], + // templateUrl: './my-dspace-status-badge.component.html', + templateUrl: '../../../../../../../../app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html', +}) +export class MyDSpaceStatusBadgeComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.html similarity index 100% rename from src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.html rename to src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.html diff --git a/src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.scss similarity index 100% rename from src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.scss rename to src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.scss diff --git a/src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.ts similarity index 61% rename from src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.ts rename to src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.ts index 99c5f24b1a..8b0f6b27f5 100644 --- a/src/themes/custom/app/shared/object-list/badges/status-badge/status-badge.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/status-badge/status-badge.component.ts @@ -1,11 +1,11 @@ import { Component } from '@angular/core'; -import { StatusBadgeComponent as BaseComponent } from 'src/app/shared/object-list/badges/status-badge/status-badge.component'; +import { StatusBadgeComponent as BaseComponent } from 'src/app/shared/object-collection/shared/badges/status-badge/status-badge.component'; @Component({ selector: 'ds-status-badge', // styleUrls: ['./status-badge.component.scss'], // templateUrl: './status-badge.component.html', - templateUrl: '../../../../../../../app/shared/object-list/badges/status-badge/status-badge.component.html', + templateUrl: '../../../../../../../../app/shared/object-collection/shared/badges/status-badge/status-badge.component.html', }) export class StatusBadgeComponent extends BaseComponent { } diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.ts similarity index 61% rename from src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.ts rename to src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.ts index b304dfed92..11e50b4d08 100644 --- a/src/themes/custom/app/shared/object-list/badges/type-badge/type-badge.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/type-badge/type-badge.component.ts @@ -1,11 +1,11 @@ import { Component } from '@angular/core'; -import { TypeBadgeComponent as BaseComponent } from 'src/app/shared/object-list/badges/type-badge/type-badge.component'; +import { TypeBadgeComponent as BaseComponent } from 'src/app/shared/object-collection/shared/badges/type-badge/type-badge.component'; @Component({ selector: 'ds-type-badge', // styleUrls: ['./type-badge.component.scss'], // templateUrl: './type-badge.component.html', - templateUrl: '../../../../../../../app/shared/object-list/badges/type-badge/type-badge.component.html', + templateUrl: '../../../../../../../../app/shared/object-collection/shared/badges/type-badge/type-badge.component.html', }) export class TypeBadgeComponent extends BaseComponent { } diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 4c4829e132..96ed12c53e 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -86,9 +86,10 @@ import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { SearchFiltersComponent } from './app/shared/search/search-filters/search-filters.component'; import { SearchSidebarComponent } from './app/shared/search/search-sidebar/search-sidebar.component'; -import { BadgesComponent } from './app/shared/object-list/badges/badges.component'; -import { StatusBadgeComponent } from './app/shared/object-list/badges/status-badge/status-badge.component'; -import { TypeBadgeComponent } from './app/shared/object-list/badges/type-badge/type-badge.component'; +import { MyDSpaceStatusBadgeComponent } from './app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component'; +import { TypeBadgeComponent } from './app/shared/object-collection/shared/badges/type-badge/type-badge.component'; +import { StatusBadgeComponent } from './app/shared/object-collection/shared/badges/status-badge/status-badge.component'; +import { BadgesComponent } from './app/shared/object-collection/shared/badges/badges.component'; const DECLARATIONS = [ FileSectionComponent, @@ -137,6 +138,7 @@ const DECLARATIONS = [ BadgesComponent, StatusBadgeComponent, TypeBadgeComponent, + MyDSpaceStatusBadgeComponent, ]; @NgModule({ From 666ffda1df4a51350c9d5d71701acd216f08def7 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 13:48:04 +0100 Subject: [PATCH 195/833] Fixed merge issue --- ...arch-result-list-element.component.spec.ts | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts index 506c958fba..ed850e7070 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.spec.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; -import { waitForAsync, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, flush, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { of as observableOf } from 'rxjs'; @@ -18,6 +18,8 @@ import { getMockLinkService } from '../../../mocks/link-service.mock'; import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; +import { APP_CONFIG } from '../../../../../config/app-config.interface'; +import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; let component: PoolSearchResultListElementComponent; let fixture: ComponentFixture; @@ -54,11 +56,21 @@ const item = Object.assign(new Item(), { ] } }); + +const environmentUseThumbs = { + browseBy: { + showThumbnails: true + } +}; + const rdItem = createSuccessfulRemoteDataObject(item); const workflowitem = Object.assign(new WorkflowItem(), { item: observableOf(rdItem) }); const rdWorkflowitem = createSuccessfulRemoteDataObject(workflowitem); mockResultObject.indexableObject = Object.assign(new PoolTask(), { workflowitem: observableOf(rdWorkflowitem) }); const linkService = getMockLinkService(); +const objectCacheServiceMock = jasmine.createSpyObj('ObjectCacheService', { + remove: jasmine.createSpy('remove') +}); describe('PoolSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { @@ -68,7 +80,9 @@ describe('PoolSearchResultListElementComponent', () => { providers: [ { provide: TruncatableService, useValue: {} }, { provide: LinkService, useValue: linkService }, - { provide: DSONameService, useClass: DSONameServiceMock } + { provide: DSONameService, useClass: DSONameServiceMock }, + { provide: APP_CONFIG, useValue: environmentUseThumbs }, + { provide: ObjectCacheService, useValue: objectCacheServiceMock } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(PoolSearchResultListElementComponent, { @@ -86,17 +100,16 @@ describe('PoolSearchResultListElementComponent', () => { fixture.detectChanges(); }); - it('should init workflowitem properly', (done) => { - component.workflowitemRD$.subscribe((workflowitemRD) => { - expect(linkService.resolveLinks).toHaveBeenCalledWith( - component.dso, - jasmine.objectContaining({ name: 'workflowitem' }), - jasmine.objectContaining({ name: 'action' }) - ); - expect(workflowitemRD.payload).toEqual(workflowitem); - done(); - }); - }); + it('should init workflowitem properly', fakeAsync(() => { + flush(); + expect(linkService.resolveLinks).toHaveBeenCalledWith( + component.dso, + jasmine.objectContaining({ name: 'workflowitem' }), + jasmine.objectContaining({ name: 'action' }) + ); + expect(component.workflowitem$.value).toEqual(workflowitem); + expect(component.item$.value).toEqual(item); + })); it('should have properly status', () => { expect(component.status).toEqual(MyDspaceItemStatusType.WAITING_CONTROLLER); @@ -112,4 +125,9 @@ describe('PoolSearchResultListElementComponent', () => { expect(component.reloadedObject.emit).toHaveBeenCalledWith(actionPayload.reloadedObject); })); + + it('should add an offset to the actions element', () => { + const thumbnail = fixture.debugElement.query(By.css('.offset-3')); + expect(thumbnail).toBeTruthy(); + }); }); From 36b4d087792f5dcec718ef109a2ea8beb4a57a96 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 14:23:48 +0100 Subject: [PATCH 196/833] Put accidentally moved components back --- .../collection-list-element.component.html | 0 .../collection-list-element.component.scss | 0 .../collection-list-element/collection-list-element.component.ts | 0 .../community-list-element/community-list-element.component.html | 0 .../community-list-element/community-list-element.component.scss | 0 .../community-list-element/community-list-element.component.ts | 0 .../shared => object-list}/object-list.component.html | 0 .../shared => object-list}/object-list.component.scss | 0 .../shared => object-list}/object-list.component.ts | 0 9 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.html rename src/themes/custom/app/shared/{object-collection/shared => object-list}/collection-list-element/collection-list-element.component.scss (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/collection-list-element/collection-list-element.component.ts (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/community-list-element/community-list-element.component.html (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/community-list-element/community-list-element.component.scss (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/community-list-element/community-list-element.component.ts (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/object-list.component.html (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/object-list.component.scss (100%) rename src/themes/custom/app/shared/{object-collection/shared => object-list}/object-list.component.ts (100%) diff --git a/src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/themes/custom/app/shared/object-collection/shared/collection-list-element/collection-list-element.component.scss b/src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.scss similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/collection-list-element/collection-list-element.component.scss rename to src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.scss diff --git a/src/themes/custom/app/shared/object-collection/shared/collection-list-element/collection-list-element.component.ts b/src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.ts similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/collection-list-element/collection-list-element.component.ts rename to src/themes/custom/app/shared/object-list/collection-list-element/collection-list-element.component.ts diff --git a/src/themes/custom/app/shared/object-collection/shared/community-list-element/community-list-element.component.html b/src/themes/custom/app/shared/object-list/community-list-element/community-list-element.component.html similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/community-list-element/community-list-element.component.html rename to src/themes/custom/app/shared/object-list/community-list-element/community-list-element.component.html diff --git a/src/themes/custom/app/shared/object-collection/shared/community-list-element/community-list-element.component.scss b/src/themes/custom/app/shared/object-list/community-list-element/community-list-element.component.scss similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/community-list-element/community-list-element.component.scss rename to src/themes/custom/app/shared/object-list/community-list-element/community-list-element.component.scss diff --git a/src/themes/custom/app/shared/object-collection/shared/community-list-element/community-list-element.component.ts b/src/themes/custom/app/shared/object-list/community-list-element/community-list-element.component.ts similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/community-list-element/community-list-element.component.ts rename to src/themes/custom/app/shared/object-list/community-list-element/community-list-element.component.ts diff --git a/src/themes/custom/app/shared/object-collection/shared/object-list.component.html b/src/themes/custom/app/shared/object-list/object-list.component.html similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/object-list.component.html rename to src/themes/custom/app/shared/object-list/object-list.component.html diff --git a/src/themes/custom/app/shared/object-collection/shared/object-list.component.scss b/src/themes/custom/app/shared/object-list/object-list.component.scss similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/object-list.component.scss rename to src/themes/custom/app/shared/object-list/object-list.component.scss diff --git a/src/themes/custom/app/shared/object-collection/shared/object-list.component.ts b/src/themes/custom/app/shared/object-list/object-list.component.ts similarity index 100% rename from src/themes/custom/app/shared/object-collection/shared/object-list.component.ts rename to src/themes/custom/app/shared/object-list/object-list.component.ts From 018c74def411dc4acb41ecc69c1d0638eaa2e721 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 24 Jan 2023 15:28:57 +0100 Subject: [PATCH 197/833] 97742: Disable drag & bigger textarea on metadata edit --- .../dso-edit-metadata-value.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html index ce08eed473..aa3c242511 100644 --- a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html +++ b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html @@ -3,7 +3,7 @@ [ngClass]="{ 'ds-warning': mdValue.reordered || mdValue.change === DsoEditMetadataChangeTypeEnum.UPDATE, 'ds-danger': mdValue.change === DsoEditMetadataChangeTypeEnum.REMOVE, 'ds-success': mdValue.change === DsoEditMetadataChangeTypeEnum.ADD, 'h-100': isOnlyValue }"> From a8f5457a2fb4349e6b9f3e23a4fe5bc12e5bf831 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:40:12 +0000 Subject: [PATCH 198/833] Bump ua-parser-js from 0.7.32 to 0.7.33 Bumps [ua-parser-js](https://github.com/faisalman/ua-parser-js) from 0.7.32 to 0.7.33. - [Release notes](https://github.com/faisalman/ua-parser-js/releases) - [Changelog](https://github.com/faisalman/ua-parser-js/blob/master/changelog.md) - [Commits](https://github.com/faisalman/ua-parser-js/compare/0.7.32...0.7.33) --- updated-dependencies: - dependency-name: ua-parser-js dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 22eeefb309..bc11ee7e04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11036,9 +11036,9 @@ ua-parser-js@1.0.2: integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg== ua-parser-js@^0.7.30: - version "0.7.32" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211" - integrity sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw== + version "0.7.33" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" + integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" From 3a2f15d1ef4776453aa7a27fdc53f0566c18d7aa Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 24 Jan 2023 18:13:50 +0100 Subject: [PATCH 199/833] Fixed issues with badges and moved access status into ds-badges --- ...arch-result-grid-element.component.spec.ts | 2 +- src/app/core/core.module.ts | 2 +- .../core/data/access-status-data.service.ts | 4 +-- src/app/core/shared/context.model.ts | 7 +++++ src/app/core/shared/item.model.ts | 4 +-- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- .../access-status-badge.component.html | 4 +-- .../access-status-badge.component.spec.ts | 11 +++---- .../access-status-badge.component.ts | 19 +++++++----- .../access-status.model.ts | 0 .../access-status.resource-type.ts | 0 .../themed-access-status-badge.component.ts | 30 +++++++++++++++++++ .../shared/badges/badges.component.html | 11 +++++-- .../shared/badges/badges.component.ts | 18 +++++++++-- .../my-dspace-status-badge.component.html | 2 +- .../my-dspace-status-badge.component.spec.ts | 21 ++++++------- .../my-dspace-status-badge.component.ts | 20 ++++++------- ...themed-my-dspace-status-badge.component.ts | 6 ++-- .../shared/badges/themed-badges.component.ts | 7 +++-- .../type-badge/type-badge.component.html | 4 +-- ...earch-result-detail-element.component.html | 2 +- ...ch-result-detail-element.component.spec.ts | 15 +++++++--- ...-search-result-detail-element.component.ts | 6 ++-- .../item-detail-preview.component.html | 2 +- .../item-detail-preview.component.ts | 7 ++--- ...earch-result-detail-element.component.html | 2 +- ...ch-result-detail-element.component.spec.ts | 6 ++-- ...-search-result-detail-element.component.ts | 5 ++-- ...earch-result-detail-element.component.html | 2 +- ...ch-result-detail-element.component.spec.ts | 6 ++-- ...-search-result-detail-element.component.ts | 6 ++-- ...earch-result-detail-element.component.html | 2 +- ...ch-result-detail-element.component.spec.ts | 6 ++-- ...-search-result-detail-element.component.ts | 6 ++-- ...earch-result-detail-element.component.html | 2 +- ...ch-result-detail-element.component.spec.ts | 6 ++-- ...-search-result-detail-element.component.ts | 6 ++-- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 2 +- ...-search-result-grid-element.component.html | 3 +- ...-search-result-list-element.component.html | 2 +- ...arch-result-list-element.component.spec.ts | 6 ++-- ...ed-search-result-list-element.component.ts | 6 ++-- ...arch-result-list-element.component.spec.ts | 6 ++-- ...-search-result-list-element.component.html | 2 +- ...ed-search-result-list-element.component.ts | 6 ++-- ...-search-result-list-element.component.html | 2 +- ...arch-result-list-element.component.spec.ts | 15 +++++++--- ...ed-search-result-list-element.component.ts | 6 ++-- .../item-list-preview.component.html | 3 +- .../item-list-preview.component.ts | 6 ++-- .../themed-item-list-preview.component.ts | 6 ++-- ...ult-list-element-submission.component.html | 2 +- ...-list-element-submission.component.spec.ts | 8 ++--- ...esult-list-element-submission.component.ts | 6 ++-- ...-search-result-list-element.component.html | 2 +- ...arch-result-list-element.component.spec.ts | 15 +++++++--- ...ol-search-result-list-element.component.ts | 6 ++-- ...-search-result-list-element.component.html | 8 ++--- ...arch-result-list-element.component.spec.ts | 6 ++-- ...em-search-result-list-element.component.ts | 6 ++-- ...-search-result-list-element.component.html | 8 ++--- ...arch-result-list-element.component.spec.ts | 8 ++--- ...em-search-result-list-element.component.ts | 6 ++-- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 2 +- ...-search-result-list-element.component.html | 3 +- src/app/shared/shared.module.ts | 4 ++- src/assets/i18n/en.json5 | 10 +++---- .../access-status-badge.component.html | 0 .../access-status-badge.component.scss | 0 .../access-status-badge.component.ts | 11 +++++++ src/themes/custom/lazy-theme.module.ts | 2 ++ 84 files changed, 279 insertions(+), 192 deletions(-) rename src/app/shared/{object-list => object-collection/shared/badges}/access-status-badge/access-status-badge.component.html (67%) rename src/app/shared/{object-list => object-collection/shared/badges}/access-status-badge/access-status-badge.component.spec.ts (94%) rename src/app/shared/{object-list => object-collection/shared/badges}/access-status-badge/access-status-badge.component.ts (70%) rename src/app/shared/{object-list => object-collection/shared/badges}/access-status-badge/access-status.model.ts (100%) rename src/app/shared/{object-list => object-collection/shared/badges}/access-status-badge/access-status.resource-type.ts (100%) create mode 100644 src/app/shared/object-collection/shared/badges/access-status-badge/themed-access-status-badge.component.ts create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.html create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.scss create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts diff --git a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component.spec.ts b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component.spec.ts index e478aa3ef3..ee3de42131 100644 --- a/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component.spec.ts +++ b/src/app/admin/admin-search-page/admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component.spec.ts @@ -19,7 +19,7 @@ import { createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote- import { getMockThemeService } from '../../../../../shared/mocks/theme-service.mock'; import { ThemeService } from '../../../../../shared/theme-support/theme.service'; import { AccessStatusDataService } from '../../../../../core/data/access-status-data.service'; -import { AccessStatusObject } from '../../../../../shared/object-list/access-status-badge/access-status.model'; +import { AccessStatusObject } from '../../../../../shared/object-collection/shared/badges/access-status-badge/access-status.model'; import { AuthService } from '../../../../../core/auth/auth.service'; import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; import { FileService } from '../../../../../core/shared/file.service'; diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 3ba0b39a0e..a1d47d9b0c 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -167,7 +167,7 @@ import { SequenceService } from './shared/sequence.service'; import { CoreState } from './core-state.model'; import { GroupDataService } from './eperson/group-data.service'; import { SubmissionAccessesModel } from './config/models/config-submission-accesses.model'; -import { AccessStatusObject } from '../shared/object-list/access-status-badge/access-status.model'; +import { AccessStatusObject } from '../shared/object-collection/shared/badges/access-status-badge/access-status.model'; import { AccessStatusDataService } from './data/access-status-data.service'; import { LinkHeadService } from './services/link-head.service'; import { ResearcherProfileDataService } from './profile/researcher-profile-data.service'; diff --git a/src/app/core/data/access-status-data.service.ts b/src/app/core/data/access-status-data.service.ts index 2f641456fa..e8b77245e8 100644 --- a/src/app/core/data/access-status-data.service.ts +++ b/src/app/core/data/access-status-data.service.ts @@ -3,8 +3,8 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RequestService } from './request.service'; -import { AccessStatusObject } from 'src/app/shared/object-list/access-status-badge/access-status.model'; -import { ACCESS_STATUS } from 'src/app/shared/object-list/access-status-badge/access-status.resource-type'; +import { AccessStatusObject } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model'; +import { ACCESS_STATUS } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type'; import { Observable } from 'rxjs'; import { RemoteData } from './remote-data'; import { Item } from '../shared/item.model'; diff --git a/src/app/core/shared/context.model.ts b/src/app/core/shared/context.model.ts index 126896e3e1..8426d152c4 100644 --- a/src/app/core/shared/context.model.ts +++ b/src/app/core/shared/context.model.ts @@ -15,4 +15,11 @@ export enum Context { AdminWorkflowSearch = 'adminWorkflowSearch', SideBarSearchModal = 'sideBarSearchModal', SideBarSearchModalCurrent = 'sideBarSearchModalCurrent', + MyDSpaceArchived = 'mydspaceArchived', + MyDSpaceWorkspace = 'mydspaceWorkspace', + MyDSpaceWorkflow = 'mydspaceWorkflow', + MyDSpaceDeclined = 'mydspaceDeclined', + MyDSpaceApproved = 'mydspaceApproved', + MyDSpaceWaitingController = 'mydspaceWaitingController', + MyDSpaceValidation = 'mydspaceValidation', } diff --git a/src/app/core/shared/item.model.ts b/src/app/core/shared/item.model.ts index 28f0d7fd36..7b14188ee0 100644 --- a/src/app/core/shared/item.model.ts +++ b/src/app/core/shared/item.model.ts @@ -21,8 +21,8 @@ import { Version } from './version.model'; import { VERSION } from './version.resource-type'; import { BITSTREAM } from './bitstream.resource-type'; import { Bitstream } from './bitstream.model'; -import { ACCESS_STATUS } from 'src/app/shared/object-list/access-status-badge/access-status.resource-type'; -import { AccessStatusObject } from 'src/app/shared/object-list/access-status-badge/access-status.model'; +import { ACCESS_STATUS } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type'; +import { AccessStatusObject } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model'; import { HandleObject } from './handle-object.model'; /** diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html index 60684314b4..f379efbaf1 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index c933991a23..0477ef2324 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index cf4cc41a21..d994ae8411 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index e8c45e64cc..9d02a5d837 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -12,7 +12,7 @@
    - +
    - +
    - +

    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index 9d85cb3f84..a11cd384e0 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index 79d07f8040..60c9db31f9 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -19,7 +19,7 @@
    - +

    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index 1fb3705be7..9495577c01 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -18,7 +18,7 @@
    - +
    - + -
    + {{ accessStatus | translate }} -
    + diff --git a/src/app/shared/object-list/access-status-badge/access-status-badge.component.spec.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts similarity index 94% rename from src/app/shared/object-list/access-status-badge/access-status-badge.component.spec.ts rename to src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts index 9101df2f4c..f661ed6e00 100644 --- a/src/app/shared/object-list/access-status-badge/access-status-badge.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.spec.ts @@ -1,10 +1,10 @@ -import { Item } from '../../../core/shared/item.model'; +import { Item } from '../../../../../core/shared/item.model'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { TruncatePipe } from '../../utils/truncate.pipe'; +import { TruncatePipe } from '../../../../utils/truncate.pipe'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { AccessStatusBadgeComponent } from './access-status-badge.component'; -import { createSuccessfulRemoteDataObject$ } from '../../remote-data.utils'; +import { createSuccessfulRemoteDataObject$ } from '../../../../remote-data.utils'; import { By } from '@angular/platform-browser'; import { AccessStatusObject } from './access-status.model'; import { AccessStatusDataService } from 'src/app/core/data/access-status-data.service'; @@ -50,7 +50,8 @@ describe('ItemAccessStatusBadgeComponent', () => { }); item = Object.assign(new Item(), { - uuid: 'item-uuid' + uuid: 'item-uuid', + type: 'item' }); } @@ -69,7 +70,7 @@ describe('ItemAccessStatusBadgeComponent', () => { environment.item.showAccessStatuses = true; fixture = TestBed.createComponent(AccessStatusBadgeComponent); component = fixture.componentInstance; - component.item = item; + component.object = item; fixture.detectChanges(); environment.item.showAccessStatuses = false; } diff --git a/src/app/shared/object-list/access-status-badge/access-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts similarity index 70% rename from src/app/shared/object-list/access-status-badge/access-status-badge.component.ts rename to src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts index fbca3cb971..2b0e316e64 100644 --- a/src/app/shared/object-list/access-status-badge/access-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts @@ -2,10 +2,13 @@ import { Component, Input } from '@angular/core'; import { catchError, map } from 'rxjs/operators'; import { Observable, of as observableOf } from 'rxjs'; import { AccessStatusObject } from './access-status.model'; -import { hasValue } from '../../empty.util'; +import { hasValue } from '../../../../empty.util'; import { environment } from 'src/environments/environment'; -import { Item } from 'src/app/core/shared/item.model'; import { AccessStatusDataService } from 'src/app/core/data/access-status-data.service'; +import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; +import { ITEM_TYPE } from '../../../../../core/shared/item-relationships/item-type.resource-type'; +import { Item } from '../../../../../core/shared/item.model'; +import { ITEM } from '../../../../../core/shared/item.resource-type'; @Component({ selector: 'ds-access-status-badge', @@ -16,7 +19,7 @@ import { AccessStatusDataService } from 'src/app/core/data/access-status-data.se */ export class AccessStatusBadgeComponent { - @Input() item: Item; + @Input() object: DSpaceObject; accessStatus$: Observable; /** @@ -33,15 +36,17 @@ export class AccessStatusBadgeComponent { ngOnInit(): void { this.showAccessStatus = environment.item.showAccessStatuses; - if (!this.showAccessStatus || this.item == null) { + if (this.object.type.toString() !== ITEM.value || !this.showAccessStatus || this.object == null) { // Do not show the badge if the feature is inactive or if the item is null. return; } - if (this.item.accessStatus == null) { + + const item = this.object as Item; + if (item.accessStatus == null) { // In case the access status has not been loaded, do it individually. - this.item.accessStatus = this.accessStatusDataService.findAccessStatusFor(this.item); + item.accessStatus = this.accessStatusDataService.findAccessStatusFor(item); } - this.accessStatus$ = this.item.accessStatus.pipe( + this.accessStatus$ = item.accessStatus.pipe( map((accessStatusRD) => { if (accessStatusRD.statusCode !== 401 && hasValue(accessStatusRD.payload)) { return accessStatusRD.payload; diff --git a/src/app/shared/object-list/access-status-badge/access-status.model.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model.ts similarity index 100% rename from src/app/shared/object-list/access-status-badge/access-status.model.ts rename to src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model.ts diff --git a/src/app/shared/object-list/access-status-badge/access-status.resource-type.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type.ts similarity index 100% rename from src/app/shared/object-list/access-status-badge/access-status.resource-type.ts rename to src/app/shared/object-collection/shared/badges/access-status-badge/access-status.resource-type.ts diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/themed-access-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/themed-access-status-badge.component.ts new file mode 100644 index 0000000000..ad8dfd7cb0 --- /dev/null +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/themed-access-status-badge.component.ts @@ -0,0 +1,30 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../../theme-support/themed.component'; +import { AccessStatusBadgeComponent } from './access-status-badge.component'; +import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; + +/** + * Themed wrapper for AccessStatusBadgeComponent + */ +@Component({ + selector: 'ds-themed-access-status-badge', + styleUrls: [], + templateUrl: '../../../../theme-support/themed.component.html', +}) +export class ThemedAccessStatusBadgeComponent extends ThemedComponent { + @Input() object: DSpaceObject; + + protected inAndOutputNames: (keyof AccessStatusBadgeComponent & keyof this)[] = ['object']; + + protected getComponentName(): string { + return 'AccessStatusBadgeComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../../themes/${themeName}/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./access-status-badge.component`); + } +} diff --git a/src/app/shared/object-collection/shared/badges/badges.component.html b/src/app/shared/object-collection/shared/badges/badges.component.html index b10c723fca..7fc08751aa 100644 --- a/src/app/shared/object-collection/shared/badges/badges.component.html +++ b/src/app/shared/object-collection/shared/badges/badges.component.html @@ -1,5 +1,10 @@ - - + + - +
    + + + + +
    diff --git a/src/app/shared/object-collection/shared/badges/badges.component.ts b/src/app/shared/object-collection/shared/badges/badges.component.ts index 1d7df0002e..5b1bb7a3b8 100644 --- a/src/app/shared/object-collection/shared/badges/badges.component.ts +++ b/src/app/shared/object-collection/shared/badges/badges.component.ts @@ -1,7 +1,17 @@ import { Component, Input } from '@angular/core'; +import { Context } from 'src/app/core/shared/context.model'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { MyDspaceItemStatusType } from './my-dspace-status-badge/my-dspace-item-status-type'; +import { calcPossibleSecurityContexts } from '@angular/compiler/src/template_parser/binding_parser'; +const MY_DSPACE_STATUS_CONTEXTS = [ + Context.MyDSpaceArchived, + Context.MyDSpaceWorkspace, + Context.MyDSpaceWorkflow, + Context.MyDSpaceDeclined, + Context.MyDSpaceApproved, + Context.MyDSpaceWaitingController, + Context.MyDSpaceValidation +]; @Component({ selector: 'ds-badges', templateUrl: './badges.component.html', @@ -9,5 +19,9 @@ import { MyDspaceItemStatusType } from './my-dspace-status-badge/my-dspace-item- }) export class BadgesComponent { @Input() object: DSpaceObject; - @Input() myDSpaceStatus?: MyDspaceItemStatusType; + @Input() context?: Context; + @Input() showAccessStatus = false; + get isMyDSpaceStatus(): boolean { + return MY_DSPACE_STATUS_CONTEXTS.includes(this.context); + } } diff --git a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html index 848dd502a4..4cf93cbd1d 100644 --- a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.html @@ -1,5 +1,5 @@
    - {{badgeContent | translate}} + {{('mydspace.status.' + badgeContent) | translate}}
    diff --git a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts index 788774c9bb..147c9eb53c 100644 --- a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts @@ -12,6 +12,7 @@ import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; import { TranslateLoaderMock } from '../../../../mocks/translate-loader.mock'; import { By } from '@angular/platform-browser'; import { createSuccessfulRemoteDataObject } from '../../../../remote-data.utils'; +import { Context } from '../../../../../core/shared/context.model'; let component: MyDSpaceStatusBadgeComponent; let fixture: ComponentFixture; @@ -52,37 +53,37 @@ describe('MyDSpaceItemStatusComponent', () => { }); it('should init badge content and class', () => { - component.status = MyDspaceItemStatusType.VALIDATION; + component.context = Context.MyDSpaceValidation; fixture.detectChanges(); - expect(component.badgeContent).toBe(MyDspaceItemStatusType.VALIDATION); + expect(component.badgeContent).toBe(Context.MyDSpaceValidation); expect(component.badgeClass).toBe('text-light badge badge-warning'); }); it('should init badge content and class', () => { - component.status = MyDspaceItemStatusType.WAITING_CONTROLLER; + component.context = Context.MyDSpaceWaitingController; fixture.detectChanges(); - expect(component.badgeContent).toBe(MyDspaceItemStatusType.WAITING_CONTROLLER); + expect(component.badgeContent).toBe(Context.MyDSpaceWaitingController); expect(component.badgeClass).toBe('text-light badge badge-info'); }); it('should init badge content and class', () => { - component.status = MyDspaceItemStatusType.WORKSPACE; + component.context = Context.MyDSpaceWorkspace; fixture.detectChanges(); - expect(component.badgeContent).toBe(MyDspaceItemStatusType.WORKSPACE); + expect(component.badgeContent).toBe(Context.MyDSpaceWorkspace); expect(component.badgeClass).toBe('text-light badge badge-primary'); }); it('should init badge content and class', () => { - component.status = MyDspaceItemStatusType.ARCHIVED; + component.context = Context.MyDSpaceArchived; fixture.detectChanges(); - expect(component.badgeContent).toBe(MyDspaceItemStatusType.ARCHIVED); + expect(component.badgeContent).toBe(Context.MyDSpaceArchived); expect(component.badgeClass).toBe('text-light badge badge-success'); }); it('should init badge content and class', () => { - component.status = MyDspaceItemStatusType.WORKFLOW; + component.context = Context.MyDSpaceWorkflow; fixture.detectChanges(); - expect(component.badgeContent).toBe(MyDspaceItemStatusType.WORKFLOW); + expect(component.badgeContent).toBe(Context.MyDSpaceWorkflow); expect(component.badgeClass).toBe('text-light badge badge-info'); }); }); diff --git a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts index 6a1678a45a..cbca8b62bd 100644 --- a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; +import { Context } from 'src/app/core/shared/context.model'; /** * This component represents a badge with mydspace item status @@ -12,9 +12,9 @@ import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; export class MyDSpaceStatusBadgeComponent implements OnInit { /** - * This mydspace item status + * This mydspace item context */ - @Input() status: MyDspaceItemStatusType; + @Input() context: Context; /** * This badge class @@ -30,22 +30,22 @@ export class MyDSpaceStatusBadgeComponent implements OnInit { * Initialize badge content and class */ ngOnInit() { - this.badgeContent = this.status; + this.badgeContent = this.context; this.badgeClass = 'text-light badge '; - switch (this.status) { - case MyDspaceItemStatusType.VALIDATION: + switch (this.context) { + case Context.MyDSpaceValidation: this.badgeClass += 'badge-warning'; break; - case MyDspaceItemStatusType.WAITING_CONTROLLER: + case Context.MyDSpaceWaitingController: this.badgeClass += 'badge-info'; break; - case MyDspaceItemStatusType.WORKSPACE: + case Context.MyDSpaceWorkspace: this.badgeClass += 'badge-primary'; break; - case MyDspaceItemStatusType.ARCHIVED: + case Context.MyDSpaceArchived: this.badgeClass += 'badge-success'; break; - case MyDspaceItemStatusType.WORKFLOW: + case Context.MyDSpaceWorkflow: this.badgeClass += 'badge-info'; break; } diff --git a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts index 9f7bb16853..4c375746c8 100644 --- a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; +import { Context } from 'src/app/core/shared/context.model'; import { ThemedComponent } from '../../../../theme-support/themed.component'; -import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; import { MyDSpaceStatusBadgeComponent } from './my-dspace-status-badge.component'; /** @@ -12,9 +12,9 @@ import { MyDSpaceStatusBadgeComponent } from './my-dspace-status-badge.component templateUrl: '../../../../theme-support/themed.component.html', }) export class ThemedMyDSpaceStatusBadgeComponent extends ThemedComponent { - @Input() status: MyDspaceItemStatusType; + @Input() context: Context; - protected inAndOutputNames: (keyof MyDSpaceStatusBadgeComponent & keyof this)[] = ['status']; + protected inAndOutputNames: (keyof MyDSpaceStatusBadgeComponent & keyof this)[] = ['context']; protected getComponentName(): string { return 'MyDSpaceStatusBadgeComponent'; diff --git a/src/app/shared/object-collection/shared/badges/themed-badges.component.ts b/src/app/shared/object-collection/shared/badges/themed-badges.component.ts index 05f519e09d..1671b0c5b0 100644 --- a/src/app/shared/object-collection/shared/badges/themed-badges.component.ts +++ b/src/app/shared/object-collection/shared/badges/themed-badges.component.ts @@ -2,7 +2,7 @@ import { Component, Input } from '@angular/core'; import { BadgesComponent } from './badges.component'; import { ThemedComponent } from '../../../theme-support/themed.component'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { MyDspaceItemStatusType } from './my-dspace-status-badge/my-dspace-item-status-type'; +import { Context } from 'src/app/core/shared/context.model'; /** * Themed wrapper for BadgesComponent @@ -14,9 +14,10 @@ import { MyDspaceItemStatusType } from './my-dspace-status-badge/my-dspace-item- }) export class ThemedBadgesComponent extends ThemedComponent { @Input() object: DSpaceObject; - @Input() myDSpaceStatus: MyDspaceItemStatusType; + @Input() context: Context; + @Input() showAccessStatus = false; - protected inAndOutputNames: (keyof BadgesComponent & keyof this)[] = ['object', 'myDSpaceStatus']; + protected inAndOutputNames: (keyof BadgesComponent & keyof this)[] = ['object', 'context', 'showAccessStatus']; protected getComponentName(): string { return 'BadgesComponent'; diff --git a/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html index 0c2bd7544e..119702c375 100644 --- a/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html +++ b/src/app/shared/object-collection/shared/badges/type-badge/type-badge.component.html @@ -1,3 +1,3 @@ -
    + {{ typeMessage | translate }} -
    + diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.html index 3695f4714d..bc68fa20dc 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.html @@ -2,7 +2,7 @@ + [context]="childContext"> ; @@ -99,8 +106,8 @@ describe('ClaimedTaskSearchResultDetailElementComponent', () => { expect(component.item$.value).toEqual(item); })); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.VALIDATION); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceValidation); }); it('should forward claimed-task-actions processComplete event to reloadObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts index a30db32074..9431421bbd 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts @@ -8,7 +8,6 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; import { followLink } from '../../../utils/follow-link-config.model'; @@ -17,6 +16,7 @@ import { Item } from '../../../../core/shared/item.model'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { isNotEmpty } from '../../../empty.util'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; +import { Context } from 'src/app/core/shared/context.model'; /** * This component renders claimed task object for the search result in the detail view. @@ -41,9 +41,9 @@ export class ClaimedTaskSearchResultDetailElementComponent extends SearchResultD public showSubmitter = true; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.VALIDATION; + public childContext = Context.MyDSpaceValidation; /** * The workflowitem object that belonging to the result object diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html index 3c7f682639..880aaec025 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html @@ -1,5 +1,5 @@
    - +
    diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts index e7c316579c..c3d558a5e1 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.ts @@ -6,12 +6,12 @@ import { BitstreamDataService } from '../../../../core/data/bitstream-data.servi import { Item } from '../../../../core/shared/item.model'; import { getFirstSucceededRemoteListPayload } from '../../../../core/shared/operators'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { fadeInOut } from '../../../animations/fade'; import { Bitstream } from '../../../../core/shared/bitstream.model'; import { FileService } from '../../../../core/shared/file.service'; import { HALEndpointService } from '../../../../core/shared/hal-endpoint.service'; import { SearchResult } from '../../../search/models/search-result.model'; +import { Context } from '../../../../core/shared/context.model'; /** * This component show metadata for the given item object in the detail view. @@ -23,7 +23,6 @@ import { SearchResult } from '../../../search/models/search-result.model'; animations: [fadeInOut] }) export class ItemDetailPreviewComponent { - /** * The item to display */ @@ -35,9 +34,9 @@ export class ItemDetailPreviewComponent { @Input() object: SearchResult; /** - * Represent item's status + * Represent context */ - @Input() status: MyDspaceItemStatusType; + @Input() context: Context; /** * A boolean representing if to show submitter information diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.html index 2b687960ab..53824e6655 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.html @@ -1,6 +1,6 @@ + [context]="childContext"> diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts index 0e9fe29cd7..bdb423d37d 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.spec.ts @@ -6,8 +6,8 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { ItemSearchResultDetailElementComponent } from './item-search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; +import { Context } from 'src/app/core/shared/context.model'; let component: ItemSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -68,7 +68,7 @@ describe('ItemSearchResultDetailElementComponent', () => { fixture.detectChanges(); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.ARCHIVED); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceArchived); }); }); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts index e406ae10c0..d4110a3db3 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-search-result/item-search-result-detail-element.component.ts @@ -3,7 +3,6 @@ import { Component } from '@angular/core'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { Item } from '../../../../core/shared/item.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; import { Context } from '../../../../core/shared/context.model'; @@ -22,8 +21,8 @@ import { Context } from '../../../../core/shared/context.model'; export class ItemSearchResultDetailElementComponent extends SearchResultDetailElementComponent { /** - * Represent item's status + * Represent context */ - public status = MyDspaceItemStatusType.ARCHIVED; + public childContext = Context.MyDSpaceArchived; } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.html index c9165b416a..74b82d0836 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.html @@ -2,7 +2,7 @@ + [context]="childContext"> ; @@ -101,8 +101,8 @@ describe('PoolSearchResultDetailElementComponent', () => { expect(component.item$.value).toEqual(item); })); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.WAITING_CONTROLLER); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceWaitingController); }); it('should forward pool-task-actions processCompleted event to the reloadedObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts index cd08917cc5..5b97ac9fb7 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts @@ -6,7 +6,6 @@ import { mergeMap, tap } from 'rxjs/operators'; import { RemoteData } from '../../../../core/data/remote-data'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; @@ -17,6 +16,7 @@ import { Item } from '../../../../core/shared/item.model'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { isNotEmpty } from '../../../empty.util'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; +import { Context } from 'src/app/core/shared/context.model'; /** * This component renders pool task object for the search result in the detail view. @@ -41,9 +41,9 @@ export class PoolSearchResultDetailElementComponent extends SearchResultDetailEl public showSubmitter = true; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.WAITING_CONTROLLER; + public childContext = Context.MyDSpaceWaitingController; /** * The workflowitem object that belonging to the result object diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.html index 7ff1a9bf72..3bf582982a 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.html @@ -1,6 +1,6 @@ + [context]="childContext"> diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts index 345860485a..de87045e28 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.spec.ts @@ -7,13 +7,13 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItemSearchResultDetailElementComponent } from './workflow-item-search-result-detail-element.component'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; +import { Context } from '../../../../core/shared/context.model'; let component: WorkflowItemSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -87,7 +87,7 @@ describe('WorkflowItemSearchResultDetailElementComponent', () => { expect(component.item).toEqual(item); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.WORKFLOW); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceWorkflow); }); }); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts index 614045dd7d..afc6addb74 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workflow-item-search-result/workflow-item-search-result-detail-element.component.ts @@ -4,7 +4,6 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../core/data/remote-data'; import { find } from 'rxjs/operators'; @@ -13,6 +12,7 @@ import { listableObjectComponent } from '../../../object-collection/shared/lista import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { followLink } from '../../../utils/follow-link-config.model'; +import { Context } from 'src/app/core/shared/context.model'; /** * This component renders workflowitem object for the search result in the detail view. @@ -32,9 +32,9 @@ export class WorkflowItemSearchResultDetailElementComponent extends SearchResult public item: Item; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.WORKFLOW; + public childContext = Context.MyDSpaceWorkflow; constructor( protected linkService: LinkService diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.html index 8d4eee6ba9..038bd712e9 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.html @@ -1,5 +1,5 @@ + [context]="childContext"> diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts index 0d5b18919f..0355ab4c7c 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.spec.ts @@ -7,13 +7,13 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { WorkspaceItemSearchResultDetailElementComponent } from './workspace-item-search-result-detail-element.component'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; +import { Context } from 'src/app/core/shared/context.model'; let component: WorkspaceItemSearchResultDetailElementComponent; let fixture: ComponentFixture; @@ -87,7 +87,7 @@ describe('WorkspaceItemSearchResultDetailElementComponent', () => { expect(component.item).toEqual(item); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.WORKSPACE); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceWorkspace); }); }); diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts index c314678e89..691c1a8664 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/workspace-item-search-result/workspace-item-search-result-detail-element.component.ts @@ -8,12 +8,12 @@ import { Item } from '../../../../core/shared/item.model'; import { RemoteData } from '../../../../core/data/remote-data'; import { isNotUndefined } from '../../../empty.util'; import { SearchResultDetailElementComponent } from '../search-result-detail-element.component'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspace-item-search-result.model'; import { followLink } from '../../../utils/follow-link-config.model'; import { LinkService } from '../../../../core/cache/builders/link.service'; +import { Context } from '../../../../core/shared/context.model'; /** * This component renders workspace item object for the search result in the detail view. @@ -33,9 +33,9 @@ export class WorkspaceItemSearchResultDetailElementComponent extends SearchResul public item: Item; /** - * Represent item's status + * Represent child context */ - status = MyDspaceItemStatusType.WORKSPACE; + public childContext = Context.MyDSpaceWorkspace; constructor( protected linkService: LinkService diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index ffff88b910..694c6f565f 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -8,7 +8,7 @@
    - +

    {{dso.name}}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index e1ddfa97fe..c8f3ffca0a 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -8,7 +8,7 @@
    - +

    {{dso.name}}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index fd68b022a1..48fb01200b 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -16,8 +16,7 @@
    - - +

    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.html index 544c1ebea8..4eb98728af 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.html @@ -4,7 +4,7 @@
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts index 51bccd2dd5..9c5cc7db5f 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.spec.ts @@ -12,13 +12,13 @@ import { getMockLinkService } from '../../../../mocks/link-service.mock'; import { VarDirective } from '../../../../utils/var.directive'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; import { LinkService } from '../../../../../core/cache/builders/link.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ClaimedApprovedTaskSearchResult } from '../../../../object-collection/shared/claimed-approved-task-search-result.model'; import { ClaimedApprovedSearchResultListElementComponent } from './claimed-approved-search-result-list-element.component'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; +import { Context } from '../../../../../core/shared/context.model'; let component: ClaimedApprovedSearchResultListElementComponent; let fixture: ComponentFixture; @@ -100,8 +100,8 @@ describe('ClaimedApprovedSearchResultListElementComponent', () => { }); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.APPROVED); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceApproved); }); }); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts index 9c1b9f81d9..932f1b91c5 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-approved-search-result/claimed-approved-search-result-list-element.component.ts @@ -4,7 +4,6 @@ import { ClaimedApprovedTaskSearchResult } from '../../../../object-collection/s import { listableObjectComponent } from '../../../../object-collection/shared/listable-object/listable-object.decorator'; import { LinkService } from '../../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; @@ -14,6 +13,7 @@ import { ClaimedTaskSearchResult } from '../../../../object-collection/shared/cl import { ClaimedTask } from '../../../../../core/tasks/models/claimed-task-object.model'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { APP_CONFIG, AppConfig } from '../../../../../../config/app-config.interface'; +import { Context } from 'src/app/core/shared/context.model'; /** * This component renders claimed task approved object for the search result in the list view. @@ -32,9 +32,9 @@ export class ClaimedApprovedSearchResultListElementComponent extends SearchResul public showSubmitter = true; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.APPROVED; + public childContext = Context.MyDSpaceApproved; /** * The workflowitem object that belonging to the result object diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts index a1e3391cc6..b911757057 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declided-search-result-list-element.component.spec.ts @@ -14,11 +14,11 @@ import { getMockLinkService } from '../../../../mocks/link-service.mock'; import { VarDirective } from '../../../../utils/var.directive'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; import { LinkService } from '../../../../../core/cache/builders/link.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { environment } from '../../../../../../environments/environment'; +import { Context } from '../../../../../core/shared/context.model'; let component: ClaimedDeclinedSearchResultListElementComponent; let fixture: ComponentFixture; @@ -100,8 +100,8 @@ describe('ClaimedDeclinedSearchResultListElementComponent', () => { }); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.DECLINED); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceDeclined); }); }); diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.html index b642aef585..ccc45fe5a5 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.html @@ -4,7 +4,7 @@
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts index 1855c3325a..bc4918839d 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-search-result/claimed-declined-search-result-list-element.component.ts @@ -5,7 +5,6 @@ import { ClaimedDeclinedTaskSearchResult } from '../../../../object-collection/s import { ViewMode } from '../../../../../core/shared/view-mode.model'; import { LinkService } from '../../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; @@ -15,6 +14,7 @@ import { ClaimedTaskSearchResult } from '../../../../object-collection/shared/cl import { ClaimedTask } from '../../../../../core/tasks/models/claimed-task-object.model'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { APP_CONFIG, AppConfig } from '../../../../../../config/app-config.interface'; +import { Context } from '../../../../../core/shared/context.model'; /** * This component renders claimed task declined object for the search result in the list view. @@ -33,9 +33,9 @@ export class ClaimedDeclinedSearchResultListElementComponent extends SearchResul public showSubmitter = true; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.DECLINED; + public childContext = Context.MyDSpaceDeclined; /** * The workflowitem object that belonging to the result object diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html index 5e98b00926..53f6737185 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html @@ -2,7 +2,7 @@ + [context]="childContext">
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts index 3579f21055..17d8a81011 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.spec.ts @@ -1,5 +1,12 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; -import { ComponentFixture, fakeAsync, flush, TestBed, tick, waitForAsync } from '@angular/core/testing'; +import { + ComponentFixture, + fakeAsync, + flush, + TestBed, + tick, + waitForAsync +} from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { of as observableOf } from 'rxjs'; @@ -7,7 +14,6 @@ import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; import { ClaimedSearchResultListElementComponent } from './claimed-search-result-list-element.component'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; @@ -21,6 +27,7 @@ import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; import { environment } from '../../../../../environments/environment'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; +import { Context } from '../../../../core/shared/context.model'; let component: ClaimedSearchResultListElementComponent; let fixture: ComponentFixture; @@ -105,8 +112,8 @@ describe('ClaimedSearchResultListElementComponent', () => { expect(component.item$.value).toEqual(item); })); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.VALIDATION); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceValidation); }); it('should forward claimed-task-actions processComplete event to reloadObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts index 5c480b2084..08bfc44c60 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts @@ -5,7 +5,6 @@ import { listableObjectComponent } from '../../../object-collection/shared/lista import { ClaimedTaskSearchResult } from '../../../object-collection/shared/claimed-task-search-result.model'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { BehaviorSubject, EMPTY, Observable } from 'rxjs'; import { RemoteData } from '../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; @@ -21,6 +20,7 @@ import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { Item } from '../../../../core/shared/item.model'; import { mergeMap, tap } from 'rxjs/operators'; import { isNotEmpty } from '../../../empty.util'; +import { Context } from '../../../../core/shared/context.model'; @Component({ selector: 'ds-claimed-search-result-list-element', @@ -36,9 +36,9 @@ export class ClaimedSearchResultListElementComponent extends SearchResultListEle public showSubmitter = true; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.VALIDATION; + public childContext = Context.MyDSpaceValidation; /** * The item object that belonging to the result object diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html index 083ba614d5..fa34a7010b 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.html @@ -6,8 +6,7 @@
    - - +

    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts index 9632104042..bbb28a3ea7 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component.ts @@ -2,10 +2,10 @@ import { Component, Inject, Input, OnInit } from '@angular/core'; import { Item } from '../../../../core/shared/item.model'; import { fadeInOut } from '../../../animations/fade'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { SearchResult } from '../../../search/models/search-result.model'; import { APP_CONFIG, AppConfig } from '../../../../../config/app-config.interface'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { Context } from 'src/app/core/shared/context.model'; /** * This component show metadata for the given item object in the list view. @@ -29,9 +29,9 @@ export class ItemListPreviewComponent implements OnInit { @Input() object: SearchResult; /** - * Represent item's status + * Represent context */ - @Input() status: MyDspaceItemStatusType; + @Input() context: Context; /** * A boolean representing if to show submitter information diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts index 6f7895ceb4..91a6335fe2 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts @@ -2,8 +2,8 @@ import { Component, Input } from '@angular/core'; import { ThemedComponent } from '../../../theme-support/themed.component'; import { ItemListPreviewComponent } from './item-list-preview.component'; import { Item } from '../../../../core/shared/item.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { SearchResult } from '../../../search/models/search-result.model'; +import { Context } from 'src/app/core/shared/context.model'; /** * Themed wrapper for ItemListPreviewComponent @@ -14,13 +14,13 @@ import { SearchResult } from '../../../search/models/search-result.model'; templateUrl: '../../../theme-support/themed.component.html', }) export class ThemedItemListPreviewComponent extends ThemedComponent { - protected inAndOutputNames: (keyof ItemListPreviewComponent & keyof this)[] = ['item', 'object', 'status', 'showSubmitter']; + protected inAndOutputNames: (keyof ItemListPreviewComponent & keyof this)[] = ['item', 'object', 'context', 'showSubmitter']; @Input() item: Item; @Input() object: SearchResult; - @Input() status: MyDspaceItemStatusType; + @Input() context: Context; @Input() showSubmitter = false; diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.html index b5e9155b81..0a0ad7fa5c 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.html @@ -1,6 +1,6 @@ + [context]="childContext">
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts index f0a73ee4f3..586013af1e 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.spec.ts @@ -1,11 +1,10 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; -import { waitForAsync, ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { of as observableOf } from 'rxjs'; import { Item } from '../../../../core/shared/item.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; import { ItemSearchResultListElementSubmissionComponent } from './item-search-result-list-element-submission.component'; import { TruncatableService } from '../../../truncatable/truncatable.service'; @@ -14,6 +13,7 @@ import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; import { environment } from '../../../../../environments/environment'; +import { Context } from '../../../../core/shared/context.model'; let component: ItemSearchResultListElementSubmissionComponent; let fixture: ComponentFixture; @@ -77,8 +77,8 @@ describe('ItemMyDSpaceResultListElementComponent', () => { fixture.detectChanges(); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.ARCHIVED); + it('should have correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceArchived); }); it('should forward item-actions processComplete event to reloadObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts index 9ace9a00dc..d9e243967d 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-search-result/item-search-result-list-element-submission.component.ts @@ -1,7 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { Item } from '../../../../core/shared/item.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { Context } from '../../../../core/shared/context.model'; @@ -21,9 +20,10 @@ import { SearchResultListElementComponent } from '../../search-result-list-eleme @listableObjectComponent(ItemSearchResult, ViewMode.ListElement, Context.Workflow) export class ItemSearchResultListElementSubmissionComponent extends SearchResultListElementComponent implements OnInit { /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.ARCHIVED; + public childContext = Context.MyDSpaceArchived; + /** * Display thumbnails if required by configuration diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html index 4f0d6f774a..0151d94788 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html @@ -2,7 +2,7 @@ + [context]="childContext">
    ; @@ -111,8 +118,8 @@ describe('PoolSearchResultListElementComponent', () => { expect(component.item$.value).toEqual(item); })); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.WAITING_CONTROLLER); + it('should have correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceWaitingController); }); it('should forward pool-task-actions processCompleted event to the reloadedObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts index fb37fae324..41308f2501 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts @@ -7,7 +7,6 @@ import { ViewMode } from '../../../../core/shared/view-mode.model'; import { RemoteData } from '../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { PoolTask } from '../../../../core/tasks/models/pool-task-object.model'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; import { PoolTaskSearchResult } from '../../../object-collection/shared/pool-task-search-result.model'; import { @@ -22,6 +21,7 @@ import { ObjectCacheService } from '../../../../core/cache/object-cache.service' import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { Item } from '../../../../core/shared/item.model'; import { isNotEmpty } from '../../../empty.util'; +import { Context } from '../../../../core/shared/context.model'; /** * This component renders pool task object for the search result in the list view. @@ -41,9 +41,9 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen public showSubmitter = true; /** - * Represent item's status + * Represent child Context */ - public status = MyDspaceItemStatusType.WAITING_CONTROLLER; + public childContext = Context.MyDSpaceWaitingController; /** * The item object that belonging to the result object diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html index c3db054f8c..4c7baccaa0 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.html @@ -1,12 +1,8 @@ -
    -
    - -
    -
    + [object]="derivedSearchResult$ | async" [linkType]="LinkTypes.None" + [context]="childContext">
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts index b34e9cccb3..4a62707edf 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.spec.ts @@ -10,7 +10,6 @@ import { ItemDataService } from '../../../../core/data/item-data.service'; import { Item } from '../../../../core/shared/item.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { TruncatableService } from '../../../truncatable/truncatable.service'; @@ -19,6 +18,7 @@ import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; +import { Context } from '../../../../core/shared/context.model'; let component: WorkflowItemSearchResultListElementComponent; let fixture: ComponentFixture; @@ -105,8 +105,8 @@ describe('WorkflowItemSearchResultListElementComponent', () => { }); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.WORKFLOW); + it('should have the correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceWorkflow); }); it('should forward workflowitem-actions processCompleted event to the reloadedObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts index 04e79db209..b5bd113e74 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workflow-item-search-result/workflow-item-search-result-list-element.component.ts @@ -8,7 +8,6 @@ import { Item } from '../../../../core/shared/item.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { TruncatableService } from '../../../truncatable/truncatable.service'; import { followLink } from '../../../utils/follow-link-config.model'; @@ -18,6 +17,7 @@ import { APP_CONFIG, AppConfig } from '../../../../../config/app-config.interfac import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; import { ItemSearchResult } from '../../../object-collection/shared/item-search-result.model'; import { CollectionElementLinkType } from '../../../object-collection/collection-element-link.type'; +import { Context } from '../../../../core/shared/context.model'; /** * This component renders workflowitem object for the search result in the list view. @@ -40,9 +40,9 @@ export class WorkflowItemSearchResultListElementComponent extends SearchResultLi derivedSearchResult$: Observable; /** - * Represent item's status + * Represent child context */ - public status = MyDspaceItemStatusType.WORKFLOW; + public childContext = Context.MyDSpaceWorkflow; /** * Display thumbnails if required by configuration diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html index 4e86132df6..2e7165795e 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.html @@ -1,12 +1,8 @@ -
    -
    - -
    -
    + [object]="derivedSearchResult$ | async" [linkType]="LinkTypes.None" + [context]="childContext">
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts index 1df23a7091..1ae64fd88a 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.spec.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; -import { waitForAsync, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { of as observableOf } from 'rxjs'; @@ -10,7 +10,6 @@ import { ItemDataService } from '../../../../core/data/item-data.service'; import { Item } from '../../../../core/shared/item.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { getMockLinkService } from '../../../mocks/link-service.mock'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkflowItemSearchResult } from '../../../object-collection/shared/workflow-item-search-result.model'; import { createSuccessfulRemoteDataObject } from '../../../remote-data.utils'; import { TruncatableService } from '../../../truncatable/truncatable.service'; @@ -19,6 +18,7 @@ import { By } from '@angular/platform-browser'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../config/app-config.interface'; +import { Context } from '../../../../core/shared/context.model'; let component: WorkspaceItemSearchResultListElementComponent; let fixture: ComponentFixture; @@ -104,8 +104,8 @@ describe('WorkspaceItemSearchResultListElementComponent', () => { }); }); - it('should have properly status', () => { - expect(component.status).toEqual(MyDspaceItemStatusType.WORKSPACE); + it('should have correct child context', () => { + expect(component.childContext).toEqual(Context.MyDSpaceWorkspace); }); it('should forward workspaceitem-actions processCompleted event to the reloadedObject event emitter', fakeAsync(() => { diff --git a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts index 7379b0d430..b5b5b27094 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/workspace-item-search-result/workspace-item-search-result-list-element.component.ts @@ -7,7 +7,6 @@ import { Item } from '../../../../core/shared/item.model'; import { ViewMode } from '../../../../core/shared/view-mode.model'; import { WorkspaceItem } from '../../../../core/submission/models/workspaceitem.model'; import { listableObjectComponent } from '../../../object-collection/shared/listable-object/listable-object.decorator'; -import { MyDspaceItemStatusType } from '../../../object-collection/shared/badges/my-dspace-status-badge/my-dspace-item-status-type'; import { WorkspaceItemSearchResult } from '../../../object-collection/shared/workspace-item-search-result.model'; import { TruncatableService } from '../../../truncatable/truncatable.service'; import { SearchResultListElementComponent } from '../../search-result-list-element/search-result-list-element.component'; @@ -18,6 +17,7 @@ import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; import { CollectionElementLinkType } from '../../../object-collection/collection-element-link.type'; import { followLink } from '../../../utils/follow-link-config.model'; +import { Context } from '../../../../core/shared/context.model'; /** * This component renders workspaceitem object for the search result in the list view. @@ -40,9 +40,9 @@ export class WorkspaceItemSearchResultListElementComponent extends SearchResult derivedSearchResult$: Observable; /** - * Represent item's status + * Represent child context */ - status = MyDspaceItemStatusType.WORKSPACE; + public childContext = Context.MyDSpaceWorkspace; /** * Display thumbnails if required by configuration diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index 4aa18dd63e..6856c63cce 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -1,7 +1,7 @@
    - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index 119023a10c..037b62e736 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -1,7 +1,7 @@
    - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index c9345e86f0..b62e746570 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -12,8 +12,7 @@
    - - +
    diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index c33f3c5f39..2732ac8853 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -204,7 +204,7 @@ import { } from './input-suggestions/dso-input-suggestions/dso-input-suggestions.component'; import { ItemGridElementComponent } from './object-grid/item-grid-element/item-types/item/item-grid-element.component'; import { TypeBadgeComponent } from './object-collection/shared/badges/type-badge/type-badge.component'; -import { AccessStatusBadgeComponent } from './object-list/access-status-badge/access-status-badge.component'; +import { AccessStatusBadgeComponent } from './object-collection/shared/badges/access-status-badge/access-status-badge.component'; import { MetadataRepresentationLoaderComponent } from './metadata-representation/metadata-representation-loader.component'; @@ -328,6 +328,7 @@ import { ThemedBadgesComponent } from './object-collection/shared/badges/themed- import { ThemedStatusBadgeComponent } from './object-collection/shared/badges/status-badge/themed-status-badge.component'; import { ThemedTypeBadgeComponent } from './object-collection/shared/badges/type-badge/themed-type-badge.component'; import { ThemedMyDSpaceStatusBadgeComponent } from './object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component'; +import { ThemedAccessStatusBadgeComponent } from './object-collection/shared/badges/access-status-badge/themed-access-status-badge.component'; const MODULES = [ CommonModule, @@ -463,6 +464,7 @@ const COMPONENTS = [ ComcolMetadataComponent, TypeBadgeComponent, AccessStatusBadgeComponent, + ThemedAccessStatusBadgeComponent, ThemedTypeBadgeComponent, StatusBadgeComponent, ThemedStatusBadgeComponent, diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 597f226cc7..e3cecbe2f8 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2830,15 +2830,15 @@ "mydspace.show.workspace": "Your Submissions", - "mydspace.status.archived": "Archived", + "mydspace.status.mydspaceArchived": "Archived", - "mydspace.status.validation": "Validation", + "mydspace.status.mydspaceValidation": "Validation", - "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Waiting for controller", - "mydspace.status.workflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Workflow", - "mydspace.status.workspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Workspace", "mydspace.title": "MyDSpace", diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts new file mode 100644 index 0000000000..eb623aca8b --- /dev/null +++ b/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { AccessStatusBadgeComponent as BaseComponent } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component'; + +@Component({ + selector: 'ds-access-status-badge', + // styleUrls: ['./access-status-badge.component.scss'], + // templateUrl: './access-status-badge.component.html', + templateUrl: '../../../../../../../../app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.html', +}) +export class AccessStatusBadgeComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index 20f5cfb719..a7f836bd57 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -120,6 +120,7 @@ import { MyDSpaceStatusBadgeComponent } from './app/shared/object-collection/sha import { TypeBadgeComponent } from './app/shared/object-collection/shared/badges/type-badge/type-badge.component'; import { StatusBadgeComponent } from './app/shared/object-collection/shared/badges/status-badge/status-badge.component'; import { BadgesComponent } from './app/shared/object-collection/shared/badges/badges.component'; +import { AccessStatusBadgeComponent } from './app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component'; const DECLARATIONS = [ FileSectionComponent, @@ -180,6 +181,7 @@ const DECLARATIONS = [ StatusBadgeComponent, TypeBadgeComponent, MyDSpaceStatusBadgeComponent, + AccessStatusBadgeComponent, ]; @NgModule({ From 2ff7ea43cfc6e033585e1aa88d3355b7b00dd9a8 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 25 Jan 2023 09:10:26 +0100 Subject: [PATCH 200/833] Fixed import issue --- src/app/my-dspace-page/my-dspace-search.module.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/my-dspace-page/my-dspace-search.module.ts b/src/app/my-dspace-page/my-dspace-search.module.ts index 1ce39991b3..4c14a960cd 100644 --- a/src/app/my-dspace-page/my-dspace-search.module.ts +++ b/src/app/my-dspace-page/my-dspace-search.module.ts @@ -22,7 +22,6 @@ import { ItemDetailPreviewComponent } from '../shared/object-detail/my-dspace-re import { ItemDetailPreviewFieldComponent } from '../shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview-field/item-detail-preview-field.component'; import { ItemListPreviewComponent } from '../shared/object-list/my-dspace-result-list-element/item-list-preview/item-list-preview.component'; import { ThemedItemListPreviewComponent } from '../shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component'; -import { MyDSpaceItemStatusComponent } from '../shared/object-collection/shared/mydspace-item-status/my-dspace-item-status.component'; import { JournalEntitiesModule } from '../entity-groups/journal-entities/journal-entities.module'; import { MyDSpaceActionsModule } from '../shared/mydspace-actions/mydspace-actions.module'; @@ -48,7 +47,6 @@ const DECLARATIONS = [ ItemDetailPreviewFieldComponent, ItemListPreviewComponent, ThemedItemListPreviewComponent, - MyDSpaceItemStatusComponent, ]; @NgModule({ From c294ddf56501cb5854754dbc8e580356d61538b3 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 25 Jan 2023 09:11:46 +0100 Subject: [PATCH 201/833] Fixed issue with detail page badges --- .../item-detail-preview/item-detail-preview.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html index 46e1a06ada..7e76834e6a 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/item-detail-preview/item-detail-preview.component.html @@ -1,5 +1,5 @@
    - +

    From 3a6c2a4a8ddb2d2efe489785a26a0c656aca7cd9 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 25 Jan 2023 09:30:50 +0100 Subject: [PATCH 202/833] Ran lint fixes --- .../process-page/process-page-shared.module.ts | 1 - src/app/process-page/process-page.module.ts | 16 ---------------- .../access-status-badge.component.ts | 1 - .../shared/badges/badges.component.ts | 1 - .../my-dspace-status-badge.component.spec.ts | 1 - ...ble-object-component-loader.component.spec.ts | 1 - ...listable-object-component-loader.component.ts | 1 - 7 files changed, 22 deletions(-) diff --git a/src/app/process-page/process-page-shared.module.ts b/src/app/process-page/process-page-shared.module.ts index efa154f26b..e666283e03 100644 --- a/src/app/process-page/process-page-shared.module.ts +++ b/src/app/process-page/process-page-shared.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core'; import { SharedModule } from '../shared/shared.module'; -import { ProcessPageRoutingModule } from './process-page-routing.module'; import { NewProcessComponent } from './new/new-process.component'; import { ScriptsSelectComponent } from './form/scripts-select/scripts-select.component'; import { ScriptHelpComponent } from './form/script-help/script-help.component'; diff --git a/src/app/process-page/process-page.module.ts b/src/app/process-page/process-page.module.ts index 471b55cf46..2587813998 100644 --- a/src/app/process-page/process-page.module.ts +++ b/src/app/process-page/process-page.module.ts @@ -1,22 +1,6 @@ import { NgModule } from '@angular/core'; import { SharedModule } from '../shared/shared.module'; import { ProcessPageRoutingModule } from './process-page-routing.module'; -import { NewProcessComponent } from './new/new-process.component'; -import { ScriptsSelectComponent } from './form/scripts-select/scripts-select.component'; -import { ScriptHelpComponent } from './form/script-help/script-help.component'; -import { ParameterSelectComponent } from './form/process-parameters/parameter-select/parameter-select.component'; -import { ProcessParametersComponent } from './form/process-parameters/process-parameters.component'; -import { StringValueInputComponent } from './form/process-parameters/parameter-value-input/string-value-input/string-value-input.component'; -import { ParameterValueInputComponent } from './form/process-parameters/parameter-value-input/parameter-value-input.component'; -import { FileValueInputComponent } from './form/process-parameters/parameter-value-input/file-value-input/file-value-input.component'; -import { BooleanValueInputComponent } from './form/process-parameters/parameter-value-input/boolean-value-input/boolean-value-input.component'; -import { DateValueInputComponent } from './form/process-parameters/parameter-value-input/date-value-input/date-value-input.component'; -import { ProcessOverviewComponent } from './overview/process-overview.component'; -import { ProcessDetailComponent } from './detail/process-detail.component'; -import { ProcessDetailFieldComponent } from './detail/process-detail-field/process-detail-field.component'; -import { ProcessBreadcrumbsService } from './process-breadcrumbs.service'; -import { ProcessBreadcrumbResolver } from './process-breadcrumb.resolver'; -import { ProcessFormComponent } from './form/process-form.component'; import { ProcessPageSharedModule } from './process-page-shared.module'; @NgModule({ diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts index 2b0e316e64..2be44669b0 100644 --- a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts @@ -6,7 +6,6 @@ import { hasValue } from '../../../../empty.util'; import { environment } from 'src/environments/environment'; import { AccessStatusDataService } from 'src/app/core/data/access-status-data.service'; import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; -import { ITEM_TYPE } from '../../../../../core/shared/item-relationships/item-type.resource-type'; import { Item } from '../../../../../core/shared/item.model'; import { ITEM } from '../../../../../core/shared/item.resource-type'; diff --git a/src/app/shared/object-collection/shared/badges/badges.component.ts b/src/app/shared/object-collection/shared/badges/badges.component.ts index 5b1bb7a3b8..f1e2302815 100644 --- a/src/app/shared/object-collection/shared/badges/badges.component.ts +++ b/src/app/shared/object-collection/shared/badges/badges.component.ts @@ -1,7 +1,6 @@ import { Component, Input } from '@angular/core'; import { Context } from 'src/app/core/shared/context.model'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; -import { calcPossibleSecurityContexts } from '@angular/compiler/src/template_parser/binding_parser'; const MY_DSPACE_STATUS_CONTEXTS = [ Context.MyDSpaceArchived, diff --git a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts index 0e676a888c..7c13f99895 100644 --- a/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts +++ b/src/app/shared/object-collection/shared/badges/my-dspace-status-badge/my-dspace-status-badge.component.spec.ts @@ -8,7 +8,6 @@ import { WorkflowItem } from '../../../../../core/submission/models/workflowitem import { PoolTask } from '../../../../../core/tasks/models/pool-task-object.model'; import { EPersonMock } from '../../../../testing/eperson.mock'; import { MyDSpaceStatusBadgeComponent } from './my-dspace-status-badge.component'; -import { MyDspaceItemStatusType } from './my-dspace-item-status-type'; import { TranslateLoaderMock } from '../../../../mocks/translate-loader.mock'; import { By } from '@angular/platform-browser'; import { createSuccessfulRemoteDataObject } from '../../../../remote-data.utils'; diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts index 5b4522e493..e9bc294e9d 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts @@ -11,7 +11,6 @@ import { import { ListableObjectDirective } from './listable-object.directive'; import { TranslateModule } from '@ngx-translate/core'; import { By } from '@angular/platform-browser'; -import { Item } from '../../../../core/shared/item.model'; import { provideMockStore } from '@ngrx/store/testing'; import { ThemeService } from '../../../theme-support/theme.service'; diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index f706beeebd..35950d85b9 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -2,7 +2,6 @@ import { ChangeDetectorRef, Component, ComponentRef, - ElementRef, EventEmitter, Input, OnChanges, From 66c6872b0051c86867afade4de7d0f8daa97eb0f Mon Sep 17 00:00:00 2001 From: Marie Verdonck Date: Wed, 25 Jan 2023 15:38:48 +0100 Subject: [PATCH 203/833] 97061: type request param name change to avoid confusion with rest object type & non valid email domain error code changed --- src/app/core/data/eperson-registration.service.ts | 3 ++- src/app/register-email-form/register-email-form.component.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/core/data/eperson-registration.service.ts b/src/app/core/data/eperson-registration.service.ts index 6a8d9c94f7..67f5116953 100644 --- a/src/app/core/data/eperson-registration.service.ts +++ b/src/app/core/data/eperson-registration.service.ts @@ -66,7 +66,8 @@ export class EpersonRegistrationService { const options: HttpOptions = Object.create({}); if (hasValue(type)) { - options.params = type ? new HttpParams({ fromString: 'type=' + type }) : new HttpParams(); + options.params = type ? + new HttpParams({ fromString: 'accountRequestType=' + type }) : new HttpParams(); } href$.pipe( diff --git a/src/app/register-email-form/register-email-form.component.ts b/src/app/register-email-form/register-email-form.component.ts index f2a338537d..dc742d6760 100644 --- a/src/app/register-email-form/register-email-form.component.ts +++ b/src/app/register-email-form/register-email-form.component.ts @@ -76,7 +76,7 @@ export class RegisterEmailFormComponent implements OnInit { this.notificationService.success(this.translateService.get(`${this.MESSAGE_PREFIX}.success.head`), this.translateService.get(`${this.MESSAGE_PREFIX}.success.content`, {email: this.email.value})); this.router.navigate(['/home']); - } else if (response.statusCode === 400) { + } else if (response.statusCode === 422) { this.notificationService.error(this.translateService.get(`${this.MESSAGE_PREFIX}.error.head`), this.translateService.get(`${this.MESSAGE_PREFIX}.error.maildomain`, { domains: this.validMailDomains.join(', ')})); } else { this.notificationService.error(this.translateService.get(`${this.MESSAGE_PREFIX}.error.head`), From 0d7a030960116e6635f5dacd9c007c992dbd9d9d Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 25 Jan 2023 17:46:21 +0100 Subject: [PATCH 204/833] 98863: Fixed typo and added domain name validation on input field --- .../register-email-form.component.ts | 23 ++++++++++++++----- src/assets/i18n/en.json5 | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/app/register-email-form/register-email-form.component.ts b/src/app/register-email-form/register-email-form.component.ts index dc742d6760..9269a0cb2d 100644 --- a/src/app/register-email-form/register-email-form.component.ts +++ b/src/app/register-email-form/register-email-form.component.ts @@ -3,11 +3,12 @@ import {EpersonRegistrationService} from '../core/data/eperson-registration.serv import {NotificationsService} from '../shared/notifications/notifications.service'; import {TranslateService} from '@ngx-translate/core'; import {Router} from '@angular/router'; -import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; +import { FormBuilder, FormControl, FormGroup, Validators, ValidatorFn } from '@angular/forms'; import {Registration} from '../core/shared/registration.model'; import {RemoteData} from '../core/data/remote-data'; import {ConfigurationDataService} from '../core/data/configuration-data.service'; import {getAllCompletedRemoteData} from '../core/shared/operators'; +import { ConfigurationProperty } from '../core/shared/configuration-property.model'; @Component({ selector: 'ds-register-email-form', @@ -48,22 +49,32 @@ export class RegisterEmailFormComponent implements OnInit { } ngOnInit(): void { + const validators: ValidatorFn[] = [ + Validators.required, + Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$') + ]; this.form = this.formBuilder.group({ email: new FormControl('', { - validators: [Validators.required, - Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$') - ], + validators: validators, }) }); this.validMailDomains = []; this.configurationService.findByPropertyName('authentication-password.domain.valid') .pipe(getAllCompletedRemoteData()) - .subscribe((remoteData) => { + .subscribe((remoteData: RemoteData) => { + if (remoteData.payload) { for (const remoteValue of remoteData.payload.values) { this.validMailDomains.push(remoteValue); + if (this.validMailDomains.length !== 0 && this.MESSAGE_PREFIX === 'register-page.registration') { + this.form.get('email').setValidators([ + ...validators, + Validators.pattern(this.validMailDomains.map((domain: string) => '(^.*@' + domain.replace(new RegExp('\\.', 'g'), '\\.') + '$)').join('|')), + ]); + this.form.updateValueAndValidity(); + } } } - ); + }); } /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 8737bed9b3..511d923f7d 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3027,7 +3027,7 @@ "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", - "register-page.registration.error.maildomain": "this email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", From 31d86eeb8cac289085d61477ce31f753e9111f91 Mon Sep 17 00:00:00 2001 From: Marie Verdonck Date: Thu, 26 Jan 2023 14:24:52 +0100 Subject: [PATCH 205/833] 98863: Domain validator fix + error message --- .../forgot-email.component.html | 2 +- .../forgot-email.component.ts | 3 ++- .../register-email-form.component.html | 7 +++++-- .../register-email-form.component.ts | 17 +++++++++++++++-- .../register-email.component.html | 2 +- .../register-email/register-email.component.ts | 3 ++- src/assets/i18n/en.json5 | 6 ++++-- 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/app/forgot-password/forgot-password-email/forgot-email.component.html b/src/app/forgot-password/forgot-password-email/forgot-email.component.html index 8be86f17ae..995108cdbc 100644 --- a/src/app/forgot-password/forgot-password-email/forgot-email.component.html +++ b/src/app/forgot-password/forgot-password-email/forgot-email.component.html @@ -1,3 +1,3 @@ + [MESSAGE_PREFIX]="'forgot-email.form'" [typeRequest]="typeRequest"> diff --git a/src/app/forgot-password/forgot-password-email/forgot-email.component.ts b/src/app/forgot-password/forgot-password-email/forgot-email.component.ts index af482bdb67..66a61ed7ee 100644 --- a/src/app/forgot-password/forgot-password-email/forgot-email.component.ts +++ b/src/app/forgot-password/forgot-password-email/forgot-email.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; +import { TYPE_REQUEST_FORGOT } from '../../register-email-form/register-email-form.component'; @Component({ selector: 'ds-forgot-email', @@ -9,5 +10,5 @@ import { Component } from '@angular/core'; * Component responsible the forgot password email step */ export class ForgotEmailComponent { - + typeRequest = TYPE_REQUEST_FORGOT; } diff --git a/src/app/register-email-form/register-email-form.component.html b/src/app/register-email-form/register-email-form.component.html index a1eb0cef98..8cc0d293cf 100644 --- a/src/app/register-email-form/register-email-form.component.html +++ b/src/app/register-email-form/register-email-form.component.html @@ -18,8 +18,11 @@ {{ MESSAGE_PREFIX + '.email.error.required' | translate }} - - {{ MESSAGE_PREFIX + '.email.error.pattern' | translate }} + + {{ MESSAGE_PREFIX + '.email.error.not-email-form' | translate }} + + + {{ MESSAGE_PREFIX + '.email.error.not-valid-domain' | translate: { domains: validMailDomains } }}

    diff --git a/src/app/register-email-form/register-email-form.component.ts b/src/app/register-email-form/register-email-form.component.ts index 9269a0cb2d..83053bd345 100644 --- a/src/app/register-email-form/register-email-form.component.ts +++ b/src/app/register-email-form/register-email-form.component.ts @@ -10,6 +10,9 @@ import {ConfigurationDataService} from '../core/data/configuration-data.service' import {getAllCompletedRemoteData} from '../core/shared/operators'; import { ConfigurationProperty } from '../core/shared/configuration-property.model'; +export const TYPE_REQUEST_FORGOT = 'forgot'; +export const TYPE_REQUEST_REGISTER = 'register'; + @Component({ selector: 'ds-register-email-form', templateUrl: './register-email-form.component.html' @@ -37,6 +40,15 @@ export class RegisterEmailFormComponent implements OnInit { typeRequest: string = null; validMailDomains: string[]; + TYPE_REQUEST_REGISTER = TYPE_REQUEST_REGISTER; + + captchaVersion(): Observable { + return this.googleRecaptchaService.captchaVersion(); + } + + captchaMode(): Observable { + return this.googleRecaptchaService.captchaMode(); + } constructor( private epersonRegistrationService: EpersonRegistrationService, @@ -51,6 +63,7 @@ export class RegisterEmailFormComponent implements OnInit { ngOnInit(): void { const validators: ValidatorFn[] = [ Validators.required, + Validators.email, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$') ]; this.form = this.formBuilder.group({ @@ -65,10 +78,10 @@ export class RegisterEmailFormComponent implements OnInit { if (remoteData.payload) { for (const remoteValue of remoteData.payload.values) { this.validMailDomains.push(remoteValue); - if (this.validMailDomains.length !== 0 && this.MESSAGE_PREFIX === 'register-page.registration') { + if (this.validMailDomains.length !== 0 && this.typeRequest === TYPE_REQUEST_REGISTER) { this.form.get('email').setValidators([ ...validators, - Validators.pattern(this.validMailDomains.map((domain: string) => '(^.*@' + domain.replace(new RegExp('\\.', 'g'), '\\.') + '$)').join('|')), + Validators.pattern(this.validMailDomains.map((domain: string) => '(^.*' + domain.replace(new RegExp('\\.', 'g'), '\\.') + '$)').join('|')), ]); this.form.updateValueAndValidity(); } diff --git a/src/app/register-page/register-email/register-email.component.html b/src/app/register-page/register-email/register-email.component.html index 80b6885272..1829bb2914 100644 --- a/src/app/register-page/register-email/register-email.component.html +++ b/src/app/register-page/register-email/register-email.component.html @@ -1,3 +1,3 @@ + [MESSAGE_PREFIX]="'register-page.registration'" [typeRequest]="typeRequest"> diff --git a/src/app/register-page/register-email/register-email.component.ts b/src/app/register-page/register-email/register-email.component.ts index 7b7b0f631b..228e8c56a0 100644 --- a/src/app/register-page/register-email/register-email.component.ts +++ b/src/app/register-page/register-email/register-email.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; +import { TYPE_REQUEST_REGISTER } from '../../register-email-form/register-email-form.component'; @Component({ selector: 'ds-register-email', @@ -9,5 +10,5 @@ import { Component } from '@angular/core'; * Component responsible the email registration step when registering as a new user */ export class RegisterEmailComponent { - + typeRequest = TYPE_REQUEST_REGISTER; } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 511d923f7d..7a011ecff5 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1406,7 +1406,7 @@ "forgot-email.form.email.error.required": "Please fill in an email address", - "forgot-email.form.email.error.pattern": "Please fill in a valid email address", + "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", "forgot-email.form.email.hint": "This address will be verified and used as your login name.", @@ -3013,7 +3013,9 @@ "register-page.registration.email.error.required": "Please fill in an email address", - "register-page.registration.email.error.pattern": "Please fill in a valid email address", + "register-page.registration.email.error.not-email-form": "Please fill in a valid email address. ", + + "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", "register-page.registration.email.hint": "This address will be verified and used as your login name.", From b4273fa734983b9b8c82748fefd62a5fd5793dfe Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 26 Jan 2023 15:41:45 +0100 Subject: [PATCH 206/833] 97425: Implement feedback --- .../system-wide-alert-banner.component.ts | 11 ++++-- .../system-wide-alert-form.component.html | 3 +- .../system-wide-alert-form.component.spec.ts | 36 ++++++++++++++++++- .../system-wide-alert-form.component.ts | 33 ++++++++++++++--- 4 files changed, 74 insertions(+), 9 deletions(-) diff --git a/src/app/system-wide-alert/alert-banner/system-wide-alert-banner.component.ts b/src/app/system-wide-alert/alert-banner/system-wide-alert-banner.component.ts index 57a9604f90..a19d2a7e41 100644 --- a/src/app/system-wide-alert/alert-banner/system-wide-alert-banner.component.ts +++ b/src/app/system-wide-alert/alert-banner/system-wide-alert-banner.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { SystemWideAlertDataService } from '../../core/data/system-wide-alert-data.service'; import { getAllSucceededRemoteDataPayload } from '../../core/shared/operators'; import { filter, map, switchMap } from 'rxjs/operators'; @@ -7,6 +7,7 @@ import { SystemWideAlert } from '../system-wide-alert.model'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; import { BehaviorSubject, EMPTY, interval, Subscription } from 'rxjs'; import { zonedTimeToUtc } from 'date-fns-tz'; +import { isPlatformBrowser } from '@angular/common'; /** * Component responsible for rendering a banner and the countdown for an active system-wide alert @@ -44,6 +45,7 @@ export class SystemWideAlertBannerComponent implements OnInit, OnDestroy { subscriptions: Subscription[] = []; constructor( + @Inject(PLATFORM_ID) protected platformId: Object, protected systemWideAlertDataService: SystemWideAlertDataService ) { } @@ -65,7 +67,12 @@ export class SystemWideAlertBannerComponent implements OnInit, OnDestroy { const timeDifference = date.getTime() - new Date().getTime(); if (timeDifference > 0) { this.allocateTimeUnits(timeDifference); - return interval(1000); + if (isPlatformBrowser(this.platformId)) { + return interval(1000); + } else { + return EMPTY; + } + } } // Reset the countDown times to 0 and return EMPTY to prevent unnecessary countdown calculations diff --git a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html index d6eeaf5046..169081e277 100644 --- a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html +++ b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.html @@ -7,7 +7,7 @@ + (change)="setActive($event)">
    @@ -44,6 +44,7 @@ placeholder="yyyy-mm-dd" name="dp" [(ngModel)]="date" + [minDate]="minDate" ngbDatepicker #d="ngbDatepicker" (ngModelChange)="updatePreviewTime()" diff --git a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts index 4fc79c1caa..505990b445 100644 --- a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts +++ b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.spec.ts @@ -149,8 +149,19 @@ describe('SystemWideAlertFormComponent', () => { }); }); + describe('setActive', () => { + it('should set whether the alert is active and save the current alert', () => { + spyOn(comp, 'save'); + spyOn(comp.formActive, 'patchValue'); + comp.setActive(true); + + expect(comp.formActive.patchValue).toHaveBeenCalledWith(true); + expect(comp.save).toHaveBeenCalledWith(false); + }); + }); + describe('save', () => { - it('should update the exising alert with the form values and show a success notification on success', () => { + it('should update the exising alert with the form values and show a success notification on success and navigate back', () => { spyOn(comp, 'back'); comp.currentAlert = systemWideAlert; @@ -173,6 +184,29 @@ describe('SystemWideAlertFormComponent', () => { expect(requestService.setStaleByHrefSubstring).toHaveBeenCalledWith('systemwidealerts'); expect(comp.back).toHaveBeenCalled(); }); + it('should update the exising alert with the form values and show a success notification on success and not navigate back when false is provided to the save method', () => { + spyOn(comp, 'back'); + comp.currentAlert = systemWideAlert; + + comp.formMessage.patchValue('New message'); + comp.formActive.patchValue(true); + comp.time = {hour: 4, minute: 26}; + comp.date = {year: 2023, month: 1, day: 25}; + + const expectedAlert = new SystemWideAlert(); + expectedAlert.alertId = systemWideAlert.alertId; + expectedAlert.message = 'New message'; + expectedAlert.active = true; + const countDownTo = new Date(2023, 0, 25, 4, 26); + expectedAlert.countdownTo = utcToZonedTime(countDownTo, 'UTC').toUTCString(); + + comp.save(false); + + expect(systemWideAlertDataService.put).toHaveBeenCalledWith(expectedAlert); + expect(notificationsService.success).toHaveBeenCalled(); + expect(requestService.setStaleByHrefSubstring).toHaveBeenCalledWith('systemwidealerts'); + expect(comp.back).not.toHaveBeenCalled(); + }); it('should update the exising alert with the form values but add an empty countdown date when disabled and show a success notification on success', () => { spyOn(comp, 'back'); comp.currentAlert = systemWideAlert; diff --git a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts index 6e0d2030fd..db517ef8cd 100644 --- a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts +++ b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts @@ -46,6 +46,11 @@ export class SystemWideAlertFormComponent implements OnInit { */ date: NgbDateStruct; + /** + * The minimum date for the countdown timer + */ + minDate: NgbDateStruct; + /** * Object to store the countdown time part */ @@ -90,6 +95,10 @@ export class SystemWideAlertFormComponent implements OnInit { ); this.createForm(); + const currentDate = new Date(); + this.minDate = {year: currentDate.getFullYear(), month: currentDate.getMonth() + 1, day: currentDate.getDate()}; + + this.systemWideAlert$.subscribe((alert) => { this.currentAlert = alert; this.initFormValues(alert); @@ -125,6 +134,16 @@ export class SystemWideAlertFormComponent implements OnInit { } + /** + * Set whether the system-wide alert is active + * Will also save the info in the current system-wide alert + * @param active + */ + setActive(active: boolean) { + this.formActive.patchValue(active); + this.save(false); + } + /** * Set whether the countdown timer is enabled or disabled. This will also update the counter in the preview * @param enabled - Whether the countdown timer is enabled or disabled. @@ -180,8 +199,10 @@ export class SystemWideAlertFormComponent implements OnInit { * Save the system-wide alert present in the form * When no alert is present yet on the server, a new one will be created * When one already exists, the existing one will be updated + * + * @param navigateToHomePage - Whether the user should be navigated back on successful save or not */ - save() { + save(navigateToHomePage = true) { const alert = new SystemWideAlert(); alert.message = this.formMessage.value; alert.active = this.formActive.value; @@ -193,20 +214,22 @@ export class SystemWideAlertFormComponent implements OnInit { } if (hasValue(this.currentAlert)) { const updatedAlert = Object.assign(new SystemWideAlert(), this.currentAlert, alert); - this.handleResponse(this.systemWideAlertDataService.put(updatedAlert), 'system-wide-alert.form.update'); + this.handleResponse(this.systemWideAlertDataService.put(updatedAlert), 'system-wide-alert.form.update', navigateToHomePage); } else { - this.handleResponse(this.systemWideAlertDataService.create(alert), 'system-wide-alert.form.create'); + this.handleResponse(this.systemWideAlertDataService.create(alert), 'system-wide-alert.form.create', navigateToHomePage); } } - private handleResponse(response$: Observable>, messagePrefix) { + private handleResponse(response$: Observable>, messagePrefix, navigateToHomePage: boolean) { response$.pipe( getFirstCompletedRemoteData() ).subscribe((response: RemoteData) => { if (response.hasSucceeded) { this.notificationsService.success(this.translateService.get(`${messagePrefix}.success`)); this.requestService.setStaleByHrefSubstring('systemwidealerts'); - this.back(); + if (navigateToHomePage) { + this.back(); + } } else { this.notificationsService.error(this.translateService.get(`${messagePrefix}.error`, response.errorMessage)); } From 81d21e25c226a18528ee1d1ba6e07f235add3ce5 Mon Sep 17 00:00:00 2001 From: Marie Verdonck Date: Thu, 26 Jan 2023 16:13:21 +0100 Subject: [PATCH 207/833] 98863: IT fix --- .../register-email-form/register-email-form.component.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/app/register-email-form/register-email-form.component.ts b/src/app/register-email-form/register-email-form.component.ts index 83053bd345..bb10aaed38 100644 --- a/src/app/register-email-form/register-email-form.component.ts +++ b/src/app/register-email-form/register-email-form.component.ts @@ -42,14 +42,6 @@ export class RegisterEmailFormComponent implements OnInit { validMailDomains: string[]; TYPE_REQUEST_REGISTER = TYPE_REQUEST_REGISTER; - captchaVersion(): Observable { - return this.googleRecaptchaService.captchaVersion(); - } - - captchaMode(): Observable { - return this.googleRecaptchaService.captchaMode(); - } - constructor( private epersonRegistrationService: EpersonRegistrationService, private notificationService: NotificationsService, From e717e610f963d10b464a0166d6cbc8d0c331e61c Mon Sep 17 00:00:00 2001 From: Koen Pauwels Date: Fri, 27 Jan 2023 11:03:18 +0100 Subject: [PATCH 208/833] 97732 Header buttons now behave consistently on hover --- .../context-help-toggle.component.scss | 2 +- src/app/header/header.component.scss | 2 +- src/app/search-navbar/search-navbar.component.scss | 3 --- .../shared/auth-nav-menu/auth-nav-menu.component.scss | 4 ++-- src/app/shared/lang-switch/lang-switch.component.scss | 10 ++++------ .../search-authority-filter.component.scss | 2 +- .../search-facet-option.component.scss | 2 +- .../search-facet-selected-option.component.scss | 2 +- 8 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/app/header/context-help-toggle/context-help-toggle.component.scss b/src/app/header/context-help-toggle/context-help-toggle.component.scss index af233dd7b5..a8c6100fae 100644 --- a/src/app/header/context-help-toggle/context-help-toggle.component.scss +++ b/src/app/header/context-help-toggle/context-help-toggle.component.scss @@ -2,7 +2,7 @@ color: var(--ds-header-icon-color); background-color: var(--ds-header-bg); - &:hover, &focus { + &:hover, &:focus { color: var(--ds-header-icon-color-hover); } } diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss index 922b2d02e1..546f6a06fa 100644 --- a/src/app/header/header.component.scss +++ b/src/app/header/header.component.scss @@ -15,7 +15,7 @@ a { color: var(--ds-header-icon-color); - &:hover, &focus { + &:hover, &:focus { color: var(--ds-header-icon-color-hover); } } diff --git a/src/app/search-navbar/search-navbar.component.scss b/src/app/search-navbar/search-navbar.component.scss index c1ccd289b2..125aa82f1f 100644 --- a/src/app/search-navbar/search-navbar.component.scss +++ b/src/app/search-navbar/search-navbar.component.scss @@ -22,8 +22,5 @@ a.submit-icon { width: 40vw !important; } - a.submit-icon { - color: var(--bs-link-color); - } } diff --git a/src/app/shared/auth-nav-menu/auth-nav-menu.component.scss b/src/app/shared/auth-nav-menu/auth-nav-menu.component.scss index ac51af27bf..36161ff3da 100644 --- a/src/app/shared/auth-nav-menu/auth-nav-menu.component.scss +++ b/src/app/shared/auth-nav-menu/auth-nav-menu.component.scss @@ -13,9 +13,9 @@ } .dropdown-toggle { - color: var(--ds-header-icon-color) !important; + color: var(--ds-header-icon-color); - &:hover, &focus { + &:hover, &:focus { color: var(--ds-header-icon-color-hover); } } diff --git a/src/app/shared/lang-switch/lang-switch.component.scss b/src/app/shared/lang-switch/lang-switch.component.scss index 6d79e6ab25..7b593a9bb5 100644 --- a/src/app/shared/lang-switch/lang-switch.component.scss +++ b/src/app/shared/lang-switch/lang-switch.component.scss @@ -2,12 +2,10 @@ display:none; } -@media screen and (min-width: map-get($grid-breakpoints, md)) { - .dropdown-toggle { - color: var(--ds-header-icon-color); +.dropdown-toggle { + color: var(--ds-header-icon-color); - &:hover, &focus { - color: var(--ds-header-icon-color-hover); - } + &:hover, &:focus { + color: var(--ds-header-icon-color-hover); } } diff --git a/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.scss b/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.scss index 8f61f5ebf1..9e01e19d02 100644 --- a/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.scss +++ b/src/app/shared/search/search-filters/search-filter/search-authority-filter/search-authority-filter.component.scss @@ -1,7 +1,7 @@ .filters { a { color: var(--bs-body-color); - &:hover, &focus { + &:hover, &:focus { text-decoration: none; } span.badge { diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.scss b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.scss index 74cede54a8..1211d2d478 100644 --- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.scss +++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-option/search-facet-option.component.scss @@ -1,6 +1,6 @@ a { color: var(--bs-body-color); - &:hover, &focus { + &:hover, &:focus { text-decoration: none; } span.badge { diff --git a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.scss b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.scss index 74cede54a8..1211d2d478 100644 --- a/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.scss +++ b/src/app/shared/search/search-filters/search-filter/search-facet-filter-options/search-facet-selected-option/search-facet-selected-option.component.scss @@ -1,6 +1,6 @@ a { color: var(--bs-body-color); - &:hover, &focus { + &:hover, &:focus { text-decoration: none; } span.badge { From bceca43580e2e10896e281079ecc3abf6ad43e6a Mon Sep 17 00:00:00 2001 From: Koen Pauwels Date: Fri, 27 Jan 2023 11:59:24 +0100 Subject: [PATCH 209/833] 97732 Context help toggle button only appears when there is at least one element with a tooltip on the page --- .../context-help-toggle.component.html | 10 ++++------ .../context-help-toggle.component.scss | 7 +------ .../context-help-toggle.component.spec.ts | 12 +++++------- .../context-help-toggle.component.ts | 15 +++++---------- src/app/shared/context-help.service.ts | 4 ++-- src/assets/i18n/en.json5 | 2 -- 6 files changed, 17 insertions(+), 33 deletions(-) diff --git a/src/app/header/context-help-toggle/context-help-toggle.component.html b/src/app/header/context-help-toggle/context-help-toggle.component.html index 523874d461..1ec2050497 100644 --- a/src/app/header/context-help-toggle/context-help-toggle.component.html +++ b/src/app/header/context-help-toggle/context-help-toggle.component.html @@ -1,12 +1,10 @@ -
    + diff --git a/src/app/header/context-help-toggle/context-help-toggle.component.scss b/src/app/header/context-help-toggle/context-help-toggle.component.scss index a8c6100fae..f3e5e01880 100644 --- a/src/app/header/context-help-toggle/context-help-toggle.component.scss +++ b/src/app/header/context-help-toggle/context-help-toggle.component.scss @@ -1,4 +1,4 @@ -.ds-context-help-toggle-enabled { +.ds-context-help-toggle { color: var(--ds-header-icon-color); background-color: var(--ds-header-bg); @@ -6,8 +6,3 @@ color: var(--ds-header-icon-color-hover); } } - -.ds-context-help-toggle-disabled { - color: grey; - background-color: var(--ds-header-bg); -} diff --git a/src/app/header/context-help-toggle/context-help-toggle.component.spec.ts b/src/app/header/context-help-toggle/context-help-toggle.component.spec.ts index 93421b58eb..2d1b5bad20 100644 --- a/src/app/header/context-help-toggle/context-help-toggle.component.spec.ts +++ b/src/app/header/context-help-toggle/context-help-toggle.component.spec.ts @@ -13,9 +13,9 @@ describe('ContextHelpToggleComponent', () => { beforeEach(async () => { contextHelpService = jasmine.createSpyObj('contextHelpService', [ - 'contextHelpEmpty$', 'toggleIcons' + 'tooltipCount$', 'toggleIcons' ]); - contextHelpService.contextHelpEmpty$.and.returnValue(observableOf(true)); + contextHelpService.tooltipCount$.and.returnValue(observableOf(0)); await TestBed.configureTestingModule({ declarations: [ ContextHelpToggleComponent ], providers: [ @@ -37,19 +37,17 @@ describe('ContextHelpToggleComponent', () => { }); describe('if there are no elements on the page with a tooltip', () => { - it('clicking the button does not toggle context help icon visibility', fakeAsync(() => { + it('the toggle should not be visible', fakeAsync(() => { fixture.detectChanges(); fixture.whenStable().then(() => { - fixture.debugElement.query(By.css('a')).nativeElement.click(); - tick(); - expect(contextHelpService.toggleIcons).toHaveBeenCalledTimes(0); + expect(fixture.debugElement.query(By.css('div'))).toBeNull(); }); })); }); describe('if there are elements on the page with a tooltip', () => { beforeEach(() => { - contextHelpService.contextHelpEmpty$.and.returnValue(observableOf(false)); + contextHelpService.tooltipCount$.and.returnValue(observableOf(1)); fixture.detectChanges(); }); diff --git a/src/app/header/context-help-toggle/context-help-toggle.component.ts b/src/app/header/context-help-toggle/context-help-toggle.component.ts index 7adaffa1c0..1bd6eb4b17 100644 --- a/src/app/header/context-help-toggle/context-help-toggle.component.ts +++ b/src/app/header/context-help-toggle/context-help-toggle.component.ts @@ -2,6 +2,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ContextHelpService } from '../../shared/context-help.service'; import { Observable, Subscription, BehaviorSubject } from 'rxjs'; import { combineLatest } from 'rxjs'; +import { map } from 'rxjs/operators'; /** * Renders a "context help toggle" button that toggles the visibility of tooltip buttons on the page. @@ -13,23 +14,17 @@ import { combineLatest } from 'rxjs'; styleUrls: ['./context-help-toggle.component.scss'] }) export class ContextHelpToggleComponent implements OnInit, OnDestroy { - buttonDisabled$: Observable; + buttonVisible$: Observable; constructor( private contextHelpService: ContextHelpService, ) { } - private clickEvents: BehaviorSubject = new BehaviorSubject(null); private subs: Subscription[]; ngOnInit(): void { - this.buttonDisabled$ = this.contextHelpService.contextHelpEmpty$(); - this.subs = [ - this.buttonDisabled$.subscribe(), - combineLatest([this.clickEvents, this.buttonDisabled$]) - .subscribe(([_, disabled]) => - disabled ? null : this.contextHelpService.toggleIcons()) - ]; + this.buttonVisible$ = this.contextHelpService.tooltipCount$().pipe(map(x => x > 0)); + this.subs = [this.buttonVisible$.subscribe()]; } ngOnDestroy() { @@ -37,6 +32,6 @@ export class ContextHelpToggleComponent implements OnInit, OnDestroy { } onClick() { - this.clickEvents.next(null); + this.contextHelpService.toggleIcons(); } } diff --git a/src/app/shared/context-help.service.ts b/src/app/shared/context-help.service.ts index 68f6cfd92c..f10f258be9 100644 --- a/src/app/shared/context-help.service.ts +++ b/src/app/shared/context-help.service.ts @@ -54,9 +54,9 @@ export class ContextHelpService { /** * Observable that yields true iff there are currently no context help entries in the store. */ - contextHelpEmpty$(): Observable { + tooltipCount$(): Observable { return this.store.pipe(select(allContextHelpSelector)) - .pipe(map((models: ContextHelpModels) => Object.keys(models).length === 0)); + .pipe(map((models: ContextHelpModels) => Object.keys(models).length)); } /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 5a8c27da0d..03596f2292 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2680,8 +2680,6 @@ "nav.context-help-toggle": "Toggle context help", - "nav.context-help-toggle-disabled": "No context help available on this page", - "nav.language": "Language switch", "nav.login": "Log In", From 1e85e1d88b2380751c9d420e2d835019fc1a3695 Mon Sep 17 00:00:00 2001 From: Koen Pauwels Date: Fri, 27 Jan 2023 12:30:42 +0100 Subject: [PATCH 210/833] 97732 Fix header search icon hover color --- src/app/search-navbar/search-navbar.component.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/search-navbar/search-navbar.component.scss b/src/app/search-navbar/search-navbar.component.scss index 125aa82f1f..40433fc619 100644 --- a/src/app/search-navbar/search-navbar.component.scss +++ b/src/app/search-navbar/search-navbar.component.scss @@ -14,6 +14,11 @@ a.submit-icon { cursor: pointer; position: sticky; top: 0; + + color: var(--ds-header-icon-color); + &:hover, &:focus { + color: var(--ds-header-icon-color-hover); + } } @media screen and (max-width: map-get($grid-breakpoints, md)) { From 8eab0f743f3769c97e9aebaefe78f5df94cefa90 Mon Sep 17 00:00:00 2001 From: cris Date: Sat, 28 Jan 2023 17:48:39 +0000 Subject: [PATCH 211/833] The collection is displayed in the workflow task --- ...-search-result-list-element.component.html | 1 + .../themed-item-list-preview.component.html | 16 +++++++ .../themed-item-list-preview.component.ts | 47 +++++++++++++++++-- ...-search-result-list-element.component.html | 1 + 4 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.html diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html index 5e98b00926..4584b12550 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html @@ -2,6 +2,7 @@
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.html b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.html new file mode 100644 index 0000000000..a5e4138a5f --- /dev/null +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.html @@ -0,0 +1,16 @@ +
    +
    +
    +
    + + {{"collection.listelement.badge" | translate}}: + +   + + {{collection.metadata["dc.title"][0]["value"]}} + +
    +
    +
    + +
    \ No newline at end of file diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts index 3fe825d236..4d81ff2fbb 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts @@ -1,9 +1,13 @@ -import { Component, Input } from '@angular/core'; +import { ChangeDetectorRef, Component, ComponentFactoryResolver, Input } from '@angular/core'; import { ThemedComponent } from '../../../theme-support/themed.component'; import { ItemListPreviewComponent } from './item-list-preview.component'; import { Item } from '../../../../core/shared/item.model'; import { MyDspaceItemStatusType } from '../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { SearchResult } from '../../../search/models/search-result.model'; +import { WorkflowItem } from 'src/app/core/submission/models/workflowitem.model'; +import { ThemeService } from 'src/app/shared/theme-support/theme.service'; +import { CollectionDataService } from 'src/app/core/data/collection-data.service'; +import { environment } from '../../../../../../src/environments/environment'; /** * Themed wrapper for ItemListPreviewComponent @@ -11,7 +15,7 @@ import { SearchResult } from '../../../search/models/search-result.model'; @Component({ selector: 'ds-themed-item-list-preview', styleUrls: [], - templateUrl: '../../../theme-support/themed.component.html', + templateUrl: 'themed-item-list-preview.component.html' }) export class ThemedItemListPreviewComponent extends ThemedComponent { protected inAndOutputNames: (keyof ItemListPreviewComponent & keyof this)[] = ['item', 'object', 'status', 'showSubmitter']; @@ -24,6 +28,43 @@ export class ThemedItemListPreviewComponent extends ThemedComponent { + this.collection = collection?.payload; + console.log("collection", this.collection) + }); + } protected getComponentName(): string { return 'ItemListPreviewComponent'; @@ -36,4 +77,4 @@ export class ThemedItemListPreviewComponent extends ThemedComponent { return import('./item-list-preview.component'); } -} +} \ No newline at end of file diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html index 4f0d6f774a..d863371446 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html @@ -2,6 +2,7 @@
    From 328b16c1e4d88c3ede9e6f1488f9ea9c47aa3f34 Mon Sep 17 00:00:00 2001 From: cris Date: Sat, 28 Jan 2023 17:58:51 +0000 Subject: [PATCH 212/833] formatting issues fixed --- .../themed-item-list-preview.component.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts index 4d81ff2fbb..54371a8ac8 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/item-list-preview/themed-item-list-preview.component.ts @@ -39,13 +39,13 @@ export class ThemedItemListPreviewComponent extends ThemedComponent { this.collection = collection?.payload; - console.log("collection", this.collection) }); } @@ -77,4 +76,4 @@ export class ThemedItemListPreviewComponent extends ThemedComponent { return import('./item-list-preview.component'); } -} \ No newline at end of file +} From 7574f828bad696246efbb5474295b80322e1f978 Mon Sep 17 00:00:00 2001 From: cris Date: Sat, 28 Jan 2023 18:23:33 +0000 Subject: [PATCH 213/833] adding space in es.json5 for pagination.showing.detail --- src/assets/i18n/es.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 02169514c4..671be41835 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -4238,7 +4238,7 @@ "pagination.showing.detail": "{{ range }} de {{ total }}", // "pagination.showing.label": "Now showing ", - "pagination.showing.label": "Mostrando", + "pagination.showing.label": "Mostrando ", // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Opciones de clasificación", From 53dfca0056e0c2ea5e5d0a6ab56355ac8bd773c6 Mon Sep 17 00:00:00 2001 From: cris Date: Mon, 30 Jan 2023 19:31:54 +0000 Subject: [PATCH 214/833] fixed issue #1190 with id 470077 --- .../item-operation/item-operation.component.html | 4 ++-- src/assets/i18n/ar.json5 | 8 ++++---- src/assets/i18n/bn.json5 | 6 +++--- src/assets/i18n/cs.json5 | 8 ++++---- src/assets/i18n/de.json5 | 8 ++++---- src/assets/i18n/en.json5 | 4 ++-- src/assets/i18n/es.json5 | 8 ++++---- src/assets/i18n/fi.json5 | 8 ++++---- src/assets/i18n/fr.json5 | 8 ++++---- src/assets/i18n/gd.json5 | 8 ++++---- src/assets/i18n/hu.json5 | 6 +++--- src/assets/i18n/ja.json5 | 8 ++++---- src/assets/i18n/kk.json5 | 8 ++++---- src/assets/i18n/lv.json5 | 6 +++--- src/assets/i18n/nl.json5 | 6 +++--- src/assets/i18n/pt-BR.json5 | 8 ++++---- src/assets/i18n/pt-PT.json5 | 8 ++++---- src/assets/i18n/sv.json5 | 8 ++++---- src/assets/i18n/sw.json5 | 8 ++++---- src/assets/i18n/tr.json5 | 6 +++--- src/assets/i18n/uk.json5 | 8 ++++---- 21 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-operation/item-operation.component.html b/src/app/item-page/edit-item-page/item-operation/item-operation.component.html index ecbc19aea8..85c6a2cca1 100644 --- a/src/app/item-page/edit-item-page/item-operation/item-operation.component.html +++ b/src/app/item-page/edit-item-page/item-operation/item-operation.component.html @@ -5,12 +5,12 @@
    - - diff --git a/src/assets/i18n/ar.json5 b/src/assets/i18n/ar.json5 index 58c8c61eb5..24e6e14603 100644 --- a/src/assets/i18n/ar.json5 +++ b/src/assets/i18n/ar.json5 @@ -3246,9 +3246,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Mover éste ítem a una colección distinta", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", // TODO New key - Add a translation @@ -3278,9 +3278,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Retirar éste ítem", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", // TODO New key - Add a translation diff --git a/src/assets/i18n/bn.json5 b/src/assets/i18n/bn.json5 index 8020ee7a96..55ec1820dd 100644 --- a/src/assets/i18n/bn.json5 +++ b/src/assets/i18n/bn.json5 @@ -2908,7 +2908,7 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "ম্যাপড সংগ্রহ পরিচালনা করুন", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "সরানো ...", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -2935,8 +2935,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "আপনি এই অ্যাকশন সঞ্চালন করার জন্য অনুমোদিত না", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "প্রত্যাহার ...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "এই আইটেম প্রত্যাহার করুন", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "সংগ্রহস্থল থেকে আইটেম প্রত্যাহার", diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index 12b67e54e2..a04e89b2c3 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -3186,9 +3186,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", // TODO New key - Add a translation @@ -3218,9 +3218,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", // TODO New key - Add a translation diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 80a6b5605a..c1979be6b6 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -2698,8 +2698,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gespiegelte Sammlungen bearbeiten", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Verschieben...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Verschieben Sie diesen Artikel in eine andere Sammlung", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Item in eine andere Sammlung verschieben", @@ -2722,8 +2722,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Item im Repositorium wiederherstellen", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Zurückziehen...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Ziehen Sie diesen Artikel zurück", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Item aus dem Repositorium zurückziehen", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index c66669a51f..f968ae2399 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2140,7 +2140,7 @@ "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -2158,7 +2158,7 @@ "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", - "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 02169514c4..054f66febc 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -3077,8 +3077,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Administrar colecciones mapeadas", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Mover...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Mover éste ítem a una colección diferente", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover ítem a otra colección", @@ -3104,8 +3104,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "No estás autorizado para realizar esta acción.", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Retirar éste ítem", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirar ítem del repositorio", diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index 1ef67e2a48..2a077006cc 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -2470,8 +2470,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Hallinnoi liitettyjä kokoelmia", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Siirrä...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Siirrä tämä kohde toiseen kokoelmaan", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Siirrä tietue toiseen kokoelmaan", @@ -2494,8 +2494,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Palauta tietue arkistoon", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Poista käytöstä...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "poista tämä kohde", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Poista tietue käytöstä", diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index fcfd70be70..381e13a743 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -2811,8 +2811,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gérer les collections associées", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Déplacer...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Déplacer cet élément vers une autre collection", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Déplacer l'Item dans une autre collection", @@ -2838,8 +2838,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Vous n'êtes pas autorisé à effectuer cette action", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirer...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Retirer cet article", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirer l'Item du dépôt", diff --git a/src/assets/i18n/gd.json5 b/src/assets/i18n/gd.json5 index e42bb239f2..083de54781 100644 --- a/src/assets/i18n/gd.json5 +++ b/src/assets/i18n/gd.json5 @@ -2892,8 +2892,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Manaids cruinneachaidhean mapaichte", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Gluais...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Helyezze át ezt az elemet egy másik gyűjteménybe", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Gluais nì gu cruinneachadh eile", @@ -2919,8 +2919,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Chan eil cead agad an gnìomh seo a dhèanamh", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Thoir air falbh...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Thoir air falbh", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Thoir nì air falbh bhon ionad-tasgaidh", diff --git a/src/assets/i18n/hu.json5 b/src/assets/i18n/hu.json5 index 8231f79652..0e73e9dbae 100644 --- a/src/assets/i18n/hu.json5 +++ b/src/assets/i18n/hu.json5 @@ -2481,7 +2481,7 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Térképezett gyűjtemények szervezése", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Elmozdítás...", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -2505,8 +2505,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Tárgy visszaállítása az adattárba", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Visszavonás...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Vedd vissza ezt az elemet", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Tárgy visszavonása az adattárból", diff --git a/src/assets/i18n/ja.json5 b/src/assets/i18n/ja.json5 index 58c8c61eb5..71b32cf70b 100644 --- a/src/assets/i18n/ja.json5 +++ b/src/assets/i18n/ja.json5 @@ -3246,9 +3246,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Verplaats dit item naar een andere collectie", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", // TODO New key - Add a translation @@ -3278,9 +3278,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", // TODO New key - Add a translation diff --git a/src/assets/i18n/kk.json5 b/src/assets/i18n/kk.json5 index 8e46ee73ce..b661ce21d3 100644 --- a/src/assets/i18n/kk.json5 +++ b/src/assets/i18n/kk.json5 @@ -3094,7 +3094,7 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Салыстырмалы коллекцияларды басқару", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Ысыру...", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -3121,11 +3121,11 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Сіз бұл әрекетті орындауға құқығыңыз жоқ", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Шегінуге...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "бұл тармақты алып тастаңыз", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", - "item.edit.tabs.status.buttons.withdraw.label": "Қоймадан тауарды алып қою", + "item.edit.tabs.status.buttons.withdraw.label": "Бұл элементті алып тастаңыз", // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", "item.edit.tabs.status.description": "Тауарларды басқару бетіне қош келдіңіз. Осы жерден элементті алып тастауға, қалпына келтіруге, жылжытуға немесе жоюға болады. Басқа қойындыларда жаңа метадеректерді / бит ағындарын жаңартуға немесе қосуға болады.", diff --git a/src/assets/i18n/lv.json5 b/src/assets/i18n/lv.json5 index 995d8175af..e00ad3517b 100644 --- a/src/assets/i18n/lv.json5 +++ b/src/assets/i18n/lv.json5 @@ -2672,7 +2672,7 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Pārvaldīt piesaistītās kolekcijas", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Pārvieto...", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -2696,8 +2696,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Atjaunot materiālu repozitorijā", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Atsaukt...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Izņemiet šo vienumu", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Izņemiet materiālu no repozitorijas", diff --git a/src/assets/i18n/nl.json5 b/src/assets/i18n/nl.json5 index fb66f769ae..b02e3a5276 100644 --- a/src/assets/i18n/nl.json5 +++ b/src/assets/i18n/nl.json5 @@ -2915,7 +2915,7 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Beheer gemapte collecties", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Verplaats ..", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -2939,8 +2939,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Zet het item terug in het repository", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Trek terug ...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "onttrek hierdie item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Trek het item terug uit het repository", diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index 77b06a6566..f68436d00b 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -2994,8 +2994,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Mover...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Mova este item para uma coleção diferente", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção", @@ -3021,8 +3021,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Você não está autorizado a realizar esta ação", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "retirar este item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório", diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c0327c4b54..b277e866c0 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -2676,8 +2676,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Mover...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Mova este item para uma coleção diferente", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção", @@ -2700,8 +2700,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "retirar este item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório", diff --git a/src/assets/i18n/sv.json5 b/src/assets/i18n/sv.json5 index 86a6b045cc..d04b95e144 100644 --- a/src/assets/i18n/sv.json5 +++ b/src/assets/i18n/sv.json5 @@ -2936,8 +2936,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Hantera mappade samlingar", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Flytta...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Flytta detta föremål till en annan samling", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Flytta post till en annan samling", @@ -2963,8 +2963,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Du saknar behörighet att utföra detta", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Återkalla...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "dra tillbaka den här artikeln", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Återkalla post från arkivet", diff --git a/src/assets/i18n/sw.json5 b/src/assets/i18n/sw.json5 index 58c8c61eb5..5e00b54599 100644 --- a/src/assets/i18n/sw.json5 +++ b/src/assets/i18n/sw.json5 @@ -3246,9 +3246,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Bu Öğeyi farklı bir Koleksiyona taşıyın", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", // TODO New key - Add a translation @@ -3278,9 +3278,9 @@ // TODO New key - Add a translation "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // TODO New key - Add a translation - "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", // TODO New key - Add a translation diff --git a/src/assets/i18n/tr.json5 b/src/assets/i18n/tr.json5 index 8eb0ce7e19..fff02c5967 100644 --- a/src/assets/i18n/tr.json5 +++ b/src/assets/i18n/tr.json5 @@ -2472,7 +2472,7 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Eşlenen koleksiyonları yönetin", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Taşınıyor...", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -2496,8 +2496,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Öğeyi depoya geri yükle", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Çıkar...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "bu öğeyi geri çek", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Depodan öğeyi çıkar", diff --git a/src/assets/i18n/uk.json5 b/src/assets/i18n/uk.json5 index b0413d9353..0ba5b0109a 100644 --- a/src/assets/i18n/uk.json5 +++ b/src/assets/i18n/uk.json5 @@ -2590,8 +2590,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Керувати прив'язаними зібраннями", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Перемістити...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Перемістити цей елемент до іншої колекції", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Перемістити документ до іншого зібрання", @@ -2614,8 +2614,8 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Відновити документ в репозиторій", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Вилучити...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "вилучити цей предмет", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Вилучити документ з репозиторію", From 14dfd6d9b855ff1acaf0138da2fe17d0ac1183bc Mon Sep 17 00:00:00 2001 From: cris Date: Mon, 30 Jan 2023 21:44:38 +0000 Subject: [PATCH 215/833] aria-selected added to item edit tab --- src/app/item-page/edit-item-page/edit-item-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/edit-item-page.component.html b/src/app/item-page/edit-item-page/edit-item-page.component.html index 9458df2249..6465026532 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.component.html +++ b/src/app/item-page/edit-item-page/edit-item-page.component.html @@ -4,7 +4,7 @@

    {{'item.edit.head' | translate}}

    diff --git a/src/app/item-page/full/full-item-page.component.html b/src/app/item-page/full/full-item-page.component.html index 60aa6d6f86..ee4ead2835 100644 --- a/src/app/item-page/full/full-item-page.component.html +++ b/src/app/item-page/full/full-item-page.component.html @@ -10,7 +10,6 @@
    -
    diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 806bd4baaf..5c3e5e77b0 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -15,7 +15,6 @@ [tooltipMsgCreate]="'item.page.version.create'" [tooltipMsgHasDraft]="'item.page.version.hasDraft'"> -
    From a4d94b0399ae28562bd6e0692770231504089e8c Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Fri, 3 Feb 2023 23:37:58 +0100 Subject: [PATCH 249/833] [CST-7757] Response parameters fixed; submit button disabled if frequency is missing --- .../subscriptions/models/subscription.model.ts | 8 ++++---- .../subscription-modal.component.html | 2 +- .../subscription-modal.component.ts | 12 ++++++++++++ .../subscriptions/subscriptions-data.service.ts | 4 ++-- .../subscriptions-page.component.html | 4 ++-- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/app/shared/subscriptions/models/subscription.model.ts b/src/app/shared/subscriptions/models/subscription.model.ts index 36e43ce996..b460a0418f 100644 --- a/src/app/shared/subscriptions/models/subscription.model.ts +++ b/src/app/shared/subscriptions/models/subscription.model.ts @@ -39,8 +39,8 @@ export class Subscription extends DSpaceObject { @deserialize _links: { self: HALLink; - ePerson: HALLink; - dSpaceObject: HALLink; + eperson: HALLink; + resource: HALLink; }; /** @@ -48,14 +48,14 @@ export class Subscription extends DSpaceObject { * Will be undefined unless the logo {@link HALLink} has been resolved. */ @link(EPERSON) - ePerson?: Observable>; + eperson?: Observable>; /** * The logo for this Community * Will be undefined unless the logo {@link HALLink} has been resolved. */ @link(DSPACE_OBJECT) - dSpaceObject?: Observable>; + resource?: Observable>; /** * The embedded ePerson & dSpaceObject for this Subscription */ diff --git a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html index f78567ee7b..156b8717f9 100644 --- a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html +++ b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html @@ -30,7 +30,7 @@ (click)="activeModal.close()"> {{'item.page.subscriptions.modal.close' | translate}} -
    +
    + + +
    diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index ba0200a892..27f461e7ea 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4621,6 +4621,14 @@ "subscriptions.table.action": "Action", + "subscriptions.table.edit": "Edit", + + "subscriptions.table.delete": "Delete", + + "subscriptions.table.not-available": "Not available", + + "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", From 1e20551d2a375a5b2abf602b9ba31edb263a310f Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Fri, 13 Jan 2023 17:54:39 +0100 Subject: [PATCH 326/833] Keep SSL sessions alive between xhr2 requests --- src/app/core/services/server-xhr.service.ts | 51 +++++++++++++++++++++ src/modules/app/server-app.module.ts | 6 +++ 2 files changed, 57 insertions(+) create mode 100644 src/app/core/services/server-xhr.service.ts diff --git a/src/app/core/services/server-xhr.service.ts b/src/app/core/services/server-xhr.service.ts new file mode 100644 index 0000000000..17e5162d43 --- /dev/null +++ b/src/app/core/services/server-xhr.service.ts @@ -0,0 +1,51 @@ +/** + * The contents of this file are subject to the license and copyright + * detailed in the LICENSE and NOTICE files at the root of the source + * tree and available online at + * + * http://www.dspace.org/license/ + */ + +import { XhrFactory } from '@angular/common'; +import { Injectable } from '@angular/core'; +import { Agent as HttpAgent, AgentOptions as HttpAgentOptions } from 'http'; +import { Agent as HttpsAgent } from 'https'; +import { XMLHttpRequest } from 'xhr2'; + +/** + * Allow HTTP sessions to be kept alive. + * Without this configuration, Angular re-connects to REST multiple times per SSR cycle. + * https://nodejs.org/api/http.html#new-agentoptions + */ +const agentOptions: HttpAgentOptions = { + keepAlive: true, + keepAliveMsecs: 60 * 1000, +}; + +// Agents need to be reused between requests, otherwise keep-alive doesn't help. +const httpAgent = new HttpAgent(agentOptions); +const httpsAgent = new HttpsAgent(agentOptions); + +/** + * Contructs the XMLHttpRequest instances used for all HttpClient requests. + * Emulated by https://github.com/pwnall/node-xhr2 on the server. + * This class overrides the built-in Angular implementation to set additional configuration. + * + * Note that this must be provided in ServerAppModule; + * it doesn't work when added as a Universal engine provider. + */ +@Injectable() +export class ServerXhrService implements XhrFactory { + build(): XMLHttpRequest { + const xhr = new XMLHttpRequest(); + + // This call is specific to xhr2 and will probably break if we use another library. + // https://github.com/pwnall/node-xhr2#features + (xhr as any).nodejsSet({ + httpAgent, + httpsAgent, + }); + + return xhr; + } +} diff --git a/src/modules/app/server-app.module.ts b/src/modules/app/server-app.module.ts index 01a5548948..6bb344a1cd 100644 --- a/src/modules/app/server-app.module.ts +++ b/src/modules/app/server-app.module.ts @@ -34,6 +34,8 @@ import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { ServerAuthRequestService } from '../../app/core/auth/server-auth-request.service'; import { CorrelationIdService } from '../../app/correlation-id/correlation-id.service'; import { AppConfig, APP_CONFIG_STATE } from '../../config/app-config.interface'; +import { XhrFactory } from '@angular/common'; +import { ServerXhrService } from '../../app/core/services/server-xhr.service'; import { environment } from '../../environments/environment'; @@ -121,6 +123,10 @@ export function createTranslateLoader() { provide: HardRedirectService, useClass: ServerHardRedirectService, }, + { + provide: XhrFactory, + useClass: ServerXhrService, + }, ] }) export class ServerAppModule { From 800d3a90019a51f45e7d1b6f6b899231bf7fbd86 Mon Sep 17 00:00:00 2001 From: corrado lombardi Date: Thu, 9 Feb 2023 15:31:03 +0100 Subject: [PATCH 327/833] [CST-7755] added cancel button to modal and updated message returned when a supervision order already exists --- .../supervision-group-selector.component.html | 17 +++++++++++------ .../supervision-group-selector.component.ts | 6 +++--- ...item-search-result-list-element.component.ts | 2 +- src/assets/i18n/en.json5 | 4 ++++ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.html b/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.html index f6a5c339ce..c6d45c8743 100644 --- a/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.html +++ b/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.html @@ -30,11 +30,16 @@ (select)="updateGroupObjectSelected($event)">
    -
    - + +
    -
    \ No newline at end of file +
    diff --git a/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts index 1ae2d496d2..88ffb13070 100644 --- a/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts @@ -79,13 +79,13 @@ export class SupervisionGroupSelectorComponent { if (rd.state === 'Success') { this.supervisionOrderDataService.searchByItem(this.itemUUID, null, null, followLink('group')); this.notificationsService.success(this.translateService.get('supervision-group-selector.notification.create.success.title', { name: this.selectedGroup.name })); + this.close(); } else { this.notificationsService.error( - this.translateService.get('supervision-group-selector.notification.create.failure.title'), - rd.errorMessage); + this.translateService.get('supervision-group-selector.notification.create.failure.title'), + rd.statusCode == 422 ? this.translateService.get('supervision-group-selector.notification.create.already-existing') : rd.errorMessage); } }); - this.close(); } } diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts index 41afab0ab8..2fa72d2ac0 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts @@ -100,7 +100,7 @@ export class ItemSearchResultListElementComponent extends SearchResultListElemen ).pipe( getAllSucceededRemoteData(), ).subscribe((result) => { - this.supervisionOrder$ = this.supervisionOrderDataService.searchByItem(this.dso.uuid, null, null, followLink('group')).pipe( + this.supervisionOrder$ = this.supervisionOrderDataService.searchByItem(this.dso.uuid, false, true, followLink('group')).pipe( getAllSucceededRemoteListPayload(), switchMap((supervisionOrders: SupervisionOrder[]) => { const supervisionOrdersArray = supervisionOrders.map((supervisionOrder: SupervisionOrder) => { diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0251f171b7..47fbbaf518 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1443,6 +1443,8 @@ "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.save": "Save", "supervision-group-selector.select.type-of-order.error": "Please select a type of order", @@ -1453,6 +1455,8 @@ "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.info": "Are you sure you want to export metadata for {{ dsoName }}", From 52cd98a7d3a41891b407971dba6fe529f9dc22b3 Mon Sep 17 00:00:00 2001 From: corrado lombardi Date: Thu, 9 Feb 2023 15:39:13 +0100 Subject: [PATCH 328/833] [CST-7755] lint fix --- .../supervision-group-selector.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts index 88ffb13070..da22fe0d44 100644 --- a/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component.ts @@ -83,7 +83,7 @@ export class SupervisionGroupSelectorComponent { } else { this.notificationsService.error( this.translateService.get('supervision-group-selector.notification.create.failure.title'), - rd.statusCode == 422 ? this.translateService.get('supervision-group-selector.notification.create.already-existing') : rd.errorMessage); + rd.statusCode === 422 ? this.translateService.get('supervision-group-selector.notification.create.already-existing') : rd.errorMessage); } }); } From 9e11d69a8ade6fae07676d49f6a2cb4697705107 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 9 Feb 2023 08:48:50 -0600 Subject: [PATCH 329/833] Fix bug where allowStale couldn't be disabled --- server.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.ts b/server.ts index 478a4c0ec1..ba0c8fd7b2 100644 --- a/server.ts +++ b/server.ts @@ -324,7 +324,7 @@ function initCache() { botCache = new LRU( { max: environment.cache.serverSide.botCache.max, ttl: environment.cache.serverSide.botCache.timeToLive || 24 * 60 * 60 * 1000, // 1 day - allowStale: environment.cache.serverSide.botCache.allowStale || true // if object is stale, return stale value before deleting + allowStale: environment.cache.serverSide.botCache.allowStale ?? true // if object is stale, return stale value before deleting }); } @@ -335,7 +335,7 @@ function initCache() { anonymousCache = new LRU( { max: environment.cache.serverSide.anonymousCache.max, ttl: environment.cache.serverSide.anonymousCache.timeToLive || 10 * 1000, // 10 seconds - allowStale: environment.cache.serverSide.anonymousCache.allowStale || true // if object is stale, return stale value before deleting + allowStale: environment.cache.serverSide.anonymousCache.allowStale ?? true // if object is stale, return stale value before deleting }); } } From ac06f30950ee2f9cdb05a08a53019c48abaf5a2e Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 9 Feb 2023 17:19:07 +0100 Subject: [PATCH 330/833] 99053: Removed ngx-bootstrap dependency --- package.json | 1 - ...nced-workflow-action-rating.component.html | 10 +- ...d-workflow-action-rating.component.spec.ts | 4 +- .../workflowitems-edit-page.module.ts | 4 +- yarn.lock | 30393 ++++++++-------- 5 files changed, 15203 insertions(+), 15209 deletions(-) diff --git a/package.json b/package.json index 71b744fe77..278afdf6c3 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "ng-mocks": "11.11.2", "ng2-file-upload": "1.4.0", "ng2-nouislider": "^1.8.3", - "ngx-bootstrap": "7.1.2", "ngx-infinite-scroll": "^10.0.1", "ngx-moment": "^5.0.0", "ngx-pagination": "5.0.0", diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.html b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.html index ac0cdac1cc..aca9b4da73 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.html +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.html @@ -21,12 +21,14 @@
    -
    diff --git a/src/app/shared/form/chips/chips.component.spec.ts b/src/app/shared/form/chips/chips.component.spec.ts index 2b8a469bd1..050950ed4d 100644 --- a/src/app/shared/form/chips/chips.component.spec.ts +++ b/src/app/shared/form/chips/chips.component.spec.ts @@ -122,7 +122,7 @@ describe('ChipsComponent test suite', () => { })); it('should save chips item index when drag and drop start', fakeAsync(() => { - const de = chipsFixture.debugElement.query(By.css('li.nav-item')); + const de = chipsFixture.debugElement.query(By.css('div.nav-item')); de.triggerEventHandler('dragstart', null); @@ -131,7 +131,7 @@ describe('ChipsComponent test suite', () => { it('should update chips item order when drag and drop end', fakeAsync(() => { spyOn(chipsComp.chips, 'updateOrder'); - const de = chipsFixture.debugElement.query(By.css('li.nav-item')); + const de = chipsFixture.debugElement.query(By.css('div.nav-item')); de.triggerEventHandler('dragend', null); @@ -158,7 +158,7 @@ describe('ChipsComponent test suite', () => { }); it('should show icon for every field that has a configured icon', () => { - const de = chipsFixture.debugElement.query(By.css('li.nav-item')); + const de = chipsFixture.debugElement.query(By.css('div.nav-item')); const icons = de.queryAll(By.css('i.fas')); expect(icons.length).toBe(4); @@ -166,7 +166,7 @@ describe('ChipsComponent test suite', () => { }); it('should show tooltip on mouse over an icon', () => { - const de = chipsFixture.debugElement.query(By.css('li.nav-item')); + const de = chipsFixture.debugElement.query(By.css('div.nav-item')); const icons = de.queryAll(By.css('i.fas')); icons[0].triggerEventHandler('mouseover', null); From e1beb615252973fceb8d48d12a77b83e94a2a057 Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 9 Feb 2023 21:44:02 +0000 Subject: [PATCH 332/833] ul and li in dropdwon collection in submissions form --- .../collection-dropdown.component.html | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/shared/collection-dropdown/collection-dropdown.component.html b/src/app/shared/collection-dropdown/collection-dropdown.component.html index db6c1fb41d..470291373f 100644 --- a/src/app/shared/collection-dropdown/collection-dropdown.component.html +++ b/src/app/shared/collection-dropdown/collection-dropdown.component.html @@ -7,7 +7,7 @@ #searchFieldEl>
    -
    - + - +
    +
    {{ listItem.collection.name}}
    +
    + -
    + From 19d0975df517ed9e49f8770ca2d828a46311ba1e Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 10 Feb 2023 12:21:33 +0100 Subject: [PATCH 333/833] 99053: Fixed encoded parameters being encoded twice in WorkflowItemActionPageComponent.previousPage() --- .../workflow-item-action-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts index 0f6a222d85..276b2054fe 100644 --- a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts +++ b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts @@ -78,7 +78,7 @@ export abstract class WorkflowItemActionPageComponent implements OnInit { const params: Params = {}; if (url.split('?').length > 1) { for (const param of url.split('?')[1].split('&')) { - params[param.split('=')[0]] = param.split('=')[1]; + params[param.split('=')[0]] = decodeURIComponent(param.split('=')[1]); } } void this.router.navigate([url.split('?')[0]], { queryParams: params }); From 99f9f592a0223a523887cf48cc6d4dfbcade99b0 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 10 Feb 2023 12:50:36 +0100 Subject: [PATCH 334/833] 99053: Passed previousSearchQuery to AdvancedWorkflowActionSelectReviewerComponent --- ...claimed-task-actions-abstract.component.ts | 16 +++++++--- ...k-action-select-reviewer.component.spec.ts | 24 ++++++++++++++- ...d-task-action-select-reviewer.component.ts | 12 +++++++- src/app/shared/testing/active-router.stub.ts | 3 +- ...w-action-select-reviewer.component.spec.ts | 29 +++++++++++++++---- ...rkflow-action-select-reviewer.component.ts | 13 +++++++-- 6 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts index 06d51d67a3..32d9a230eb 100644 --- a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts @@ -3,6 +3,7 @@ import { ClaimedTaskActionsAbstractComponent } from './claimed-task-actions-abst import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { getAdvancedWorkflowRoute } from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; +import { Params } from '@angular/router'; /** * Abstract component for rendering an advanced claimed task's action @@ -47,11 +48,18 @@ export abstract class AdvancedClaimedTaskActionsAbstractComponent extends Claime */ openAdvancedClaimedTaskTab(): void { void this.router.navigate([this.workflowTaskPageRoute], { - queryParams: { - workflow: this.workflowType, - claimedTask: this.object.id, - }, + queryParams: this.getQueryParams(), }); } + /** + * The {@link Params} that need to be given to the workflow page. + */ + getQueryParams(): Params { + return { + workflow: this.workflowType, + claimedTask: this.object.id, + }; + } + } diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts index db670e3cdc..60f47a60b8 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedClaimedTaskActionSelectReviewerComponent } from './advanced-claimed-task-action-select-reviewer.component'; -import { Router } from '@angular/router'; +import { Router, ActivatedRoute } from '@angular/router'; import { RouterStub } from '../../../testing/router.stub'; import { NotificationsServiceStub } from '../../../testing/notifications-service.stub'; import { NotificationsService } from '../../../notifications/notifications.service'; @@ -22,6 +22,7 @@ import { } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { of as observableOf } from 'rxjs'; +import { ActivatedRouteStub } from '../../../testing/active-router.stub'; const taskId = 'claimed-task-1'; const workflowId = 'workflow-1'; @@ -36,12 +37,14 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { let component: AdvancedClaimedTaskActionSelectReviewerComponent; let fixture: ComponentFixture; + let route: ActivatedRouteStub; let claimedTaskDataService: ClaimedTaskDataServiceStub; let notificationService: NotificationsServiceStub; let router: RouterStub; let searchService: SearchServiceStub; beforeEach(async () => { + route = new ActivatedRouteStub(); claimedTaskDataService = new ClaimedTaskDataServiceStub(); notificationService = new NotificationsServiceStub(); router = new RouterStub(); @@ -56,6 +59,7 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { NgbTooltip, ], providers: [ + { provide: ActivatedRoute, useValue: route }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, { provide: NotificationsService, useValue: notificationService }, { provide: RequestService, useValue: {} }, @@ -95,4 +99,22 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { }, }); }); + + it('should navigate to the advanced workflow page with a previousSearchQuery when clicked anq a query is defined', () => { + spyOnProperty(route, 'snapshot').and.returnValue({ + queryParams: { + query: 'Thor%20Love%20and%20Thunder', + } + }); + component.workflowTaskPageRoute = `/workflowitems/${workflowId}/advanced`; + fixture.debugElement.query(By.css('.selectReviewerAction')).nativeElement.click(); + + expect(router.navigate).toHaveBeenCalledWith([`/workflowitems/${workflowId}/advanced`], { + queryParams: { + workflow: ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, + claimedTask: taskId, + previousSearchQuery: 'Thor%20Love%20and%20Thunder', + }, + }); + }); }); diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts index 7473c737d9..2331a8bd7f 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts @@ -3,7 +3,7 @@ import { rendersWorkflowTaskOption } from '../switcher/claimed-task-actions-deco import { AdvancedClaimedTaskActionsAbstractComponent } from '../abstract/advanced-claimed-task-actions-abstract.component'; -import { Router } from '@angular/router'; +import { Router, Params, ActivatedRoute } from '@angular/router'; import { NotificationsService } from '../../../notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; @@ -12,6 +12,7 @@ import { ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; +import { hasValue } from '../../../empty.util'; /** * Advanced Workflow button that redirect to the {@link AdvancedWorkflowActionSelectReviewerComponent} @@ -38,8 +39,17 @@ export class AdvancedClaimedTaskActionSelectReviewerComponent extends AdvancedCl protected translate: TranslateService, protected searchService: SearchService, protected requestService: RequestService, + protected route: ActivatedRoute, ) { super(injector, router, notificationsService, translate, searchService, requestService); } + getQueryParams(): Params { + const params: Params = super.getQueryParams(); + if (hasValue(this.route.snapshot.queryParams.query)) { + params.previousSearchQuery = this.route.snapshot.queryParams.query; + } + return params; + } + } diff --git a/src/app/shared/testing/active-router.stub.ts b/src/app/shared/testing/active-router.stub.ts index aa4bfce438..86d92a2fb8 100644 --- a/src/app/shared/testing/active-router.stub.ts +++ b/src/app/shared/testing/active-router.stub.ts @@ -54,7 +54,8 @@ export class ActivatedRouteStub { get snapshot() { return { params: this.testParams, - queryParamMap: convertToParamMap(this.testParams) + queryParamMap: convertToParamMap(this.testParams), + queryParams: {} as Params, }; } } diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts index 2884dbcc8e..42d6874899 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts @@ -1,12 +1,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedWorkflowActionSelectReviewerComponent, - ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER + ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER, } from './advanced-workflow-action-select-reviewer.component'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; -import { RouterTestingModule } from '@angular/router/testing'; import { WorkflowActionDataServiceStub } from '../../../shared/testing/workflow-action-data-service.stub'; import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; import { RouteService } from '../../../core/services/route.service'; @@ -25,6 +24,7 @@ import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-res import { NO_ERRORS_SCHEMA } from '@angular/core'; import { RequestService } from '../../../core/data/request.service'; import { RequestServiceStub } from '../../../shared/testing/request-service.stub'; +import { RouterStub } from '../../../shared/testing/router.stub'; const claimedTaskId = '2'; const workflowId = '1'; @@ -37,18 +37,19 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { let claimedTaskDataService: ClaimedTaskDataServiceStub; let notificationService: NotificationsServiceStub; + let router: RouterStub; let workflowActionDataService: WorkflowItemDataServiceStub; let workflowItemDataService: WorkflowItemDataServiceStub; beforeEach(async () => { claimedTaskDataService = new ClaimedTaskDataServiceStub(); notificationService = new NotificationsServiceStub(); + router = new RouterStub(); workflowActionDataService = new WorkflowActionDataServiceStub(); workflowItemDataService = new WorkflowItemDataServiceStub(); await TestBed.configureTestingModule({ imports: [ - RouterTestingModule, TranslateModule.forRoot(), ], declarations: [ @@ -66,10 +67,12 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { queryParams: { claimedTask: claimedTaskId, workflow: 'testaction', + previousSearchQuery: 'Thor%20Love%20and%20Thunder', }, }, }, }, + { provide: Router, useValue: router }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, { provide: NotificationsService, useValue: notificationService }, { provide: RouteService, useValue: routeServiceStub }, @@ -85,14 +88,30 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { fixture = TestBed.createComponent(AdvancedWorkflowActionSelectReviewerComponent); component = fixture.componentInstance; fixture.detectChanges(); - spyOn(component, 'previousPage'); }); afterEach(() => { fixture.debugElement.nativeElement.remove(); }); + describe('previousPage', () => { + it('should navigate back to the Workflow tasks page with the previous query', () => { + component.previousPage(); + + expect(router.navigate).toHaveBeenCalledWith(['/mydspace'], { + queryParams: { + configuration: 'workflow', + query: 'Thor Love and Thunder', + }, + }); + }); + }); + describe('performAction', () => { + beforeEach(() => { + spyOn(component, 'previousPage'); + }); + it('should call the claimedTaskDataService with the list of selected ePersons', () => { spyOn(claimedTaskDataService, 'submitTask').and.returnValue(observableOf(new ProcessTaskResponse(true))); component.selectedReviewers = [EPersonMock, EPersonMock2]; diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts index b9f90e1736..54eb87f2cd 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts @@ -12,7 +12,7 @@ import { } from '../../../access-control/group-registry/group-form/members-list/members-list.component'; import { Subscription } from 'rxjs'; import { EPerson } from '../../../core/eperson/models/eperson.model'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, Params, Router } from '@angular/router'; import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; import { RouteService } from '../../../core/services/route.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; @@ -20,7 +20,8 @@ import { TranslateService } from '@ngx-translate/core'; import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service'; import { ReviewersListComponent } from './reviewers-list/reviewers-list.component'; -import { RequestService } from 'src/app/core/data/request.service'; +import { RequestService } from '../../../core/data/request.service'; +import { hasValue } from '../../../shared/empty.util'; export const ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER = 'submit_select_reviewer'; export const ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER = 'selectrevieweraction'; @@ -138,7 +139,13 @@ export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkf * switching between the different pages */ previousPage(): void { - void this.router.navigate(['/mydspace'], { queryParams: { configuration: 'workflow' } }); + const queryParams: Params = { + configuration: 'workflow', + }; + if (hasValue(this.route.snapshot.queryParams.previousSearchQuery)) { + queryParams.query = decodeURIComponent(this.route.snapshot.queryParams.previousSearchQuery); + } + void this.router.navigate(['/mydspace'], { queryParams: queryParams }); } } From f0ceb645c75d54e21f9705939caabbc920dfe118 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 10 Feb 2023 12:50:36 +0100 Subject: [PATCH 335/833] 99053: Passed previousSearchQuery to AdvancedWorkflowActionSelectReviewerComponent --- ...claimed-task-actions-abstract.component.ts | 16 +++++++--- ...k-action-select-reviewer.component.spec.ts | 24 ++++++++++++++- ...d-task-action-select-reviewer.component.ts | 12 +++++++- src/app/shared/testing/active-router.stub.ts | 3 +- ...w-action-select-reviewer.component.spec.ts | 29 +++++++++++++++---- ...rkflow-action-select-reviewer.component.ts | 14 ++++++--- 6 files changed, 82 insertions(+), 16 deletions(-) diff --git a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts index 06d51d67a3..32d9a230eb 100644 --- a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts @@ -3,6 +3,7 @@ import { ClaimedTaskActionsAbstractComponent } from './claimed-task-actions-abst import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { getAdvancedWorkflowRoute } from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; +import { Params } from '@angular/router'; /** * Abstract component for rendering an advanced claimed task's action @@ -47,11 +48,18 @@ export abstract class AdvancedClaimedTaskActionsAbstractComponent extends Claime */ openAdvancedClaimedTaskTab(): void { void this.router.navigate([this.workflowTaskPageRoute], { - queryParams: { - workflow: this.workflowType, - claimedTask: this.object.id, - }, + queryParams: this.getQueryParams(), }); } + /** + * The {@link Params} that need to be given to the workflow page. + */ + getQueryParams(): Params { + return { + workflow: this.workflowType, + claimedTask: this.object.id, + }; + } + } diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts index db670e3cdc..60f47a60b8 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedClaimedTaskActionSelectReviewerComponent } from './advanced-claimed-task-action-select-reviewer.component'; -import { Router } from '@angular/router'; +import { Router, ActivatedRoute } from '@angular/router'; import { RouterStub } from '../../../testing/router.stub'; import { NotificationsServiceStub } from '../../../testing/notifications-service.stub'; import { NotificationsService } from '../../../notifications/notifications.service'; @@ -22,6 +22,7 @@ import { } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { of as observableOf } from 'rxjs'; +import { ActivatedRouteStub } from '../../../testing/active-router.stub'; const taskId = 'claimed-task-1'; const workflowId = 'workflow-1'; @@ -36,12 +37,14 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { let component: AdvancedClaimedTaskActionSelectReviewerComponent; let fixture: ComponentFixture; + let route: ActivatedRouteStub; let claimedTaskDataService: ClaimedTaskDataServiceStub; let notificationService: NotificationsServiceStub; let router: RouterStub; let searchService: SearchServiceStub; beforeEach(async () => { + route = new ActivatedRouteStub(); claimedTaskDataService = new ClaimedTaskDataServiceStub(); notificationService = new NotificationsServiceStub(); router = new RouterStub(); @@ -56,6 +59,7 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { NgbTooltip, ], providers: [ + { provide: ActivatedRoute, useValue: route }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, { provide: NotificationsService, useValue: notificationService }, { provide: RequestService, useValue: {} }, @@ -95,4 +99,22 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { }, }); }); + + it('should navigate to the advanced workflow page with a previousSearchQuery when clicked anq a query is defined', () => { + spyOnProperty(route, 'snapshot').and.returnValue({ + queryParams: { + query: 'Thor%20Love%20and%20Thunder', + } + }); + component.workflowTaskPageRoute = `/workflowitems/${workflowId}/advanced`; + fixture.debugElement.query(By.css('.selectReviewerAction')).nativeElement.click(); + + expect(router.navigate).toHaveBeenCalledWith([`/workflowitems/${workflowId}/advanced`], { + queryParams: { + workflow: ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, + claimedTask: taskId, + previousSearchQuery: 'Thor%20Love%20and%20Thunder', + }, + }); + }); }); diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts index 7473c737d9..2331a8bd7f 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts @@ -3,7 +3,7 @@ import { rendersWorkflowTaskOption } from '../switcher/claimed-task-actions-deco import { AdvancedClaimedTaskActionsAbstractComponent } from '../abstract/advanced-claimed-task-actions-abstract.component'; -import { Router } from '@angular/router'; +import { Router, Params, ActivatedRoute } from '@angular/router'; import { NotificationsService } from '../../../notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; @@ -12,6 +12,7 @@ import { ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; +import { hasValue } from '../../../empty.util'; /** * Advanced Workflow button that redirect to the {@link AdvancedWorkflowActionSelectReviewerComponent} @@ -38,8 +39,17 @@ export class AdvancedClaimedTaskActionSelectReviewerComponent extends AdvancedCl protected translate: TranslateService, protected searchService: SearchService, protected requestService: RequestService, + protected route: ActivatedRoute, ) { super(injector, router, notificationsService, translate, searchService, requestService); } + getQueryParams(): Params { + const params: Params = super.getQueryParams(); + if (hasValue(this.route.snapshot.queryParams.query)) { + params.previousSearchQuery = this.route.snapshot.queryParams.query; + } + return params; + } + } diff --git a/src/app/shared/testing/active-router.stub.ts b/src/app/shared/testing/active-router.stub.ts index aa4bfce438..86d92a2fb8 100644 --- a/src/app/shared/testing/active-router.stub.ts +++ b/src/app/shared/testing/active-router.stub.ts @@ -54,7 +54,8 @@ export class ActivatedRouteStub { get snapshot() { return { params: this.testParams, - queryParamMap: convertToParamMap(this.testParams) + queryParamMap: convertToParamMap(this.testParams), + queryParams: {} as Params, }; } } diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts index 2884dbcc8e..42d6874899 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts @@ -1,12 +1,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AdvancedWorkflowActionSelectReviewerComponent, - ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER + ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER, } from './advanced-workflow-action-select-reviewer.component'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; -import { RouterTestingModule } from '@angular/router/testing'; import { WorkflowActionDataServiceStub } from '../../../shared/testing/workflow-action-data-service.stub'; import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; import { RouteService } from '../../../core/services/route.service'; @@ -25,6 +24,7 @@ import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-res import { NO_ERRORS_SCHEMA } from '@angular/core'; import { RequestService } from '../../../core/data/request.service'; import { RequestServiceStub } from '../../../shared/testing/request-service.stub'; +import { RouterStub } from '../../../shared/testing/router.stub'; const claimedTaskId = '2'; const workflowId = '1'; @@ -37,18 +37,19 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { let claimedTaskDataService: ClaimedTaskDataServiceStub; let notificationService: NotificationsServiceStub; + let router: RouterStub; let workflowActionDataService: WorkflowItemDataServiceStub; let workflowItemDataService: WorkflowItemDataServiceStub; beforeEach(async () => { claimedTaskDataService = new ClaimedTaskDataServiceStub(); notificationService = new NotificationsServiceStub(); + router = new RouterStub(); workflowActionDataService = new WorkflowActionDataServiceStub(); workflowItemDataService = new WorkflowItemDataServiceStub(); await TestBed.configureTestingModule({ imports: [ - RouterTestingModule, TranslateModule.forRoot(), ], declarations: [ @@ -66,10 +67,12 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { queryParams: { claimedTask: claimedTaskId, workflow: 'testaction', + previousSearchQuery: 'Thor%20Love%20and%20Thunder', }, }, }, }, + { provide: Router, useValue: router }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, { provide: NotificationsService, useValue: notificationService }, { provide: RouteService, useValue: routeServiceStub }, @@ -85,14 +88,30 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { fixture = TestBed.createComponent(AdvancedWorkflowActionSelectReviewerComponent); component = fixture.componentInstance; fixture.detectChanges(); - spyOn(component, 'previousPage'); }); afterEach(() => { fixture.debugElement.nativeElement.remove(); }); + describe('previousPage', () => { + it('should navigate back to the Workflow tasks page with the previous query', () => { + component.previousPage(); + + expect(router.navigate).toHaveBeenCalledWith(['/mydspace'], { + queryParams: { + configuration: 'workflow', + query: 'Thor Love and Thunder', + }, + }); + }); + }); + describe('performAction', () => { + beforeEach(() => { + spyOn(component, 'previousPage'); + }); + it('should call the claimedTaskDataService with the list of selected ePersons', () => { spyOn(claimedTaskDataService, 'submitTask').and.returnValue(observableOf(new ProcessTaskResponse(true))); component.selectedReviewers = [EPersonMock, EPersonMock2]; diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts index b9f90e1736..226ddccf4c 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts @@ -12,15 +12,15 @@ import { } from '../../../access-control/group-registry/group-form/members-list/members-list.component'; import { Subscription } from 'rxjs'; import { EPerson } from '../../../core/eperson/models/eperson.model'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, Params, Router } from '@angular/router'; import { WorkflowItemDataService } from '../../../core/submission/workflowitem-data.service'; import { RouteService } from '../../../core/services/route.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.service'; -import { ReviewersListComponent } from './reviewers-list/reviewers-list.component'; -import { RequestService } from 'src/app/core/data/request.service'; +import { RequestService } from '../../../core/data/request.service'; +import { hasValue } from '../../../shared/empty.util'; export const ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER = 'submit_select_reviewer'; export const ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER = 'selectrevieweraction'; @@ -138,7 +138,13 @@ export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkf * switching between the different pages */ previousPage(): void { - void this.router.navigate(['/mydspace'], { queryParams: { configuration: 'workflow' } }); + const queryParams: Params = { + configuration: 'workflow', + }; + if (hasValue(this.route.snapshot.queryParams.previousSearchQuery)) { + queryParams.query = decodeURIComponent(this.route.snapshot.queryParams.previousSearchQuery); + } + void this.router.navigate(['/mydspace'], { queryParams: queryParams }); } } From 356962a571663a425916397334e807fe95bbc05a Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 10 Feb 2023 15:52:51 +0100 Subject: [PATCH 336/833] 99053: Pass all queryParameters to advanced workflow pages by default --- ...claimed-task-actions-abstract.component.ts | 29 ++++++++++++++++--- .../claimed-task-actions.component.ts | 1 - ...aimed-task-action-rating.component.spec.ts | 6 +++- ...ed-claimed-task-action-rating.component.ts | 5 ++-- ...k-action-select-reviewer.component.spec.ts | 18 ------------ ...d-task-action-select-reviewer.component.ts | 13 ++------- src/app/shared/testing/location.stub.ts | 7 +++++ ...w-action-select-reviewer.component.spec.ts | 14 ++++++++- ...rkflow-action-select-reviewer.component.ts | 12 ++++---- 9 files changed, 62 insertions(+), 43 deletions(-) create mode 100644 src/app/shared/testing/location.stub.ts diff --git a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts index 32d9a230eb..cf627fc1ce 100644 --- a/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/abstract/advanced-claimed-task-actions-abstract.component.ts @@ -1,9 +1,13 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Injector } from '@angular/core'; import { ClaimedTaskActionsAbstractComponent } from './claimed-task-actions-abstract.component'; import { getFirstSucceededRemoteDataPayload } from '../../../../core/shared/operators'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; import { getAdvancedWorkflowRoute } from '../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; -import { Params } from '@angular/router'; +import { Params, Router, ActivatedRoute, NavigationExtras } from '@angular/router'; +import { NotificationsService } from '../../../notifications/notifications.service'; +import { TranslateService } from '@ngx-translate/core'; +import { SearchService } from '../../../../core/shared/search/search.service'; +import { RequestService } from '../../../../core/data/request.service'; /** * Abstract component for rendering an advanced claimed task's action @@ -27,6 +31,18 @@ export abstract class AdvancedClaimedTaskActionsAbstractComponent extends Claime */ workflowTaskPageRoute: string; + constructor( + protected injector: Injector, + protected router: Router, + protected notificationsService: NotificationsService, + protected translate: TranslateService, + protected searchService: SearchService, + protected requestService: RequestService, + protected route: ActivatedRoute, + ) { + super(injector, router, notificationsService, translate, searchService, requestService); + } + ngOnInit(): void { super.ngOnInit(); this.initPageRoute(); @@ -47,9 +63,14 @@ export abstract class AdvancedClaimedTaskActionsAbstractComponent extends Claime * Navigates to the advanced workflow page based on the {@link workflow}. */ openAdvancedClaimedTaskTab(): void { - void this.router.navigate([this.workflowTaskPageRoute], { + const navigationExtras: NavigationExtras = { queryParams: this.getQueryParams(), - }); + }; + if (Object.keys(this.route.snapshot.queryParams).length > 0) { + navigationExtras.state = {}; + navigationExtras.state.previousQueryParams = this.route.snapshot.queryParams; + } + void this.router.navigate([this.workflowTaskPageRoute], navigationExtras); } /** diff --git a/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts b/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts index 8f4d109ba1..9f31c34279 100644 --- a/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/claimed-task-actions.component.ts @@ -16,7 +16,6 @@ import { RequestService } from '../../../core/data/request.service'; import { SearchService } from '../../../core/shared/search/search.service'; import { WorkflowAction } from '../../../core/tasks/models/workflow-action-object.model'; import { WorkflowActionDataService } from '../../../core/data/workflow-action-data.service'; -import { WORKFLOW_TASK_OPTION_RETURN_TO_POOL } from './return-to-pool/claimed-task-actions-return-to-pool.component'; import { getWorkflowItemViewRoute } from '../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; /** diff --git a/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.spec.ts index c192a68aa7..bb41fedfb5 100644 --- a/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.spec.ts @@ -9,7 +9,7 @@ import { SearchServiceStub } from '../../../testing/search-service.stub'; import { ClaimedTaskDataService } from '../../../../core/tasks/claimed-task-data.service'; import { NotificationsService } from '../../../notifications/notifications.service'; import { RequestService } from '../../../../core/data/request.service'; -import { Router } from '@angular/router'; +import { Router, ActivatedRoute } from '@angular/router'; import { SearchService } from '../../../../core/shared/search/search.service'; import { Location } from '@angular/common'; import { TranslateModule } from '@ngx-translate/core'; @@ -19,6 +19,7 @@ import { } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component'; import { of as observableOf } from 'rxjs'; import { WorkflowItem } from '../../../../core/submission/models/workflowitem.model'; +import { ActivatedRouteStub } from '../../../testing/active-router.stub'; const taskId = 'claimed-task-1'; const workflowId = 'workflow-1'; @@ -35,12 +36,14 @@ describe('AdvancedClaimedTaskActionRatingComponent', () => { let claimedTaskDataService: ClaimedTaskDataServiceStub; let notificationService: NotificationsServiceStub; + let route: ActivatedRouteStub; let router: RouterStub; let searchService: SearchServiceStub; beforeEach(async () => { claimedTaskDataService = new ClaimedTaskDataServiceStub(); notificationService = new NotificationsServiceStub(); + route = new ActivatedRouteStub(); router = new RouterStub(); searchService = new SearchServiceStub(); @@ -52,6 +55,7 @@ describe('AdvancedClaimedTaskActionRatingComponent', () => { AdvancedClaimedTaskActionRatingComponent, ], providers: [ + { provide: ActivatedRoute, useValue: route }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, { provide: NotificationsService, useValue: notificationService }, { provide: RequestService, useValue: {} }, diff --git a/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.ts b/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.ts index 8699dc702e..a1cc81e050 100644 --- a/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/rating/advanced-claimed-task-action-rating.component.ts @@ -1,5 +1,5 @@ import { Component, Injector } from '@angular/core'; -import { Router } from '@angular/router'; +import { Router, ActivatedRoute } from '@angular/router'; import { NotificationsService } from '../../../notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; @@ -38,8 +38,9 @@ export class AdvancedClaimedTaskActionRatingComponent extends AdvancedClaimedTas protected translate: TranslateService, protected searchService: SearchService, protected requestService: RequestService, + protected route: ActivatedRoute, ) { - super(injector, router, notificationsService, translate, searchService, requestService); + super(injector, router, notificationsService, translate, searchService, requestService, route); } } diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts index 60f47a60b8..81fe423481 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.spec.ts @@ -99,22 +99,4 @@ describe('AdvancedClaimedTaskActionSelectReviewerComponent', () => { }, }); }); - - it('should navigate to the advanced workflow page with a previousSearchQuery when clicked anq a query is defined', () => { - spyOnProperty(route, 'snapshot').and.returnValue({ - queryParams: { - query: 'Thor%20Love%20and%20Thunder', - } - }); - component.workflowTaskPageRoute = `/workflowitems/${workflowId}/advanced`; - fixture.debugElement.query(By.css('.selectReviewerAction')).nativeElement.click(); - - expect(router.navigate).toHaveBeenCalledWith([`/workflowitems/${workflowId}/advanced`], { - queryParams: { - workflow: ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, - claimedTask: taskId, - previousSearchQuery: 'Thor%20Love%20and%20Thunder', - }, - }); - }); }); diff --git a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts index 2331a8bd7f..d6217320ba 100644 --- a/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/select-reviewer/advanced-claimed-task-action-select-reviewer.component.ts @@ -3,7 +3,7 @@ import { rendersWorkflowTaskOption } from '../switcher/claimed-task-actions-deco import { AdvancedClaimedTaskActionsAbstractComponent } from '../abstract/advanced-claimed-task-actions-abstract.component'; -import { Router, Params, ActivatedRoute } from '@angular/router'; +import { Router, ActivatedRoute } from '@angular/router'; import { NotificationsService } from '../../../notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { SearchService } from '../../../../core/shared/search/search.service'; @@ -12,7 +12,6 @@ import { ADVANCED_WORKFLOW_ACTION_SELECT_REVIEWER, ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER } from '../../../../workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component'; -import { hasValue } from '../../../empty.util'; /** * Advanced Workflow button that redirect to the {@link AdvancedWorkflowActionSelectReviewerComponent} @@ -41,15 +40,7 @@ export class AdvancedClaimedTaskActionSelectReviewerComponent extends AdvancedCl protected requestService: RequestService, protected route: ActivatedRoute, ) { - super(injector, router, notificationsService, translate, searchService, requestService); - } - - getQueryParams(): Params { - const params: Params = super.getQueryParams(); - if (hasValue(this.route.snapshot.queryParams.query)) { - params.previousSearchQuery = this.route.snapshot.queryParams.query; - } - return params; + super(injector, router, notificationsService, translate, searchService, requestService, route); } } diff --git a/src/app/shared/testing/location.stub.ts b/src/app/shared/testing/location.stub.ts new file mode 100644 index 0000000000..7e130c4de2 --- /dev/null +++ b/src/app/shared/testing/location.stub.ts @@ -0,0 +1,7 @@ +export class LocationStub { + + getState(): unknown { + return {}; + } + +} diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts index 42d6874899..cf2be8e0b8 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts @@ -1,4 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Location } from '@angular/common'; import { AdvancedWorkflowActionSelectReviewerComponent, ADVANCED_WORKFLOW_TASK_OPTION_SELECT_REVIEWER, @@ -25,6 +26,7 @@ import { NO_ERRORS_SCHEMA } from '@angular/core'; import { RequestService } from '../../../core/data/request.service'; import { RequestServiceStub } from '../../../shared/testing/request-service.stub'; import { RouterStub } from '../../../shared/testing/router.stub'; +import { LocationStub } from '../../../shared/testing/location.stub'; const claimedTaskId = '2'; const workflowId = '1'; @@ -36,6 +38,7 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { let fixture: ComponentFixture; let claimedTaskDataService: ClaimedTaskDataServiceStub; + let location: LocationStub; let notificationService: NotificationsServiceStub; let router: RouterStub; let workflowActionDataService: WorkflowItemDataServiceStub; @@ -43,6 +46,7 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { beforeEach(async () => { claimedTaskDataService = new ClaimedTaskDataServiceStub(); + location = new LocationStub(); notificationService = new NotificationsServiceStub(); router = new RouterStub(); workflowActionDataService = new WorkflowActionDataServiceStub(); @@ -72,9 +76,10 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { }, }, }, - { provide: Router, useValue: router }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: Location, useValue: location }, { provide: NotificationsService, useValue: notificationService }, + { provide: Router, useValue: router }, { provide: RouteService, useValue: routeServiceStub }, { provide: WorkflowActionDataService, useValue: workflowActionDataService }, { provide: WorkflowItemDataService, useValue: workflowItemDataService }, @@ -96,6 +101,13 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { describe('previousPage', () => { it('should navigate back to the Workflow tasks page with the previous query', () => { + spyOn(location, 'getState').and.returnValue({ + previousQueryParams: { + configuration: 'workflow', + query: 'Thor Love and Thunder', + }, + }); + component.previousPage(); expect(router.navigate).toHaveBeenCalledWith(['/mydspace'], { diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts index 226ddccf4c..5d8ece8c01 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Location } from '@angular/common'; import { rendersAdvancedWorkflowTaskOption } from '../../../shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; @@ -62,6 +63,7 @@ export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkf protected workflowActionService: WorkflowActionDataService, protected claimedTaskDataService: ClaimedTaskDataService, protected requestService: RequestService, + protected location: Location, ) { super(route, workflowItemService, router, routeService, notificationsService, translationService, workflowActionService, claimedTaskDataService, requestService); } @@ -138,11 +140,11 @@ export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkf * switching between the different pages */ previousPage(): void { - const queryParams: Params = { - configuration: 'workflow', - }; - if (hasValue(this.route.snapshot.queryParams.previousSearchQuery)) { - queryParams.query = decodeURIComponent(this.route.snapshot.queryParams.previousSearchQuery); + let queryParams: Params = (this.location.getState() as { [key: string]: any }).previousQueryParams; + if (!hasValue(queryParams)) { + queryParams = { + configuration: 'workflow', + }; } void this.router.navigate(['/mydspace'], { queryParams: queryParams }); } From dce84dbe70d4ea200a3c38576008792e013b165f Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 10 Feb 2023 16:39:27 +0100 Subject: [PATCH 337/833] 99053: Save queryParams in init to prevent them being overwritten --- .../advanced-workflow-action-rating.component.spec.ts | 3 +++ ...anced-workflow-action-select-reviewer.component.spec.ts | 1 + .../advanced-workflow-action-select-reviewer.component.ts | 4 ++-- .../advanced-workflow-action.component.spec.ts | 6 +++++- .../advanced-workflow-action.component.ts | 4 +++- .../workflow-item-action-page.component.spec.ts | 6 +++++- .../workflow-item-action-page.component.ts | 7 ++++++- .../workflow-item-delete.component.spec.ts | 4 +++- .../workflow-item-delete/workflow-item-delete.component.ts | 7 +++++-- .../workflow-item-send-back.component.spec.ts | 4 +++- .../workflow-item-send-back.component.ts | 7 +++++-- 11 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.spec.ts index 8fe495c617..d6d6f973c4 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.spec.ts @@ -1,4 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Location } from '@angular/common'; import { AdvancedWorkflowActionRatingComponent, ADVANCED_WORKFLOW_TASK_OPTION_RATING @@ -28,6 +29,7 @@ import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-res import { RatingAdvancedWorkflowInfo } from '../../../core/tasks/models/rating-advanced-workflow-info.model'; import { RequestService } from '../../../core/data/request.service'; import { RequestServiceStub } from '../../../shared/testing/request-service.stub'; +import { LocationStub } from '../../../shared/testing/location.stub'; const claimedTaskId = '2'; const workflowId = '1'; @@ -77,6 +79,7 @@ describe('AdvancedWorkflowActionRatingComponent', () => { }, }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: Location, useValue: new LocationStub() }, { provide: NotificationsService, useValue: notificationService }, { provide: RouteService, useValue: routeServiceStub }, { provide: Router, useValue: new RouterStub() }, diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts index cf2be8e0b8..71952ce9c7 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.spec.ts @@ -108,6 +108,7 @@ describe('AdvancedWorkflowActionSelectReviewerComponent', () => { }, }); + component.ngOnInit(); component.previousPage(); expect(router.navigate).toHaveBeenCalledWith(['/mydspace'], { diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts index 5d8ece8c01..329af73351 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/advanced-workflow-action-select-reviewer.component.ts @@ -65,7 +65,7 @@ export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkf protected requestService: RequestService, protected location: Location, ) { - super(route, workflowItemService, router, routeService, notificationsService, translationService, workflowActionService, claimedTaskDataService, requestService); + super(route, workflowItemService, router, routeService, notificationsService, translationService, workflowActionService, claimedTaskDataService, requestService, location); } ngOnDestroy(): void { @@ -140,7 +140,7 @@ export class AdvancedWorkflowActionSelectReviewerComponent extends AdvancedWorkf * switching between the different pages */ previousPage(): void { - let queryParams: Params = (this.location.getState() as { [key: string]: any }).previousQueryParams; + let queryParams: Params = this.previousQueryParameters; if (!hasValue(queryParams)) { queryParams = { configuration: 'workflow', diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts index f57adcb05f..f6dfbf627f 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.spec.ts @@ -1,4 +1,5 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { Location } from '@angular/common'; import { AdvancedWorkflowActionComponent } from './advanced-workflow-action.component'; import { Component } from '@angular/core'; import { MockComponent } from 'ng-mocks'; @@ -20,6 +21,7 @@ import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-res import { WorkflowItemDataServiceStub } from '../../../shared/testing/workflow-item-data-service.stub'; import { RequestService } from '../../../core/data/request.service'; import { RequestServiceStub } from '../../../shared/testing/request-service.stub'; +import { LocationStub } from '../../../shared/testing/location.stub'; const workflowId = '1'; @@ -28,17 +30,18 @@ describe('AdvancedWorkflowActionComponent', () => { let fixture: ComponentFixture; let claimedTaskDataService: ClaimedTaskDataServiceStub; + let location: LocationStub; let notificationService: NotificationsServiceStub; let workflowActionDataService: WorkflowActionDataServiceStub; let workflowItemDataService: WorkflowItemDataServiceStub; beforeEach(async () => { claimedTaskDataService = new ClaimedTaskDataServiceStub(); + location = new LocationStub(); notificationService = new NotificationsServiceStub(); workflowActionDataService = new WorkflowActionDataServiceStub(); workflowItemDataService = new WorkflowItemDataServiceStub(); - await TestBed.configureTestingModule({ imports: [ TranslateModule.forRoot(), @@ -63,6 +66,7 @@ describe('AdvancedWorkflowActionComponent', () => { }, }, { provide: ClaimedTaskDataService, useValue: claimedTaskDataService }, + { provide: Location, useValue: location }, { provide: NotificationsService, useValue: notificationService }, { provide: RouteService, useValue: routeServiceStub }, { provide: WorkflowActionDataService, useValue: workflowActionDataService }, diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts index 5621e56578..73fd6dc63e 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action/advanced-workflow-action.component.ts @@ -13,6 +13,7 @@ import { ClaimedTaskDataService } from '../../../core/tasks/claimed-task-data.se import { map } from 'rxjs/operators'; import { ProcessTaskResponse } from '../../../core/tasks/models/process-task-response'; import { RequestService } from '../../../core/data/request.service'; +import { Location } from '@angular/common'; /** * Abstract component for rendering an advanced claimed task's workflow page @@ -38,8 +39,9 @@ export abstract class AdvancedWorkflowActionComponent extends WorkflowItemAction protected workflowActionService: WorkflowActionDataService, protected claimedTaskDataService: ClaimedTaskDataService, protected requestService: RequestService, + protected location: Location, ) { - super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService); + super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService, location); } ngOnInit(): void { diff --git a/src/app/workflowitems-edit-page/workflow-item-action-page.component.spec.ts b/src/app/workflowitems-edit-page/workflow-item-action-page.component.spec.ts index 11f88788dc..c4dea0f30c 100644 --- a/src/app/workflowitems-edit-page/workflow-item-action-page.component.spec.ts +++ b/src/app/workflowitems-edit-page/workflow-item-action-page.component.spec.ts @@ -18,6 +18,8 @@ import { RouterStub } from '../shared/testing/router.stub'; import { NotificationsServiceStub } from '../shared/testing/notifications-service.stub'; import { RequestService } from '../core/data/request.service'; import { RequestServiceStub } from '../shared/testing/request-service.stub'; +import { Location } from '@angular/common'; +import { LocationStub } from '../shared/testing/location.stub'; const type = 'testType'; describe('WorkflowItemActionPageComponent', () => { @@ -52,6 +54,7 @@ describe('WorkflowItemActionPageComponent', () => { { provide: ActivatedRoute, useValue: new ActivatedRouteStub({}, { wfi: createSuccessfulRemoteDataObject(wfi) }) }, { provide: Router, useClass: RouterStub }, { provide: RouteService, useValue: {} }, + { provide: Location, useValue: new LocationStub() }, { provide: NotificationsService, useClass: NotificationsServiceStub }, { provide: WorkflowItemDataService, useValue: wfiService }, { provide: RequestService, useClass: RequestServiceStub }, @@ -115,8 +118,9 @@ class TestComponent extends WorkflowItemActionPageComponent { protected notificationsService: NotificationsService, protected translationService: TranslateService, protected requestService: RequestService, + protected location: Location, ) { - super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService); + super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService, location); } getType(): string { diff --git a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts index 276b2054fe..b8998a6dd7 100644 --- a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts +++ b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts @@ -1,4 +1,5 @@ import { Component, OnInit } from '@angular/core'; +import { Location } from '@angular/common'; import { Observable, forkJoin } from 'rxjs'; import { map, switchMap, take } from 'rxjs/operators'; import { TranslateService } from '@ngx-translate/core'; @@ -24,6 +25,7 @@ export abstract class WorkflowItemActionPageComponent implements OnInit { public type; public wfi$: Observable; public item$: Observable; + protected previousQueryParameters?: Params; constructor(protected route: ActivatedRoute, protected workflowItemService: WorkflowItemDataService, @@ -32,6 +34,7 @@ export abstract class WorkflowItemActionPageComponent implements OnInit { protected notificationsService: NotificationsService, protected translationService: TranslateService, protected requestService: RequestService, + protected location: Location, ) { } @@ -42,6 +45,7 @@ export abstract class WorkflowItemActionPageComponent implements OnInit { this.type = this.getType(); this.wfi$ = this.route.data.pipe(map((data: Data) => data.wfi as RemoteData), getRemoteDataPayload()); this.item$ = this.wfi$.pipe(switchMap((wfi: WorkflowItem) => (wfi.item as Observable>).pipe(getAllSucceededRemoteData(), getRemoteDataPayload()))); + this.previousQueryParameters = (this.location.getState() as { [key: string]: any }).previousQueryParams; } /** @@ -72,10 +76,11 @@ export abstract class WorkflowItemActionPageComponent implements OnInit { previousPage() { this.routeService.getPreviousUrl().pipe(take(1)) .subscribe((url) => { + let params: Params = {}; if (isEmpty(url)) { url = '/mydspace'; + params = this.previousQueryParameters; } - const params: Params = {}; if (url.split('?').length > 1) { for (const param of url.split('?')[1].split('&')) { params[param.split('=')[0]] = decodeURIComponent(param.split('=')[1]); diff --git a/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.spec.ts b/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.spec.ts index a4e8f7d849..89a7029b4a 100644 --- a/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.spec.ts +++ b/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.spec.ts @@ -1,5 +1,5 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; - +import { Location } from '@angular/common'; import { WorkflowItemDeleteComponent } from './workflow-item-delete.component'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { ActivatedRoute, Router } from '@angular/router'; @@ -17,6 +17,7 @@ import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { RouterStub } from '../../shared/testing/router.stub'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { getMockRequestService } from '../../shared/mocks/request.service.mock'; +import { LocationStub } from '../../shared/testing/location.stub'; describe('WorkflowItemDeleteComponent', () => { let component: WorkflowItemDeleteComponent; @@ -50,6 +51,7 @@ describe('WorkflowItemDeleteComponent', () => { { provide: ActivatedRoute, useValue: new ActivatedRouteStub({}, { wfi: createSuccessfulRemoteDataObject(wfi) }) }, { provide: Router, useClass: RouterStub }, { provide: RouteService, useValue: {} }, + { provide: Location, useValue: new LocationStub() }, { provide: NotificationsService, useClass: NotificationsServiceStub }, { provide: WorkflowItemDataService, useValue: wfiService }, { provide: RequestService, useValue: getMockRequestService() }, diff --git a/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.ts b/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.ts index faa2bf543a..011398369d 100644 --- a/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.ts +++ b/src/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component.ts @@ -11,6 +11,7 @@ import { map } from 'rxjs/operators'; import { RemoteData } from '../../core/data/remote-data'; import { NoContent } from '../../core/shared/NoContent.model'; import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { Location } from '@angular/common'; @Component({ selector: 'ds-workflow-item-delete', @@ -26,8 +27,10 @@ export class WorkflowItemDeleteComponent extends WorkflowItemActionPageComponent protected routeService: RouteService, protected notificationsService: NotificationsService, protected translationService: TranslateService, - protected requestService: RequestService) { - super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService); + protected requestService: RequestService, + protected location: Location, + ) { + super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService, location); } /** diff --git a/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.spec.ts b/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.spec.ts index d9dde8244c..1196e05593 100644 --- a/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.spec.ts +++ b/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.spec.ts @@ -1,5 +1,5 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; - +import { Location } from '@angular/common'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { ActivatedRoute, Router } from '@angular/router'; import { RouteService } from '../../core/services/route.service'; @@ -17,6 +17,7 @@ import { RouterStub } from '../../shared/testing/router.stub'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; import { getMockRequestService } from '../../shared/mocks/request.service.mock'; +import { LocationStub } from '../../shared/testing/location.stub'; describe('WorkflowItemSendBackComponent', () => { let component: WorkflowItemSendBackComponent; @@ -50,6 +51,7 @@ describe('WorkflowItemSendBackComponent', () => { { provide: ActivatedRoute, useValue: new ActivatedRouteStub({}, { wfi: createSuccessfulRemoteDataObject(wfi) }) }, { provide: Router, useClass: RouterStub }, { provide: RouteService, useValue: {} }, + { provide: Location, useValue: new LocationStub() }, { provide: NotificationsService, useClass: NotificationsServiceStub }, { provide: WorkflowItemDataService, useValue: wfiService }, { provide: RequestService, useValue: getMockRequestService() }, diff --git a/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.ts b/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.ts index 432b417f43..a3c03bcfb1 100644 --- a/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.ts +++ b/src/app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component.ts @@ -7,6 +7,7 @@ import { RouteService } from '../../core/services/route.service'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { RequestService } from '../../core/data/request.service'; +import { Location } from '@angular/common'; @Component({ selector: 'ds-workflow-item-send-back', @@ -22,8 +23,10 @@ export class WorkflowItemSendBackComponent extends WorkflowItemActionPageCompone protected routeService: RouteService, protected notificationsService: NotificationsService, protected translationService: TranslateService, - protected requestService: RequestService) { - super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService); + protected requestService: RequestService, + protected location: Location, + ) { + super(route, workflowItemService, router, routeService, notificationsService, translationService, requestService, location); } /** From 1d69e1581adbffd53b01b1c7342669b383273242 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 10 Feb 2023 17:45:59 +0100 Subject: [PATCH 338/833] 97755: Call spy before component is created --- src/app/admin/admin-sidebar/admin-sidebar.component.spec.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/app/admin/admin-sidebar/admin-sidebar.component.spec.ts b/src/app/admin/admin-sidebar/admin-sidebar.component.spec.ts index 65026c1504..fe8e4187d3 100644 --- a/src/app/admin/admin-sidebar/admin-sidebar.component.spec.ts +++ b/src/app/admin/admin-sidebar/admin-sidebar.component.spec.ts @@ -55,6 +55,7 @@ describe('AdminSidebarComponent', () => { isAuthorized: observableOf(true) }); scriptService = jasmine.createSpyObj('scriptService', { scriptWithNameExistsAndCanExecute: observableOf(true) }); + spyOn(menuService, 'addSection').and.callThrough(); TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), NoopAnimationsModule, RouterTestingModule], declarations: [AdminSidebarComponent], @@ -184,10 +185,6 @@ describe('AdminSidebarComponent', () => { }); describe('menu', () => { - beforeEach(() => { - spyOn(menuService, 'addSection'); - }); - describe('for regular user', () => { beforeEach(() => { authorizationService.isAuthorized = createSpy('isAuthorized').and.callFake(() => { From 8ddcd42d04f9a6afa0c84c2bc8576f9cd3588e51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Feb 2023 18:14:15 +0000 Subject: [PATCH 339/833] Bump http-cache-semantics from 4.1.0 to 4.1.1 Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/kornelski/http-cache-semantics/releases) - [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1) --- updated-dependencies: - dependency-name: http-cache-semantics dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3843ac4dab..2fd4fa3bc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6140,9 +6140,9 @@ htmlparser2@^6.0.0, htmlparser2@^6.1.0: entities "^2.0.0" http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" From d82526af8abd4d5c6be501fa045f509326015e8b Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 10 Feb 2023 19:47:20 +0100 Subject: [PATCH 340/833] [CST-7755] WIP refactoring --- ...admin-workflow-list-element.component.html | 6 +- ...t-admin-workflow-list-element.component.ts | 127 ++++++++++++++++-- .../models/submission-object.model.ts | 4 +- ...table-object-component-loader.component.ts | 14 +- .../abstract-listable-element.component.ts | 5 + .../item/item-list-element.component.html | 2 +- .../object-list/object-list.component.html | 7 +- .../object-list/object-list.component.ts | 5 + ...-search-result-list-element.component.html | 37 ++--- ...em-search-result-list-element.component.ts | 14 +- .../supervision-order-status.component.html | 13 ++ .../supervision-order-status.component.scss | 0 ...supervision-order-status.component.spec.ts | 25 ++++ .../supervision-order-status.component.ts | 88 ++++++++++++ src/app/shared/shared.module.ts | 42 +++--- src/assets/i18n/en.json5 | 16 +-- 16 files changed, 330 insertions(+), 75 deletions(-) create mode 100644 src/app/shared/object-list/supervision-order-status/supervision-order-status.component.html create mode 100644 src/app/shared/object-list/supervision-order-status/supervision-order-status.component.scss create mode 100644 src/app/shared/object-list/supervision-order-status/supervision-order-status.component.spec.ts create mode 100644 src/app/shared/object-list/supervision-order-status/supervision-order-status.component.ts diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html index 32ba7b9cc8..8963db01bd 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.html @@ -6,9 +6,13 @@
    +
    + +
    + diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.ts index ee6cb16bbe..c57d918126 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component.ts @@ -1,21 +1,46 @@ import { Component, Inject, OnInit } from '@angular/core'; + +import { BehaviorSubject, Observable } from 'rxjs'; +import { map, mergeMap, take, tap } from 'rxjs/operators'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateService } from '@ngx-translate/core'; + import { ViewMode } from '../../../../../core/shared/view-mode.model'; -import { listableObjectComponent } from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator'; +import { + listableObjectComponent +} from '../../../../../shared/object-collection/shared/listable-object/listable-object.decorator'; import { Context } from '../../../../../core/shared/context.model'; import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; -import { Observable } from 'rxjs'; import { LinkService } from '../../../../../core/cache/builders/link.service'; import { followLink } from '../../../../../shared/utils/follow-link-config.model'; import { RemoteData } from '../../../../../core/data/remote-data'; -import { getAllSucceededRemoteData, getRemoteDataPayload } from '../../../../../core/shared/operators'; +import { + getAllSucceededRemoteData, + getFirstCompletedRemoteData, + getRemoteDataPayload +} from '../../../../../core/shared/operators'; import { Item } from '../../../../../core/shared/item.model'; -import { SearchResultListElementComponent } from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component'; +import { + SearchResultListElementComponent +} from '../../../../../shared/object-list/search-result-list-element/search-result-list-element.component'; import { TruncatableService } from '../../../../../shared/truncatable/truncatable.service'; -import { WorkflowItemSearchResult } from '../../../../../shared/object-collection/shared/workflow-item-search-result.model'; +import { + WorkflowItemSearchResult +} from '../../../../../shared/object-collection/shared/workflow-item-search-result.model'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { APP_CONFIG, AppConfig } from '../../../../../../config/app-config.interface'; -import { WorkspaceItemSearchResult } from '../../../../../shared/object-collection/shared/workspace-item-search-result.model'; +import { + WorkspaceItemSearchResult +} from '../../../../../shared/object-collection/shared/workspace-item-search-result.model'; import { SupervisionOrder } from '../../../../../core/supervision-order/models/supervision-order.model'; +import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; +import { PaginatedList } from '../../../../../core/data/paginated-list.model'; +import { ConfirmationModalComponent } from '../../../../../shared/confirmation-modal/confirmation-modal.component'; +import { hasValue } from '../../../../../shared/empty.util'; +import { + SupervisionOrderListEntry +} from '../../../../../shared/object-list/supervision-order-status/supervision-order-status.component'; +import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; @listableObjectComponent(WorkflowItemSearchResult, ViewMode.ListElement, Context.AdminWorkflowSearch) @listableObjectComponent(WorkspaceItemSearchResult, ViewMode.ListElement, Context.AdminWorkflowSearch) @@ -25,7 +50,7 @@ import { SupervisionOrder } from '../../../../../core/supervision-order/models/s templateUrl: './workflow-item-search-result-admin-workflow-list-element.component.html' }) /** - * The component for displaying a list element for an workflow item on the admin workflow search page + * The component for displaying a list element for a workflow item on the admin workflow search page */ export class WorkflowItemSearchResultAdminWorkflowListElementComponent extends SearchResultListElementComponent implements OnInit { @@ -34,14 +59,25 @@ export class WorkflowItemSearchResultAdminWorkflowListElementComponent extends S */ public item$: Observable; + /** + * The id of the item linked to the workflow item + */ + public itemId: string; + /** * The supervision orders linked to the workflow item */ - public supervisionOrder$: Observable; + public supervisionOrder$: BehaviorSubject = new BehaviorSubject([]); + + private messagePrefix = 'workflow-item.search.result'; constructor(private linkService: LinkService, - protected truncatableService: TruncatableService, protected dsoNameService: DSONameService, + protected modalService: NgbModal, + protected notificationsService: NotificationsService, + protected supervisionOrderDataService: SupervisionOrderDataService, + protected translateService: TranslateService, + protected truncatableService: TruncatableService, @Inject(APP_CONFIG) protected appConfig: AppConfig ) { super(truncatableService, dsoNameService, appConfig); @@ -53,7 +89,78 @@ export class WorkflowItemSearchResultAdminWorkflowListElementComponent extends S ngOnInit(): void { super.ngOnInit(); this.dso = this.linkService.resolveLink(this.dso, followLink('item')); - this.supervisionOrder$ = (this.dso.supervisionOrders as Observable>)?.pipe(getAllSucceededRemoteData(), getRemoteDataPayload()); this.item$ = (this.dso.item as Observable>).pipe(getAllSucceededRemoteData(), getRemoteDataPayload()); + + this.item$.pipe( + take(1), + tap((item: Item) => this.itemId = item.id), + mergeMap((item: Item) => this.retrieveSupervisorOrders(item.id)) + ).subscribe((supervisionOrderList: SupervisionOrder[]) => { + this.supervisionOrder$.next(supervisionOrderList); + }) + } + + /** + * Deletes the Group from the Repository. The Group will be the only that this form is showing. + * It'll either show a success or error message depending on whether the delete was successful or not. + */ + deleteSupervisionOrder(supervisionOrderEntry: SupervisionOrderListEntry) { + const modalRef = this.modalService.open(ConfirmationModalComponent); + modalRef.componentInstance.dso = supervisionOrderEntry.group; + modalRef.componentInstance.headerLabel = this.messagePrefix + '.delete-supervision.modal.header'; + modalRef.componentInstance.infoLabel = this.messagePrefix + '.delete-supervision.modal.info'; + modalRef.componentInstance.cancelLabel = this.messagePrefix + '.delete-supervision.modal.cancel'; + modalRef.componentInstance.confirmLabel = this.messagePrefix + '.delete-supervision.modal.confirm'; + modalRef.componentInstance.brandColor = 'danger'; + modalRef.componentInstance.confirmIcon = 'fas fa-trash'; + modalRef.componentInstance.response.pipe( + take(1), + mergeMap((confirm: boolean) => { + if (confirm && hasValue(supervisionOrderEntry.supervisionOrder.id)) { + return this.supervisionOrderDataService.delete(supervisionOrderEntry.supervisionOrder.id).pipe( + take(1), + tap((result: boolean) => { + if (result) { + this.notificationsService.success( + null, + this.translateService.get( + this.messagePrefix + '.notification.deleted.success', + { name: this.dsoNameService.getName(supervisionOrderEntry.group) } + ) + ); + } else { + this.notificationsService.error( + null, + this.translateService.get( + this.messagePrefix + '.notification.deleted.failure', + { name: this.dsoNameService.getName(supervisionOrderEntry.group) } + ) + ); + } + }), + mergeMap((result: boolean) => result ? this.retrieveSupervisorOrders(this.itemId) : this.supervisionOrder$.asObservable()) + ) + } else { + return this.supervisionOrder$.asObservable() + } + }) + ).subscribe((supervisionOrderList: SupervisionOrder[]) => { + this.supervisionOrder$.next(supervisionOrderList) + }) + } + + /** + * Retrieve the list of SupervisionOrder object related to the given item + * + * @param itemId + * @private + */ + private retrieveSupervisorOrders(itemId): Observable { + return this.supervisionOrderDataService.searchByItem( + itemId, false, true, followLink('group') + ).pipe( + getFirstCompletedRemoteData(), + map((soRD: RemoteData>) => soRD.hasSucceeded && !soRD.hasNoContent ? soRD.payload.page : []) + ); } } diff --git a/src/app/core/submission/models/submission-object.model.ts b/src/app/core/submission/models/submission-object.model.ts index 3d373d2522..e2d1a4396b 100644 --- a/src/app/core/submission/models/submission-object.model.ts +++ b/src/app/core/submission/models/submission-object.model.ts @@ -15,6 +15,8 @@ import { excludeFromEquals } from '../../utilities/equals.decorators'; import { WorkspaceitemSectionsObject } from './workspaceitem-sections.model'; import { CacheableObject } from '../../cache/cacheable-object.model'; import { SUPERVISION_ORDER } from '../../supervision-order/models/supervision-order.resource-type'; +import { PaginatedList } from '../../data/paginated-list.model'; +import { SupervisionOrder } from '../../supervision-order/models/supervision-order.model'; export interface SubmissionObjectError { message: string; @@ -101,6 +103,6 @@ export abstract class SubmissionObject extends DSpaceObject implements Cacheable */ @link(SUPERVISION_ORDER) /* This was changed from 'Observable> | WorkspaceItem' to 'any' to prevent issues in templates with async */ - supervisionOrders?: any; + supervisionOrders?: Observable>>; } diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 9779ecd830..59ce71ff6c 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -13,7 +13,7 @@ import { ViewChild } from '@angular/core'; -import { Observable, Subscription } from 'rxjs'; +import { Subscription } from 'rxjs'; import { take } from 'rxjs/operators'; import { ListableObject } from '../listable-object.model'; @@ -41,11 +41,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Input() object: ListableObject; - /** - * The supervision order to determine supervision orders - */ - @Input() supervisionOrders: Observable; - /** * The index of the object in the list */ @@ -76,6 +71,11 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Input() showLabel = true; + /** + * Whether to show the supervision orders badges or not + */ + @Input() showSupervisionOrderBadges = false; + /** * The value to display for this element */ @@ -128,7 +128,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ protected inAndOutputNames: string[] = [ 'object', - 'supervisionOrders', + 'showSupervisionOrderBadges', 'index', 'linkType', 'listID', diff --git a/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts b/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts index dde9cf61dc..f292ac5b76 100644 --- a/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts +++ b/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts @@ -46,6 +46,11 @@ export class AbstractListableElementComponent { */ @Input() showLabel = true; + /** + * Whether to show the supervision orders badges or not + */ + @Input() showSupervisionOrderBadges = false; + /** * The context we matched on to get this component */ diff --git a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html index f244da97bd..4bf45e7f3b 100644 --- a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html +++ b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html @@ -1 +1 @@ - + diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html index 863d328a69..a0ef3e1cb9 100644 --- a/src/app/shared/object-list/object-list.component.html +++ b/src/app/shared/object-list/object-list.component.html @@ -25,8 +25,13 @@ - diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts index 65e2b508da..9d064115e6 100644 --- a/src/app/shared/object-list/object-list.component.ts +++ b/src/app/shared/object-list/object-list.component.ts @@ -81,6 +81,11 @@ export class ObjectListComponent { */ @Input() showPaginator = true; + /** + * Whether to show the supervision orders badges or not + */ + @Input() showSupervisionOrderBadges = false; + /** * Emit when one of the listed object has changed. */ diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index 64108681f6..bf1d51bfc2 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -23,37 +23,24 @@ - - - ( - ) - - - - - ; + + + ( + ) + + + + + ; + - - - + +
    - -
    -
    - {{'item.search.result.list.element.supervised-by' | translate}} -
    -
    - - {{supervisionOrder.group._name}} - X - -
    -
    -
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts index 2fa72d2ac0..7ed96fdc68 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts @@ -1,5 +1,7 @@ import { Component, Inject } from '@angular/core'; -import { listableObjectComponent } from '../../../../../object-collection/shared/listable-object/listable-object.decorator'; +import { + listableObjectComponent +} from '../../../../../object-collection/shared/listable-object/listable-object.decorator'; import { ViewMode } from '../../../../../../core/shared/view-mode.model'; import { ItemSearchResult } from '../../../../../object-collection/shared/item-search-result.model'; import { SearchResultListElementComponent } from '../../../search-result-list-element.component'; @@ -8,7 +10,7 @@ import { getItemPageRoute } from '../../../../../../item-page/item-page-routing- import { SupervisionOrderDataService } from '../../../../../../core/supervision-order/supervision-order-data.service'; import { TruncatableService } from '../../../../../../shared/truncatable/truncatable.service'; import { DSONameService } from '../../../../../../core/breadcrumbs/dso-name.service'; -import { AppConfig, APP_CONFIG } from '../../../../../../../config/app-config.interface'; +import { APP_CONFIG, AppConfig } from '../../../../../../../config/app-config.interface'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { combineLatest, filter, map, Observable, switchMap, take } from 'rxjs'; import { ConfirmationModalComponent } from '../../../../../../shared/confirmation-modal/confirmation-modal.component'; @@ -16,11 +18,15 @@ import { hasValue } from '../../../../../../shared/empty.util'; import { NotificationsService } from '../../../../../../shared/notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { followLink } from '../../../../../../shared/utils/follow-link-config.model'; -import { getAllSucceededRemoteListPayload, getFirstSucceededRemoteDataPayload } from '../../../../../../core/shared/operators'; +import { + getAllSucceededRemoteData, + getAllSucceededRemoteListPayload, + getFirstSucceededRemoteDataPayload, + getRemoteDataPayload +} from '../../../../../../core/shared/operators'; import { SupervisionOrder } from '../../../../../../core/supervision-order/models/supervision-order.model'; import { Group } from '../../../../../../core/eperson/models/group.model'; import { ResourcePolicyDataService } from '../../../../../../core/resource-policy/resource-policy-data.service'; -import { getAllSucceededRemoteData, getRemoteDataPayload } from '../../../../../../core/shared/operators'; import { AuthService } from '../../../../../../core/auth/auth.service'; import { EPerson } from '../../../../../../core/eperson/models/eperson.model'; import { EPersonDataService } from '../../../../../../core/eperson/eperson-data.service'; diff --git a/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.html b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.html new file mode 100644 index 0000000000..2e4f8d39cd --- /dev/null +++ b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.html @@ -0,0 +1,13 @@ + +
    +
    + {{'workflow-item.search.result.list.element.supervised-by' | translate}} +
    +
    + + {{supervisionOrder.group.name}} + X + +
    +
    +
    diff --git a/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.scss b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.spec.ts b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.spec.ts new file mode 100644 index 0000000000..9a5516b8e9 --- /dev/null +++ b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SupervisionOrderStatusComponent } from './supervision-order-status.component'; + +describe('SupervisionOrderStatusComponent', () => { + let component: SupervisionOrderStatusComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SupervisionOrderStatusComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SupervisionOrderStatusComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.ts b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.ts new file mode 100644 index 0000000000..92cbf17885 --- /dev/null +++ b/src/app/shared/object-list/supervision-order-status/supervision-order-status.component.ts @@ -0,0 +1,88 @@ +import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; + +import { BehaviorSubject, from, Observable } from 'rxjs'; +import { map, mergeMap, reduce } from 'rxjs/operators'; + +import { SupervisionOrder } from '../../../core/supervision-order/models/supervision-order.model'; +import { Group } from '../../../core/eperson/models/group.model'; +import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; +import { isNotEmpty } from '../../empty.util'; +import { RemoteData } from '../../../core/data/remote-data'; + +export interface SupervisionOrderListEntry { + supervisionOrder: SupervisionOrder; + group: Group +} + +@Component({ + selector: 'ds-supervision-order-status', + templateUrl: './supervision-order-status.component.html', + styleUrls: ['./supervision-order-status.component.scss'] +}) +export class SupervisionOrderStatusComponent implements OnChanges { + + /** + * The list of supervision order object to show + */ + @Input() supervisionOrderList: SupervisionOrder[] = []; + + /** + * The groups the user belongs to + */ + groups: Group[]; + + /** + * List of the supervision orders combined with the group + */ + supervisionOrderEntries$: BehaviorSubject = new BehaviorSubject([]); + + @Output() delete: EventEmitter = new EventEmitter(); + + ngOnChanges(changes: SimpleChanges): void { + if (changes && changes.supervisionOrderList) { + this.getSupervisionOrderEntries(changes.supervisionOrderList.currentValue) + .subscribe((supervisionOrderEntries: SupervisionOrderListEntry[]) => { + this.supervisionOrderEntries$.next(supervisionOrderEntries) + }) + } + console.log('ngOnChanges', changes); + } + + /** + * Create a list of SupervisionOrderListEntry by the given SupervisionOrder list + * + * @param supervisionOrderList + */ + private getSupervisionOrderEntries(supervisionOrderList: SupervisionOrder[]): Observable { + return from(supervisionOrderList).pipe( + mergeMap((so: SupervisionOrder) => so.group.pipe( + getFirstCompletedRemoteData(), + map((sogRD: RemoteData) => { + if (sogRD.hasSucceeded) { + const entry: SupervisionOrderListEntry = { + supervisionOrder: so, + group: sogRD.payload + }; + return entry; + } else { + return null; + } + }) + )), + reduce((acc: SupervisionOrderListEntry[], value: any) => { + if (isNotEmpty(value)) { + return [...acc, value] + } else { + return acc; + } + }, []), + ) + } + + /** + * Emit a delete event with the given SupervisionOrderListEntry. + */ + deleteSupervisionOrder(supervisionOrder: SupervisionOrderListEntry) { + this.delete.emit(supervisionOrder); + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index 3c985d46b9..624d519ad1 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -100,19 +100,19 @@ import { CreateCommunityParentSelectorComponent } from './dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component'; import { - ThemedCreateCommunityParentSelectorComponent + ThemedCreateCommunityParentSelectorComponent } from './dso-selector/modal-wrappers/create-community-parent-selector/themed-create-community-parent-selector.component'; import { CreateItemParentSelectorComponent } from './dso-selector/modal-wrappers/create-item-parent-selector/create-item-parent-selector.component'; import { - ThemedCreateItemParentSelectorComponent + ThemedCreateItemParentSelectorComponent } from './dso-selector/modal-wrappers/create-item-parent-selector/themed-create-item-parent-selector.component'; import { CreateCollectionParentSelectorComponent } from './dso-selector/modal-wrappers/create-collection-parent-selector/create-collection-parent-selector.component'; import { - ThemedCreateCollectionParentSelectorComponent + ThemedCreateCollectionParentSelectorComponent } from './dso-selector/modal-wrappers/create-collection-parent-selector/themed-create-collection-parent-selector.component'; import { CommunitySearchResultListElementComponent @@ -124,19 +124,19 @@ import { EditItemSelectorComponent } from './dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component'; import { - ThemedEditItemSelectorComponent + ThemedEditItemSelectorComponent } from './dso-selector/modal-wrappers/edit-item-selector/themed-edit-item-selector.component'; import { EditCommunitySelectorComponent } from './dso-selector/modal-wrappers/edit-community-selector/edit-community-selector.component'; import { - ThemedEditCommunitySelectorComponent + ThemedEditCommunitySelectorComponent } from './dso-selector/modal-wrappers/edit-community-selector/themed-edit-community-selector.component'; import { EditCollectionSelectorComponent } from './dso-selector/modal-wrappers/edit-collection-selector/edit-collection-selector.component'; import { - ThemedEditCollectionSelectorComponent + ThemedEditCollectionSelectorComponent } from './dso-selector/modal-wrappers/edit-collection-selector/themed-edit-collection-selector.component'; import { RoleDirective } from './roles/role.directive'; import { UserMenuComponent } from './auth-nav-menu/user-menu/user-menu.component'; @@ -242,14 +242,20 @@ import { MenuModule } from './menu/menu.module'; import { ListableNotificationObjectComponent } from './object-list/listable-notification-object/listable-notification-object.component'; -import { SupervisionGroupSelectorComponent } from './dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component'; +import { + SupervisionGroupSelectorComponent +} from './dso-selector/modal-wrappers/supervision-group-selector/supervision-group-selector.component'; import { EpersonGroupListComponent } from './form/eperson-group-list/eperson-group-list.component'; import { EpersonSearchBoxComponent } from './form/eperson-group-list/eperson-search-box/eperson-search-box.component'; import { GroupSearchBoxComponent } from './form/eperson-group-list/group-search-box/group-search-box.component'; import { ThemedCollectionDropdownComponent } from './collection-dropdown/themed-collection-dropdown.component'; import { MetadataFieldWrapperComponent } from './metadata-field-wrapper/metadata-field-wrapper.component'; -import { LogInExternalProviderComponent } from './log-in/methods/log-in-external-provider/log-in-external-provider.component'; - +import { + LogInExternalProviderComponent +} from './log-in/methods/log-in-external-provider/log-in-external-provider.component'; +import { + SupervisionOrderStatusComponent +} from './object-list/supervision-order-status/supervision-order-status.component'; const MODULES = [ @@ -452,18 +458,20 @@ const DIRECTIVES = [ ...COMPONENTS, ...ENTRY_COMPONENTS, ...DIRECTIVES, + SupervisionOrderStatusComponent, ], providers: [ ...PROVIDERS ], - exports: [ - ...MODULES, - ...PIPES, - ...COMPONENTS, - ...ENTRY_COMPONENTS, - ...DIRECTIVES, - TranslateModule, - ] + exports: [ + ...MODULES, + ...PIPES, + ...COMPONENTS, + ...ENTRY_COMPONENTS, + ...DIRECTIVES, + TranslateModule, + SupervisionOrderStatusComponent, + ] }) /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 47fbbaf518..892f686fb8 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2271,21 +2271,21 @@ "item.truncatable-part.show-less": "Collapse", - "item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", - "item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", - "item.search.result.delete-supervision.modal.cancel": "Cancel", + "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", - "item.search.result.delete-supervision.modal.confirm": "Delete", + "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", - "item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", - "item.search.result.notification.deleted.failure.title": "Failed to delete supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", - "item.search.result.notification.deleted.failure.content": "Failed to delete supervision order", + "workflow-item.search.result.list.element.supervised-by": "Supervised by:", - "item.search.result.list.element.supervised-by": "Supervised by:", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", From 851fe7869ed5c47089e0430e82542c4d08a89477 Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Sat, 11 Feb 2023 03:29:17 +0100 Subject: [PATCH 341/833] [CST-7757] Missing label --- src/assets/i18n/en.json5 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index bf32aebe47..fa6f2694fa 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4748,6 +4748,8 @@ "subscriptions.modal.new-subscription-form.submit": "Submit", + "subscriptions.modal.new-subscription-form.processing": "Processing...", + "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", "subscriptions.modal.delete.success": "Subscription deleted successfully", From c74ef49797cb0fe9e816cb9648a7503b7094304f Mon Sep 17 00:00:00 2001 From: cris Date: Sat, 11 Feb 2023 17:13:52 +0000 Subject: [PATCH 342/833] fixed issue in browser console --- .../mydspace-item-collection/item-collection.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/shared/object-collection/shared/mydspace-item-collection/item-collection.component.ts b/src/app/shared/object-collection/shared/mydspace-item-collection/item-collection.component.ts index 8f857540d4..2f2a20ede3 100644 --- a/src/app/shared/object-collection/shared/mydspace-item-collection/item-collection.component.ts +++ b/src/app/shared/object-collection/shared/mydspace-item-collection/item-collection.component.ts @@ -40,7 +40,9 @@ export class ItemCollectionComponent implements OnInit { */ ngOnInit() { - this.linkService.resolveLinks(this.object, followLink('workflowitem', {}, + this.linkService.resolveLinks(this.object, followLink('workflowitem', { + isOptional: true + }, followLink('collection',{}) )); this.collection$ = (this.object.workflowitem as Observable>).pipe( From eeda26e122859bfac8fcbc6ea806eae86c19431e Mon Sep 17 00:00:00 2001 From: aroman-arvo Date: Mon, 13 Feb 2023 10:42:56 +0100 Subject: [PATCH 343/833] 8408 - sort ordering is parametrized and used only when no text query is send. --- config/config.example.yml | 5 +++++ config/config.yml | 6 +++--- .../dso-selector/dso-selector.component.ts | 4 +++- .../create-community-parent-selector.component.ts | 6 ------ .../dso-selector-modal-wrapper.component.ts | 5 +++-- .../scope-selector-modal.component.ts | 7 +------ src/config/app-config.interface.ts | 2 ++ src/config/default-app-config.ts | 7 +++++++ src/config/discovery-sort.config.ts | 14 ++++++++++++++ src/environments/environment.test.ts | 4 ++++ 10 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 src/config/discovery-sort.config.ts diff --git a/config/config.example.yml b/config/config.example.yml index 9abf167b90..c5a9ea6f85 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -310,3 +310,8 @@ info: markdown: enabled: false mathjax: false + +# Default collection/community sorting order at Advanced search, Create/update community and collection when there are not a query. +collectionSelectionSort: + sortMetadata: "dc.title" + sortDirection: "ASC" \ No newline at end of file diff --git a/config/config.yml b/config/config.yml index b5eecd112f..38ac562b15 100644 --- a/config/config.yml +++ b/config/config.yml @@ -1,5 +1,5 @@ rest: - ssl: true - host: api7.dspace.org - port: 443 + ssl: false + host: localhost + port: 9090 nameSpace: /server diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts index 4b5d8c7614..52ca9224b1 100644 --- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts +++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts @@ -227,6 +227,8 @@ export class DSOSelectorComponent implements OnInit, OnDestroy { * @param useCache Whether or not to use the cache */ search(query: string, page: number, useCache: boolean = true): Observable>>> { + // default sort is only used when there is not query + var efectiveSort=query?null:this.sort; return this.searchService.search( new PaginatedSearchOptions({ query: query, @@ -234,7 +236,7 @@ export class DSOSelectorComponent implements OnInit, OnDestroy { pagination: Object.assign({}, this.defaultPagination, { currentPage: page }), - sort: this.sort + sort: efectiveSort }), null, useCache, diff --git a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts index f344c1c3f3..a7f583df50 100644 --- a/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/create-community-parent-selector/create-community-parent-selector.component.ts @@ -12,7 +12,6 @@ import { getCommunityCreateRoute, COMMUNITY_PARENT_PARAMETER } from '../../../../community-page/community-page-routing-paths'; -import {SortDirection, SortOptions} from '../../../../core/cache/models/sort-options.model'; /** * Component to wrap a button - for top communities - @@ -31,11 +30,6 @@ export class CreateCommunityParentSelectorComponent extends DSOSelectorModalWrap selectorTypes = [DSpaceObjectType.COMMUNITY]; action = SelectorActionType.CREATE; - /** - * Default DSO ordering - */ - defaultSort = new SortOptions('dc.title', SortDirection.ASC); - constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute, private router: Router) { super(activeModal, route); } diff --git a/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts b/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts index 2a25da2f72..fcb8aea9d2 100644 --- a/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts +++ b/src/app/shared/dso-selector/modal-wrappers/dso-selector-modal-wrapper.component.ts @@ -5,7 +5,8 @@ import { RemoteData } from '../../../core/data/remote-data'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model'; import { hasValue, isNotEmpty } from '../../empty.util'; -import {SortDirection, SortOptions} from '../../../core/cache/models/sort-options.model'; +import { SortDirection, SortOptions } from '../../../core/cache/models/sort-options.model'; +import { environment } from '../../../../environments/environment'; export enum SelectorActionType { CREATE = 'create', @@ -53,7 +54,7 @@ export abstract class DSOSelectorModalWrapperComponent implements OnInit { /** * Default DSO ordering */ - defaultSort = new SortOptions('dc.title', SortDirection.ASC); + defaultSort = new SortOptions(environment.collectionSelectionSort.sortMetadata, environment.collectionSelectionSort.sortDirection as SortDirection); constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute) { } diff --git a/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.ts b/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.ts index 416242520c..86c3010287 100644 --- a/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.ts +++ b/src/app/shared/search-form/scope-selector-modal/scope-selector-modal.component.ts @@ -4,7 +4,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { DSpaceObjectType } from '../../../core/shared/dspace-object-type.model'; import { DSOSelectorModalWrapperComponent, SelectorActionType } from '../../dso-selector/modal-wrappers/dso-selector-modal-wrapper.component'; import { DSpaceObject } from '../../../core/shared/dspace-object.model'; -import {SortDirection, SortOptions} from '../../../core/cache/models/sort-options.model'; + /** * Component to wrap a button - to select the entire repository - * and a list of parent communities - for scope selection @@ -33,11 +33,6 @@ export class ScopeSelectorModalComponent extends DSOSelectorModalWrapperComponen */ scopeChange = new EventEmitter(); - /** - * Default DSO ordering - */ - defaultSort = new SortOptions('dc.title', SortDirection.ASC); - constructor(protected activeModal: NgbActiveModal, protected route: ActivatedRoute) { super(activeModal, route); } diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index ce9c8b3bf7..cc7227d11e 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -20,6 +20,7 @@ import { InfoConfig } from './info-config.interface'; import { CommunityListConfig } from './community-list-config.interface'; import { HomeConfig } from './homepage-config.interface'; import { MarkdownConfig } from './markdown-config.interface'; +import { DiscoverySortConfig } from './discovery-sort.config'; interface AppConfig extends Config { ui: UIServerConfig; @@ -44,6 +45,7 @@ interface AppConfig extends Config { actuators: ActuatorsConfig info: InfoConfig; markdown: MarkdownConfig; + collectionSelectionSort: DiscoverySortConfig; } /** diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 276d2d7150..572f757f86 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -20,6 +20,7 @@ import { InfoConfig } from './info-config.interface'; import { CommunityListConfig } from './community-list-config.interface'; import { HomeConfig } from './homepage-config.interface'; import { MarkdownConfig } from './markdown-config.interface'; +import { DiscoverySortConfig } from './discovery-sort.config'; export class DefaultAppConfig implements AppConfig { production = false; @@ -385,4 +386,10 @@ export class DefaultAppConfig implements AppConfig { enabled: false, mathjax: false, }; + + // Configuration that determines the metadata sorting of community and collection edition and creation when there are not a search query. + collectionSelectionSort: DiscoverySortConfig = { + sortMetadata:"dc.title", + sortDirection:"ASC", + }; } diff --git a/src/config/discovery-sort.config.ts b/src/config/discovery-sort.config.ts new file mode 100644 index 0000000000..02428f70a8 --- /dev/null +++ b/src/config/discovery-sort.config.ts @@ -0,0 +1,14 @@ +import { Config } from './config.interface'; + +/** + * Config that determines a metadata sorting config. + * It's created mainly to sort by metadata community and collection edition and creation + */ +export class DiscoverySortConfig implements Config { + + public sortMetadata: string; + /** + * ASC / DESC values expected + */ + public sortDirection: string; +} diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 19eec26a14..2cdbee9c29 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -283,4 +283,8 @@ export const environment: BuildConfig = { enabled: false, mathjax: false, }, + collectionSelectionSort: { + sortMetadata:"dc.title", + sortDirection:"ASC", + }, }; From 363136027ec0e05d01e2a9d5c1ba6cbbc9dbba45 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 13 Feb 2023 10:36:13 +0100 Subject: [PATCH 344/833] [CST-7755] WIP revert changes on list components --- ...arch-result-list-element.component.spec.ts | 103 +------------ ...arch-result-list-element.component.spec.ts | 101 +------------ ...arch-result-list-element.component.spec.ts | 101 +------------ ...arch-result-list-element.component.spec.ts | 99 +------------ ...arch-result-list-element.component.spec.ts | 98 +------------ ...on-search-result-list-element.component.ts | 20 +-- ...arch-result-list-element.component.spec.ts | 103 +------------ ...table-object-component-loader.component.ts | 6 - .../abstract-listable-element.component.ts | 10 -- .../item/item-list-element.component.html | 2 +- .../object-list/object-list.component.html | 1 - .../object-list/object-list.component.ts | 5 - ...arch-result-list-element.component.spec.ts | 102 +------------ ...em-search-result-list-element.component.ts | 136 +----------------- 14 files changed, 16 insertions(+), 871 deletions(-) diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts index 3a0e73e46c..178ed86c40 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.spec.ts @@ -1,7 +1,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model'; import { JournalIssueSearchResultListElementComponent } from './journal-issue-search-result-list-element.component'; import { Item } from '../../../../../core/shared/item.model'; @@ -10,43 +10,9 @@ import { TruncatableService } from '../../../../../shared/truncatable/truncatabl import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; -import { PageInfo } from '../../../../../core/shared/page-info.model'; -import { buildPaginatedList } from '../../../../../core/data/paginated-list.model'; -import { GroupMock } from '../../../../../shared/testing/group-mock'; -import { hot } from 'jasmine-marbles'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../../../../shared/testing/eperson.mock'; -import { EPerson } from '../../../../../core/eperson/models/eperson.model'; -import { createPaginatedList } from '../../../../../shared/testing/utils.test'; let journalIssueListElementComponent: JournalIssueSearchResultListElementComponent; let fixture: ComponentFixture; -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); - -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); - -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); const mockItemWithMetadata: ItemSearchResult = Object.assign( new ItemSearchResult(), @@ -104,65 +70,12 @@ const enviromentNoThumbs = { } }; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); - -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('JournalIssueSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [JournalIssueSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {}}, - { provide: TranslateService, useValue: {}}, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -174,9 +87,6 @@ describe('JournalIssueSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(JournalIssueSearchResultListElementComponent); journalIssueListElementComponent = fixture.componentInstance; @@ -254,13 +164,6 @@ describe('JournalIssueSearchResultListElementComponent', () => { declarations: [JournalIssueSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - {provide: NotificationsService, useValue: {}}, - {provide: TranslateService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } ], @@ -278,9 +181,7 @@ describe('JournalIssueSearchResultListElementComponent', () => { describe('with environment.browseBy.showThumbnails set to false', () => { beforeEach(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); + journalIssueListElementComponent.object = mockItemWithMetadata; fixture.detectChanges(); }); diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-volume/journal-volume-search-result-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-volume/journal-volume-search-result-list-element.component.spec.ts index 67665403d1..71fa83a3b1 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-volume/journal-volume-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-volume/journal-volume-search-result-list-element.component.spec.ts @@ -1,7 +1,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model'; import { Item } from '../../../../../core/shared/item.model'; import { JournalVolumeSearchResultListElementComponent } from './journal-volume-search-result-list-element.component'; @@ -10,43 +10,10 @@ import { TruncatableService } from '../../../../../shared/truncatable/truncatabl import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; -import { PageInfo } from '../../../../../core/shared/page-info.model'; -import { buildPaginatedList } from '../../../../../core/data/paginated-list.model'; -import { GroupMock } from '../../../../../shared/testing/group-mock'; -import { hot } from 'jasmine-marbles'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; -import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../../../../shared/testing/eperson.mock'; -import { EPerson } from '../../../../../core/eperson/models/eperson.model'; -import { createPaginatedList } from '../../../../../shared/testing/utils.test'; let journalVolumeListElementComponent: JournalVolumeSearchResultListElementComponent; let fixture: ComponentFixture; -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); - -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); const mockItemWithMetadata: ItemSearchResult = Object.assign( new ItemSearchResult(), { @@ -102,65 +69,12 @@ const enviromentNoThumbs = { } }; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); - -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('JournalVolumeSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [JournalVolumeSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {}}, - { provide: TranslateService, useValue: {}}, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -172,9 +86,6 @@ describe('JournalVolumeSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(JournalVolumeSearchResultListElementComponent); journalVolumeListElementComponent = fixture.componentInstance; @@ -251,13 +162,6 @@ describe('JournalVolumeSearchResultListElementComponent', () => { declarations: [JournalVolumeSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - {provide: NotificationsService, useValue: {}}, - {provide: TranslateService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } ], @@ -269,9 +173,6 @@ describe('JournalVolumeSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(JournalVolumeSearchResultListElementComponent); journalVolumeListElementComponent = fixture.componentInstance; })); diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts index 63e8abda28..07970d7128 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal/journal-search-result-list-element.component.spec.ts @@ -1,7 +1,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { JournalSearchResultListElementComponent } from './journal-search-result-list-element.component'; import { Item } from '../../../../../core/shared/item.model'; import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe'; @@ -10,42 +10,9 @@ import { ItemSearchResult } from '../../../../../shared/object-collection/shared import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; -import { PageInfo } from '../../../../../core/shared/page-info.model'; -import { buildPaginatedList } from '../../../../../core/data/paginated-list.model'; -import { GroupMock } from '../../../../../shared/testing/group-mock'; -import { hot } from 'jasmine-marbles'; -import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { EPersonMock } from '../../../../../shared/testing/eperson.mock'; -import { EPerson } from '../../../../../core/eperson/models/eperson.model'; -import { createPaginatedList } from '../../../../../shared/testing/utils.test'; let journalListElementComponent: JournalSearchResultListElementComponent; let fixture: ComponentFixture; -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); - -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); const mockItemWithMetadata: ItemSearchResult = Object.assign( new ItemSearchResult(), @@ -98,65 +65,12 @@ const enviromentNoThumbs = { } }; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); - -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('JournalSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [JournalSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {}}, - { provide: TranslateService, useValue: {}}, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -168,9 +82,6 @@ describe('JournalSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(JournalSearchResultListElementComponent); journalListElementComponent = fixture.componentInstance; @@ -223,13 +134,6 @@ describe('JournalSearchResultListElementComponent', () => { declarations: [JournalSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - {provide: NotificationsService, useValue: {}}, - {provide: TranslateService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } ], @@ -241,9 +145,6 @@ describe('JournalSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(JournalSearchResultListElementComponent); journalListElementComponent = fixture.componentInstance; })); diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts index 102393ed8f..9609a9582a 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.spec.ts @@ -1,7 +1,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { OrgUnitSearchResultListElementComponent } from './org-unit-search-result-list-element.component'; import { Item } from '../../../../../core/shared/item.model'; import { TruncatePipe } from '../../../../../shared/utils/truncate.pipe'; @@ -12,41 +12,9 @@ import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../../../../shared/mocks/translate-loader.mock'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; -import { PageInfo } from '../../../../../core/shared/page-info.model'; -import { buildPaginatedList } from '../../../../../core/data/paginated-list.model'; -import { GroupMock } from '../../../../../shared/testing/group-mock'; -import { hot } from 'jasmine-marbles'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../../../../shared/testing/eperson.mock'; -import { EPerson } from '../../../../../core/eperson/models/eperson.model'; -import { createPaginatedList } from '../../../../../shared/testing/utils.test'; let orgUnitListElementComponent: OrgUnitSearchResultListElementComponent; let fixture: ComponentFixture; -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); - -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); const mockItemWithMetadata: ItemSearchResult = Object.assign( new ItemSearchResult(), @@ -97,52 +65,6 @@ const enviromentNoThumbs = { } }; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); - -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('OrgUnitSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ @@ -156,12 +78,6 @@ describe('OrgUnitSearchResultListElementComponent', () => { declarations: [ OrgUnitSearchResultListElementComponent , TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {}}, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -173,9 +89,6 @@ describe('OrgUnitSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(OrgUnitSearchResultListElementComponent); orgUnitListElementComponent = fixture.componentInstance; @@ -235,12 +148,6 @@ describe('OrgUnitSearchResultListElementComponent', () => { declarations: [OrgUnitSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - {provide: NotificationsService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } ], @@ -258,9 +165,7 @@ describe('OrgUnitSearchResultListElementComponent', () => { describe('with environment.browseBy.showThumbnails set to false', () => { beforeEach(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); + orgUnitListElementComponent.object = mockItemWithMetadata; fixture.detectChanges(); }); diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts index 25b3a37c83..31018520f6 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.spec.ts @@ -1,7 +1,7 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model'; import { PersonSearchResultListElementComponent } from './person-search-result-list-element.component'; import { Item } from '../../../../../core/shared/item.model'; @@ -12,44 +12,9 @@ import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service import { APP_CONFIG } from '../../../../../../config/app-config.interface'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../../../../shared/mocks/translate-loader.mock'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; -import { hot } from 'jasmine-marbles'; -import { PageInfo } from '../../../../../core/shared/page-info.model'; -import { GroupMock } from '../../../../../shared/testing/group-mock'; -import { buildPaginatedList } from '../../../../../core/data/paginated-list.model'; -import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../../../../shared/testing/eperson.mock'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { EPerson } from '../../../../../core/eperson/models/eperson.model'; -import { createPaginatedList } from '../../../../../shared/testing/utils.test'; let personListElementComponent: PersonSearchResultListElementComponent; let fixture: ComponentFixture; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); - -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); const mockItemWithMetadata: ItemSearchResult = Object.assign( new ItemSearchResult(), @@ -100,48 +65,6 @@ const enviromentNoThumbs = { } }; -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('PersonSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ @@ -155,12 +78,6 @@ describe('PersonSearchResultListElementComponent', () => { declarations: [PersonSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {} }, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -172,9 +89,6 @@ describe('PersonSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(PersonSearchResultListElementComponent); personListElementComponent = fixture.componentInstance; @@ -234,12 +148,6 @@ describe('PersonSearchResultListElementComponent', () => { declarations: [PersonSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService}, - {provide: NotificationsService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } ], @@ -257,9 +165,7 @@ describe('PersonSearchResultListElementComponent', () => { describe('with environment.browseBy.showThumbnails set to false', () => { beforeEach(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); + personListElementComponent.object = mockItemWithMetadata; fixture.detectChanges(); }); diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts index 09142fc02e..217d7baef9 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/person/person-search-result-list-element.component.ts @@ -9,14 +9,6 @@ import { import { TruncatableService } from '../../../../../shared/truncatable/truncatable.service'; import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service'; import { APP_CONFIG, AppConfig } from '../../../../../../config/app-config.interface'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; @listableObjectComponent('PersonSearchResult', ViewMode.ListElement) @Component({ @@ -32,17 +24,9 @@ export class PersonSearchResultListElementComponent extends ItemSearchResultList public constructor( protected truncatableService: TruncatableService, protected dsoNameService: DSONameService, - @Inject(APP_CONFIG) protected appConfig: AppConfig, - protected supervisionOrderDataService: SupervisionOrderDataService, - protected modalService: NgbModal, - protected notificationsService: NotificationsService, - protected translateService: TranslateService, - protected resourcePolicyService: ResourcePolicyDataService, - protected authService: AuthService, - protected epersonService: EPersonDataService, - protected authorizationService: AuthorizationDataService + @Inject(APP_CONFIG) protected appConfig: AppConfig ) { - super(truncatableService, dsoNameService, appConfig, supervisionOrderDataService, modalService, notificationsService, translateService, resourcePolicyService, authService, epersonService, authorizationService); + super(truncatableService, dsoNameService, appConfig); } /** diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts index 60487af8c8..0cb3e63e87 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/project/project-search-result-list-element.component.spec.ts @@ -1,6 +1,6 @@ import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { ItemSearchResult } from '../../../../../shared/object-collection/shared/item-search-result.model'; import { ProjectSearchResultListElementComponent } from './project-search-result-list-element.component'; import { Item } from '../../../../../core/shared/item.model'; @@ -10,43 +10,9 @@ import { DSONameService } from '../../../../../core/breadcrumbs/dso-name.service import { DSONameServiceMock } from '../../../../../shared/mocks/dso-name.service.mock'; import { By } from '@angular/platform-browser'; import { APP_CONFIG } from '../../../../../../config/app-config.interface'; -import { SupervisionOrderDataService } from '../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../shared/remote-data.utils'; -import { PageInfo } from '../../../../../core/shared/page-info.model'; -import { buildPaginatedList } from '../../../../../core/data/paginated-list.model'; -import { GroupMock } from '../../../../../shared/testing/group-mock'; -import { hot } from 'jasmine-marbles'; -import { AuthService } from '../../../../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../../../../core/data/feature-authorization/authorization-data.service'; -import { EPersonDataService } from '../../../../../core/eperson/eperson-data.service'; -import { ResourcePolicyDataService } from '../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthServiceStub } from '../../../../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../../../../shared/testing/eperson.mock'; -import { EPerson } from '../../../../../core/eperson/models/eperson.model'; -import { createPaginatedList } from '../../../../../shared/testing/utils.test'; let projectListElementComponent: ProjectSearchResultListElementComponent; let fixture: ComponentFixture; -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); - -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); - -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); const mockItemWithMetadata: ItemSearchResult = Object.assign( new ItemSearchResult(), @@ -98,65 +64,12 @@ const enviromentNoThumbs = { } }; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); - -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('ProjectSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ProjectSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {}}, - { provide: TranslateService, useValue: {}}, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -168,9 +81,6 @@ describe('ProjectSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(ProjectSearchResultListElementComponent); projectListElementComponent = fixture.componentInstance; @@ -223,13 +133,6 @@ describe('ProjectSearchResultListElementComponent', () => { declarations: [ProjectSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - {provide: NotificationsService, useValue: {}}, - {provide: TranslateService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } @@ -248,9 +151,7 @@ describe('ProjectSearchResultListElementComponent', () => { describe('with environment.browseBy.showThumbnails set to false', () => { beforeEach(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); + projectListElementComponent.object = mockItemWithMetadata; fixture.detectChanges(); }); diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 59ce71ff6c..6b75c59181 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -71,11 +71,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ @Input() showLabel = true; - /** - * Whether to show the supervision orders badges or not - */ - @Input() showSupervisionOrderBadges = false; - /** * The value to display for this element */ @@ -128,7 +123,6 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ protected inAndOutputNames: string[] = [ 'object', - 'showSupervisionOrderBadges', 'index', 'linkType', 'listID', diff --git a/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts b/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts index f292ac5b76..7d4e107b2b 100644 --- a/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts +++ b/src/app/shared/object-collection/shared/object-collection-element/abstract-listable-element.component.ts @@ -16,11 +16,6 @@ export class AbstractListableElementComponent { */ @Input() object: T; - /** - * The supervision orders to render in this list element - */ - @Input() supervisionOrders: T; - /** * The link type to determine the type of link rendered in this element */ @@ -46,11 +41,6 @@ export class AbstractListableElementComponent { */ @Input() showLabel = true; - /** - * Whether to show the supervision orders badges or not - */ - @Input() showSupervisionOrderBadges = false; - /** * The context we matched on to get this component */ diff --git a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html index 4bf45e7f3b..3877e2f335 100644 --- a/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html +++ b/src/app/shared/object-list/item-list-element/item-types/item/item-list-element.component.html @@ -1 +1 @@ - + diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html index a0ef3e1cb9..b8712b85c5 100644 --- a/src/app/shared/object-list/object-list.component.html +++ b/src/app/shared/object-list/object-list.component.html @@ -31,7 +31,6 @@ [context]="context" [linkType]="linkType" [listID]="selectionConfig?.listId" - [showSupervisionOrderBadges]="showSupervisionOrderBadges" (contentChange)="contentChange.emit($event)"> diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts index 9d064115e6..65e2b508da 100644 --- a/src/app/shared/object-list/object-list.component.ts +++ b/src/app/shared/object-list/object-list.component.ts @@ -81,11 +81,6 @@ export class ObjectListComponent { */ @Input() showPaginator = true; - /** - * Whether to show the supervision orders badges or not - */ - @Input() showSupervisionOrderBadges = false; - /** * Emit when one of the listed object has changed. */ diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts index d4ca14c105..7665b7d64e 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { of as observableOf, of } from 'rxjs'; +import { of as observableOf } from 'rxjs'; import { ItemSearchResultListElementComponent } from './item-search-result-list-element.component'; import { Item } from '../../../../../../core/shared/item.model'; import { TruncatePipe } from '../../../../../utils/truncate.pipe'; @@ -10,44 +10,10 @@ import { ItemSearchResult } from '../../../../../object-collection/shared/item-s import { DSONameService } from '../../../../../../core/breadcrumbs/dso-name.service'; import { DSONameServiceMock, UNDEFINED_NAME } from '../../../../../mocks/dso-name.service.mock'; import { APP_CONFIG } from '../../../../../../../config/app-config.interface'; -import { SupervisionOrderDataService } from '../../../../../../core/supervision-order/supervision-order-data.service'; -import { NotificationsService } from '../../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../../../../shared/remote-data.utils'; -import { PageInfo } from '../../../../../../core/shared/page-info.model'; -import { buildPaginatedList } from '../../../../../../core/data/paginated-list.model'; -import { GroupMock } from '../../../../../../shared/testing/group-mock'; -import { hot } from 'jasmine-marbles'; -import { AuthService } from '../../../../../../core/auth/auth.service'; -import { AuthorizationDataService } from '../../../../../../core/data/feature-authorization/authorization-data.service'; -import { EPersonDataService } from '../../../../../../core/eperson/eperson-data.service'; -import { ResourcePolicyDataService } from '../../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthServiceStub } from '../../../../../../shared/testing/auth-service.stub'; -import { EPersonMock } from '../../../../../../shared/testing/eperson.mock'; -import { EPerson } from 'src/app/core/eperson/models/eperson.model'; -import { createPaginatedList } from 'src/app/shared/testing/utils.test'; let publicationListElementComponent: ItemSearchResultListElementComponent; let fixture: ComponentFixture; const dcTitle = 'This is just another title'; -let authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) -}); - -const authService: AuthServiceStub = Object.assign(new AuthServiceStub(), { - getAuthenticatedUserFromStore: () => { - return of(EPersonMock); - } -}); -const user = Object.assign(new EPerson(), { - id: 'userId', - groups: createSuccessfulRemoteDataObject$(createPaginatedList([])), - _links: { self: { href: 'test.com/uuid/1234567654321' } } -}); -const epersonService = jasmine.createSpyObj('epersonService', { - findById: createSuccessfulRemoteDataObject$(user), -}); - const mockItemWithMetadata: ItemSearchResult = Object.assign(new ItemSearchResult(), { hitHighlights: { 'dc.title': [{ @@ -218,65 +184,12 @@ const enviromentNoThumbs = { } }; -const supervisionOrderDataService: any = jasmine.createSpyObj('supervisionOrderDataService', { - searchByItem: jasmine.createSpy('searchByItem'), -}); - -const supervisionOrder: any = { - id: '1', - type: 'supervisionOrder', - uuid: 'supervision-order-1', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; -const anothersupervisionOrder: any = { - id: '2', - type: 'supervisionOrder', - uuid: 'supervision-order-2', - _links: { - item: { - href: 'https://rest.api/rest/api/eperson' - }, - group: { - href: 'https://rest.api/rest/api/group' - }, - self: { - href: 'https://rest.api/rest/api/supervisionorders/1' - }, - }, - item: observableOf(createSuccessfulRemoteDataObject({})), - group: observableOf(createSuccessfulRemoteDataObject(GroupMock)) -}; - -const pageInfo = new PageInfo(); -const array = [supervisionOrder, anothersupervisionOrder]; -const paginatedList = buildPaginatedList(pageInfo, array); -const paginatedListRD = createSuccessfulRemoteDataObject(paginatedList); - describe('ItemSearchResultListElementComponent', () => { beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ItemSearchResultListElementComponent, TruncatePipe], providers: [ { provide: TruncatableService, useValue: {} }, - { provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - { provide: NotificationsService, useValue: {}}, - { provide: TranslateService, useValue: {}}, - { provide: ResourcePolicyDataService, useValue: {}}, - { provide: AuthService, useValue: authService}, - { provide: EPersonDataService, useValue: epersonService}, - { provide: AuthorizationDataService, useValue: authorizationService}, { provide: DSONameService, useClass: DSONameServiceMock }, { provide: APP_CONFIG, useValue: environmentUseThumbs } ], @@ -288,9 +201,6 @@ describe('ItemSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(ItemSearchResultListElementComponent); publicationListElementComponent = fixture.componentInstance; @@ -463,13 +373,6 @@ describe('ItemSearchResultListElementComponent', () => { declarations: [ItemSearchResultListElementComponent, TruncatePipe], providers: [ {provide: TruncatableService, useValue: {}}, - {provide: SupervisionOrderDataService, useValue: supervisionOrderDataService }, - {provide: NotificationsService, useValue: {}}, - {provide: TranslateService, useValue: {}}, - {provide: ResourcePolicyDataService, useValue: {}}, - {provide: AuthService, useValue: authService}, - {provide: EPersonDataService, useValue: epersonService}, - {provide: AuthorizationDataService, useValue: authorizationService}, {provide: DSONameService, useClass: DSONameServiceMock}, { provide: APP_CONFIG, useValue: enviromentNoThumbs } ], @@ -481,9 +384,6 @@ describe('ItemSearchResultListElementComponent', () => { })); beforeEach(waitForAsync(() => { - supervisionOrderDataService.searchByItem.and.returnValue(hot('a|', { - a: paginatedListRD - })); fixture = TestBed.createComponent(ItemSearchResultListElementComponent); publicationListElementComponent = fixture.componentInstance; })); diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts index 7ed96fdc68..f84ae642ad 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts @@ -1,37 +1,10 @@ -import { Component, Inject } from '@angular/core'; -import { - listableObjectComponent -} from '../../../../../object-collection/shared/listable-object/listable-object.decorator'; +import { Component } from '@angular/core'; +import { listableObjectComponent } from '../../../../../object-collection/shared/listable-object/listable-object.decorator'; import { ViewMode } from '../../../../../../core/shared/view-mode.model'; import { ItemSearchResult } from '../../../../../object-collection/shared/item-search-result.model'; import { SearchResultListElementComponent } from '../../../search-result-list-element.component'; import { Item } from '../../../../../../core/shared/item.model'; import { getItemPageRoute } from '../../../../../../item-page/item-page-routing-paths'; -import { SupervisionOrderDataService } from '../../../../../../core/supervision-order/supervision-order-data.service'; -import { TruncatableService } from '../../../../../../shared/truncatable/truncatable.service'; -import { DSONameService } from '../../../../../../core/breadcrumbs/dso-name.service'; -import { APP_CONFIG, AppConfig } from '../../../../../../../config/app-config.interface'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { combineLatest, filter, map, Observable, switchMap, take } from 'rxjs'; -import { ConfirmationModalComponent } from '../../../../../../shared/confirmation-modal/confirmation-modal.component'; -import { hasValue } from '../../../../../../shared/empty.util'; -import { NotificationsService } from '../../../../../../shared/notifications/notifications.service'; -import { TranslateService } from '@ngx-translate/core'; -import { followLink } from '../../../../../../shared/utils/follow-link-config.model'; -import { - getAllSucceededRemoteData, - getAllSucceededRemoteListPayload, - getFirstSucceededRemoteDataPayload, - getRemoteDataPayload -} from '../../../../../../core/shared/operators'; -import { SupervisionOrder } from '../../../../../../core/supervision-order/models/supervision-order.model'; -import { Group } from '../../../../../../core/eperson/models/group.model'; -import { ResourcePolicyDataService } from '../../../../../../core/resource-policy/resource-policy-data.service'; -import { AuthService } from '../../../../../../core/auth/auth.service'; -import { EPerson } from '../../../../../../core/eperson/models/eperson.model'; -import { EPersonDataService } from '../../../../../../core/eperson/eperson-data.service'; -import { AuthorizationDataService } from '../../../../../../core/data/feature-authorization/authorization-data.service'; -import { FeatureID } from '../../../../../../core/data/feature-authorization/feature-id'; @listableObjectComponent('PublicationSearchResult', ViewMode.ListElement) @listableObjectComponent(ItemSearchResult, ViewMode.ListElement) @@ -44,8 +17,6 @@ import { FeatureID } from '../../../../../../core/data/feature-authorization/fea * The component for displaying a list element for an item search result of the type Publication */ export class ItemSearchResultListElementComponent extends SearchResultListElementComponent { - messagePrefix = 'item.search.result'; - /** * Route to the item's page */ @@ -56,112 +27,9 @@ export class ItemSearchResultListElementComponent extends SearchResultListElemen */ showThumbnails: boolean; - /** - * List of the supervision orders combined with the group - */ - supervisionOrder$: Observable<{ supervisionOrder: SupervisionOrder; group: Group; }[]>; - - /** - * The groups the user belongs to - */ - groups: Group[]; - - constructor( - protected truncatableService: TruncatableService, - protected dsoNameService: DSONameService, - @Inject(APP_CONFIG) protected appConfig: AppConfig, - protected supervisionOrderDataService: SupervisionOrderDataService, - protected modalService: NgbModal, - protected notificationsService: NotificationsService, - protected translateService: TranslateService, - protected resourcePolicyService: ResourcePolicyDataService, - protected authService: AuthService, - protected epersonService: EPersonDataService, - protected authorizationService: AuthorizationDataService - ) { super(truncatableService, dsoNameService, appConfig); } - ngOnInit(): void { super.ngOnInit(); this.showThumbnails = this.appConfig.browseBy.showThumbnails; - let isAdmin = false; - this.authorizationService.isAuthorized(FeatureID.AdministratorOf).subscribe(isadmin => { - isAdmin = isadmin; - }); - - this.authService.getAuthenticatedUserFromStore().pipe( - filter((user: EPerson) => hasValue(user.id)), - switchMap((user: EPerson) => this.epersonService.findById(user.id, true, true, followLink('groups'))), - getAllSucceededRemoteData(), - getRemoteDataPayload(), - switchMap((user: EPerson) => user.groups), - ).subscribe(groups => { - this.groups = groups?.payload?.page; - }); - this.itemPageRoute = getItemPageRoute(this.dso); - if (this.supervisionOrders) { - this.resourcePolicyService.searchByResource( - this.dso.uuid, null, false, true, - followLink('eperson'), followLink('group') - ).pipe( - getAllSucceededRemoteData(), - ).subscribe((result) => { - this.supervisionOrder$ = this.supervisionOrderDataService.searchByItem(this.dso.uuid, false, true, followLink('group')).pipe( - getAllSucceededRemoteListPayload(), - switchMap((supervisionOrders: SupervisionOrder[]) => { - const supervisionOrdersArray = supervisionOrders.map((supervisionOrder: SupervisionOrder) => { - return supervisionOrder.group.pipe( - getFirstSucceededRemoteDataPayload(), - map((group: Group) => { - let isAuthorized = false; - result.payload.page.forEach(resourcePolicy => { - resourcePolicy.group.subscribe(res => { - if (isAdmin || (res.payload && res.payload.uuid === group.uuid && this.groups.find(groups => groups.uuid === group.uuid))) { - isAuthorized = true; - } - }); - }); - return isAuthorized ? ({ supervisionOrder, group }) : null; - }), - ); - }); - return combineLatest(supervisionOrdersArray).pipe( - map(array => array.filter(hasValue)) - ); - })); - }); - } - } - - /** - * Deletes the Group from the Repository. The Group will be the only that this form is showing. - * It'll either show a success or error message depending on whether the delete was successful or not. - */ - deleteSupervisionOrder(supervisionOrder) { - const modalRef = this.modalService.open(ConfirmationModalComponent); - modalRef.componentInstance.dso = supervisionOrder.group; - modalRef.componentInstance.headerLabel = this.messagePrefix + '.delete-supervision.modal.header'; - modalRef.componentInstance.infoLabel = this.messagePrefix + '.delete-supervision.modal.info'; - modalRef.componentInstance.cancelLabel = this.messagePrefix + '.delete-supervision.modal.cancel'; - modalRef.componentInstance.confirmLabel = this.messagePrefix + '.delete-supervision.modal.confirm'; - modalRef.componentInstance.brandColor = 'danger'; - modalRef.componentInstance.confirmIcon = 'fas fa-trash'; - modalRef.componentInstance.response.pipe(take(1)).subscribe((confirm: boolean) => { - if (confirm) { - if (hasValue(supervisionOrder.supervisionOrder.id)) { - this.supervisionOrderDataService.delete(supervisionOrder.supervisionOrder.id) - .subscribe((rd: boolean) => { - if (rd) { - this.supervisionOrderDataService.searchByItem(this.dso.uuid, null, null, followLink('group')); - this.notificationsService.success(this.translateService.get(this.messagePrefix + '.notification.deleted.success', { name: supervisionOrder.group._name })); - } else { - this.notificationsService.error( - this.translateService.get(this.messagePrefix + '.notification.deleted.failure.title', { name: supervisionOrder.group._name }), - this.translateService.get(this.messagePrefix + '.notification.deleted.failure.content')); - } - }); - } - } - }); } } From e2668cdf972e22ee5142427d551e48956848e342 Mon Sep 17 00:00:00 2001 From: aroman-arvo Date: Mon, 13 Feb 2023 12:22:07 +0100 Subject: [PATCH 345/833] DS-8408 - lint errors --- .../dso-selector/dso-selector/dso-selector.component.ts | 2 +- src/config/default-app-config.ts | 4 ++-- src/config/discovery-sort.config.ts | 2 +- src/environments/environment.test.ts | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts index 52ca9224b1..05fb512c9a 100644 --- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts +++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts @@ -228,7 +228,7 @@ export class DSOSelectorComponent implements OnInit, OnDestroy { */ search(query: string, page: number, useCache: boolean = true): Observable>>> { // default sort is only used when there is not query - var efectiveSort=query?null:this.sort; + var efectiveSort=query ? null : this.sort; return this.searchService.search( new PaginatedSearchOptions({ query: query, diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 095a20a4e5..89a627f459 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -425,7 +425,7 @@ export class DefaultAppConfig implements AppConfig { // Configuration that determines the metadata sorting of community and collection edition and creation when there are not a search query. collectionSelectionSort: DiscoverySortConfig = { - sortMetadata:"dc.title", - sortDirection:"ASC", + sortMetadata:'dc.title', + sortDirection:'ASC', }; } diff --git a/src/config/discovery-sort.config.ts b/src/config/discovery-sort.config.ts index 02428f70a8..3f08b3fb17 100644 --- a/src/config/discovery-sort.config.ts +++ b/src/config/discovery-sort.config.ts @@ -1,7 +1,7 @@ import { Config } from './config.interface'; /** - * Config that determines a metadata sorting config. + * Config that determines a metadata sorting config. * It's created mainly to sort by metadata community and collection edition and creation */ export class DiscoverySortConfig implements Config { diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index c352cdca92..8b132dab60 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -298,8 +298,8 @@ export const environment: BuildConfig = { mathjax: false, }, collectionSelectionSort: { - sortMetadata:"dc.title", - sortDirection:"ASC", + sortMetadata:'dc.title', + sortDirection:'ASC', }, vocabularies: [ From 0121e6d895de30c6c1054b8087fa6ecb1b7dd0bd Mon Sep 17 00:00:00 2001 From: aroman-arvo Date: Mon, 13 Feb 2023 12:34:13 +0100 Subject: [PATCH 346/833] DS-8408 - more lint problems --- .../shared/dso-selector/dso-selector/dso-selector.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts index 05fb512c9a..fe64c0a41e 100644 --- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts +++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts @@ -228,7 +228,7 @@ export class DSOSelectorComponent implements OnInit, OnDestroy { */ search(query: string, page: number, useCache: boolean = true): Observable>>> { // default sort is only used when there is not query - var efectiveSort=query ? null : this.sort; + let efectiveSort = query ? null : this.sort; return this.searchService.search( new PaginatedSearchOptions({ query: query, From 078bdd287fbeca3912cc894f2356241925172081 Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Mon, 13 Feb 2023 15:45:56 +0100 Subject: [PATCH 347/833] [CST-7757] Fix delete message --- .../subscription-modal.component.html | 2 +- .../subscription-modal.component.ts | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html index 0e723a8140..a71498f002 100644 --- a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html +++ b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.html @@ -27,7 +27,7 @@
    -

    {{'subscriptions.modal.delete-info' | translate}}

    +

    {{'subscriptions.modal.delete-info' | translate}}

    - + \ No newline at end of file diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index fa6f2694fa..3491c066a1 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4635,7 +4635,7 @@ "submission.workflow.generic.delete": "Delete", - "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Select this option if you would to discard this item, select \"Delete\". You will then be asked to confirm it.", "submission.workflow.generic.edit": "Edit", From 0f25f9f18fb90967962217cdb80dd2dba251666b Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 14 Feb 2023 11:24:08 +0100 Subject: [PATCH 353/833] [CST-8914] Add flag to show/hide csv export button --- .../search-page/search-page.component.html | 2 +- .../search-results.component.html | 2 +- .../search-results.component.ts | 5 +++++ .../themed-search-results.component.ts | 4 +++- src/app/shared/search/search.component.html | 21 ++++++++++--------- src/app/shared/search/search.component.ts | 5 +++++ .../shared/search/themed-search.component.ts | 4 +++- 7 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/app/search-page/search-page.component.html b/src/app/search-page/search-page.component.html index 73a952332f..36ba53a885 100644 --- a/src/app/search-page/search-page.component.html +++ b/src/app/search-page/search-page.component.html @@ -1 +1 @@ - + diff --git a/src/app/shared/search/search-results/search-results.component.html b/src/app/shared/search/search-results/search-results.component.html index 44498c3cab..1e8c81e454 100644 --- a/src/app/shared/search/search-results/search-results.component.html +++ b/src/app/shared/search/search-results/search-results.component.html @@ -1,6 +1,6 @@

    {{ (configuration ? configuration + '.search.results.head' : 'search.results.head') | translate }}

    - +
    { - protected inAndOutputNames: (keyof SearchResultsComponent & keyof this)[] = ['linkType', 'searchResults', 'searchConfig', 'sortConfig', 'viewMode', 'configuration', 'disableHeader', 'selectable', 'context', 'hidePaginationDetail', 'selectionConfig', 'contentChange', 'deselectObject', 'selectObject']; + protected inAndOutputNames: (keyof SearchResultsComponent & keyof this)[] = ['linkType', 'searchResults', 'searchConfig', 'showCsvExport', 'sortConfig', 'viewMode', 'configuration', 'disableHeader', 'selectable', 'context', 'hidePaginationDetail', 'selectionConfig', 'contentChange', 'deselectObject', 'selectObject']; @Input() linkType: CollectionElementLinkType; @@ -29,6 +29,8 @@ export class ThemedSearchResultsComponent extends ThemedComponent
    + [searchConfig]="searchOptions$ | async" + [configuration]="(currentConfiguration$ | async)" + [disableHeader]="!searchEnabled" + [linkType]="linkType" + [context]="(currentContext$ | async)" + [selectable]="selectable" + [selectionConfig]="selectionConfig" + [showCsvExport]="showCsvExport" + (contentChange)="onContentChange($event)" + (deselectObject)="deselectObject.emit($event)" + (selectObject)="selectObject.emit($event)">
    diff --git a/src/app/shared/search/search.component.ts b/src/app/shared/search/search.component.ts index c094e37ef2..b8426bc635 100644 --- a/src/app/shared/search/search.component.ts +++ b/src/app/shared/search/search.component.ts @@ -117,6 +117,11 @@ export class SearchComponent implements OnInit { */ @Input() selectionConfig: SelectionConfig; + /** + * A boolean representing if show csv export button + */ + @Input() showCsvExport = false; + /** * A boolean representing if show search sidebar button */ diff --git a/src/app/shared/search/themed-search.component.ts b/src/app/shared/search/themed-search.component.ts index 64a2befeb2..bdeb724779 100644 --- a/src/app/shared/search/themed-search.component.ts +++ b/src/app/shared/search/themed-search.component.ts @@ -19,7 +19,7 @@ import { ListableObject } from '../object-collection/shared/listable-object.mode templateUrl: '../theme-support/themed.component.html', }) export class ThemedSearchComponent extends ThemedComponent { - protected inAndOutputNames: (keyof SearchComponent & keyof this)[] = ['configurationList', 'context', 'configuration', 'fixedFilterQuery', 'useCachedVersionIfAvailable', 'inPlaceSearch', 'linkType', 'paginationId', 'searchEnabled', 'sideBarWidth', 'searchFormPlaceholder', 'selectable', 'selectionConfig', 'showSidebar', 'showViewModes', 'useUniquePageId', 'viewModeList', 'showScopeSelector', 'resultFound', 'deselectObject', 'selectObject', 'trackStatistics']; + protected inAndOutputNames: (keyof SearchComponent & keyof this)[] = ['configurationList', 'context', 'configuration', 'fixedFilterQuery', 'useCachedVersionIfAvailable', 'inPlaceSearch', 'linkType', 'paginationId', 'searchEnabled', 'sideBarWidth', 'searchFormPlaceholder', 'selectable', 'selectionConfig', 'showCsvExport', 'showSidebar', 'showViewModes', 'useUniquePageId', 'viewModeList', 'showScopeSelector', 'resultFound', 'deselectObject', 'selectObject', 'trackStatistics']; @Input() configurationList: SearchConfigurationOption[] = []; @@ -47,6 +47,8 @@ export class ThemedSearchComponent extends ThemedComponent { @Input() selectionConfig: SelectionConfig; + @Input() showCsvExport = false; + @Input() showSidebar = true; @Input() showViewModes = true; From d810cbcc8fea2aea627223f46cd25c8a964c9390 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 15 Feb 2023 11:36:56 +0300 Subject: [PATCH 354/833] src/assets/i18n: Improve English strings for file upload Simple improvement to the wording in the file upload section of the item submission form. Also add a period at the end of the string. Fixes: #2096 --- src/assets/i18n/ar.json5 | 4 ++-- src/assets/i18n/bn.json5 | 2 +- src/assets/i18n/ca.json5 | 2 +- src/assets/i18n/cs.json5 | 4 ++-- src/assets/i18n/de.json5 | 2 +- src/assets/i18n/en.json5 | 2 +- src/assets/i18n/es.json5 | 2 +- src/assets/i18n/fi.json5 | 2 +- src/assets/i18n/fr.json5 | 2 +- src/assets/i18n/gd.json5 | 2 +- src/assets/i18n/hu.json5 | 2 +- src/assets/i18n/ja.json5 | 4 ++-- src/assets/i18n/kk.json5 | 2 +- src/assets/i18n/lv.json5 | 2 +- src/assets/i18n/nl.json5 | 2 +- src/assets/i18n/pt-BR.json5 | 2 +- src/assets/i18n/pt-PT.json5 | 2 +- src/assets/i18n/sv.json5 | 2 +- src/assets/i18n/sw.json5 | 4 ++-- src/assets/i18n/tr.json5 | 2 +- src/assets/i18n/uk.json5 | 2 +- 21 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/assets/i18n/ar.json5 b/src/assets/i18n/ar.json5 index 24e6e14603..1edbdf7981 100644 --- a/src/assets/i18n/ar.json5 +++ b/src/assets/i18n/ar.json5 @@ -6459,9 +6459,9 @@ // TODO New key - Add a translation "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // TODO New key - Add a translation - "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // "submission.sections.upload.no-entry": "No", // TODO New key - Add a translation diff --git a/src/assets/i18n/bn.json5 b/src/assets/i18n/bn.json5 index 55ec1820dd..8b903c4a65 100644 --- a/src/assets/i18n/bn.json5 +++ b/src/assets/i18n/bn.json5 @@ -5803,7 +5803,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "অনুগ্রহ করে মনে রাখবেন যে {{collectionName}} সংগ্রহে আপলোড করা ফাইলগুলি অ্যাক্সেসযোগ্য হবে, একক ফাইলের জন্য স্পষ্টভাবে যা নির্ধারণ করা হয়েছে তা ছাড়াও, নিম্নলিখিত গ্রুপ(গুলি) সহ:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "এখানে আপনি বর্তমানে আইটেমটিতে সমস্ত ফাইল পাবেন। আপনি ফাইল মেটাডেটা এবং অ্যাক্সেস শর্তাদি আপডেট করতে পারেন অথবা অতিরিক্ত ফাইল আপলোড করুন - পৃষ্ঠাটিতে সর্বত্র ড্র্যাগ করুন এবং ড্রপ করুন ", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/ca.json5 b/src/assets/i18n/ca.json5 index 24698baac0..246a92061c 100644 --- a/src/assets/i18n/ca.json5 +++ b/src/assets/i18n/ca.json5 @@ -6353,7 +6353,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Tingueu en compte que els fitxers carregats a la col·lecció {{ collectionName }} seran accessibles, a més del que es decideixi explícitament per al fitxer, per als grups següents:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Aquí trobareu tots els fitxers que es troben actualment a l'ítem. Podeu actualitzar les metadades del fitxer i les condicions d'accés o incloure fitxers addicionals simplement arrossegant i deixant anar a qualsevol lloc de la pàgina", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5 index a04e89b2c3..5ed1474384 100644 --- a/src/assets/i18n/cs.json5 +++ b/src/assets/i18n/cs.json5 @@ -6327,9 +6327,9 @@ // TODO New key - Add a translation "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // TODO New key - Add a translation - "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // "submission.sections.upload.no-entry": "No", // TODO New key - Add a translation diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index c1979be6b6..82d422621c 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -5203,7 +5203,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Bitte beachten Sie, dass in diese Sammlung {{collectionName}} hochgeladene Dateien zugüglich zu dem, was für einzelne Dateien entschieden wurde, für folgende Gruppe(n) zugänglich sein:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Hier finden Sie alle Dateien, die aktuell zum Item gehören. Sie können ihre Metadaten und Zugriffsrechte bearbeiten oder weitere Dateien per Drag & Drop hinzufügen.", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 8fcac7d040..fc4c6aa74d 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4581,7 +4581,7 @@ "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index ae41bfdcb5..3184e4f22b 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -6353,7 +6353,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Tenga en cuenta que los archivos cargados en la colección {{ collectionName }} serán accesibles, además de lo que se decida explícitamente para el fichero, para los siguientes grupos:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Aquí encontrará todos los archivos que se encuentran actualmente en el ítem. Puede actualizar los metadatos del fichero y las condiciones de acceso e incluir ficheros adicionales simplemente arrastrando-y-soltando en cualquier lugar de la página", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index 2a077006cc..05ae06d46b 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -4914,7 +4914,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Yksittäisten tiedostojen pääsyrajoitusten lisäksi {{collectionName}}-kokoelmaan ladatut tiedostot ovat seuraavien ryhmien saatavilla:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Tietueen kaikki tiedostot on lueteltu tässä. Voit päivittää tiedoston metadataa ja pääsyehtoja tai ladata lisää tiedostoja raahaamalla ne mihin hyvänsä sivun kohtaan", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index 381e13a743..1e042c81fd 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -5670,7 +5670,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Veuillez noter que, en complément des accès spécifiquement accordés pour le fichier, les fichiers téléchargés dans la collection {{collectionName}} seront accessibles par défaut au(x) groupe(s) suivant(s) :", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Vous trouverez ici tous les fichiers actuellement associés à l'Item. Vous pouvez éditer les métadonnés et les niveaux d'accès de ce(s) fichier(s) ou télécharger des fichiers complémentaires simplement en les glissant n'importe où sur cette page", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/gd.json5 b/src/assets/i18n/gd.json5 index 083de54781..4584145452 100644 --- a/src/assets/i18n/gd.json5 +++ b/src/assets/i18n/gd.json5 @@ -5801,7 +5801,7 @@ // TODO New key - Add a translation "submission.sections.upload.header.policy.default.withlist": "Thoir fa-near gum bi cothrom air faidhlichean a chaidh a luchdachadh gu cruinneachadh {{collectionName}}, cho math ris na chaidh a cho-dhùnadh airson an fhaidhle air leth, aig a' bhuidheann/na buidhnean a leanas:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "An seo gheibh thu na faidhlichean gu lèir san nì an-dràsta. Is urrainn dhut metadata an fhaidhle ùrachadh agus cothrom fhaighinn air cumhachan no faidhlichean eile a luchdachadh suas le bhith gan slaodadh agus gan leigeil às air feadh na duilleig", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/hu.json5 b/src/assets/i18n/hu.json5 index 0e73e9dbae..bfa4a53ccf 100644 --- a/src/assets/i18n/hu.json5 +++ b/src/assets/i18n/hu.json5 @@ -4924,7 +4924,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Kérjük, vegye figyelembe, hogy a {{collectionName}} gyűjteménybe feltöltött állományok elérhetők lesznek, azon kívül amit az egyedi állományokról kifejezetten eldöntött, a következő csoport(ok)ban:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Itt megtalálja a tárgyban lévő valamennyi állományt. Frissítheti az állomány metaadatait és hozzáférési feltételeit vagy feltölthet további állományokat azzal, hogy behúzza azokat bárhova az oldalra", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/ja.json5 b/src/assets/i18n/ja.json5 index 71b32cf70b..83a755c923 100644 --- a/src/assets/i18n/ja.json5 +++ b/src/assets/i18n/ja.json5 @@ -6459,9 +6459,9 @@ // TODO New key - Add a translation "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // TODO New key - Add a translation - "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // "submission.sections.upload.no-entry": "No", // TODO New key - Add a translation diff --git a/src/assets/i18n/kk.json5 b/src/assets/i18n/kk.json5 index b661ce21d3..0fd092df02 100644 --- a/src/assets/i18n/kk.json5 +++ b/src/assets/i18n/kk.json5 @@ -6283,7 +6283,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "{{collectionName}} жинағына жүктелген файлдар жеке файл үшін нақты анықталғаннан басқа, келесі топпен (топтармен) қол жетімді болатындығын ескеріңіз:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Мұнда сіз осы элементтегі барлық файлдарды таба аласыз. Файл метадеректерін және кіру шарттарын жаңартуға немесе қосымша файлдарды олардыбетінде сүйреп апару арқылы жүктеуге болады.", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/lv.json5 b/src/assets/i18n/lv.json5 index e00ad3517b..79ff8ce855 100644 --- a/src/assets/i18n/lv.json5 +++ b/src/assets/i18n/lv.json5 @@ -5379,7 +5379,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Lūdzu, ņemiet vērā, ka augšupielādētie faili kolekcijā {{collectionName}} būs pieejami papildus tam, kas ir skaidri noteikts par atsevišķu failu, ar šādām grupām:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Šeit atradīsit visus failus, kas pašlaik atrodas materiālā. Varat atjaunināt failu metadatus un piekļuves nosacījumus vai augšupielādēt papildu failus, vienkārši ievelkot un atstājot tos visur lapā", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/nl.json5 b/src/assets/i18n/nl.json5 index b02e3a5276..1ebdeaa566 100644 --- a/src/assets/i18n/nl.json5 +++ b/src/assets/i18n/nl.json5 @@ -5752,7 +5752,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Let op: bestanden in de collectie {{collectionName}} zullen niet alleen toegankelijk zijn volgens de expliciet toegekende rechten per bestand, maar ook volgens de volgende groep(en):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Hier vindt u alle bestanden van het item. U kunt de metadata en toegangsrechten bewerken of meer bestanden toevoegen door ze naar deze pagina te slepen.", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index f68436d00b..7dca26aa4e 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -6066,7 +6066,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Por favor note que arquivos enviados a coleção {{collectionName}} serão acessíveis, de acordo com o que está explicitamente definido no arquivo, no(s) seguinte(s) grupo(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Aqui vocẽ encontra todos os arquivos que estão atualmente no item. Você pode atualizar os metadados do arquivo e condições de acesso ou enviar arquivos adicionais apenas arrastando os arquivos em qualquer lugar da página", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index b277e866c0..62e7c53e36 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -5117,7 +5117,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Por favor note que os ficheiros enviados à coleção {{collectionName}} serão acessíveis, de acordo com o que está explicitamente definido no ficheiro, no(s) seguinte(s) grupo(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Aqui encontra todos os ficheiros que estão atualmente no item. Pode atualizar os metadados do ficheiro e condições de acesso ou carregar ficheiros adicionais arrastando os ficheiros em qualquer lugar desta página", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/sv.json5 b/src/assets/i18n/sv.json5 index d04b95e144..4c9db83b16 100644 --- a/src/assets/i18n/sv.json5 +++ b/src/assets/i18n/sv.json5 @@ -5954,7 +5954,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Notera att uppladdade filer i samlingen {{collectionName}} också kommer att vara åtkompliga för följande grupp(er):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Här visas samtliga filer som ingår i posten. Du kan uppdatera filernas metadata och villkor för åtkomst, samt ladda upp nya filer genom att dra och släppa dem här", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/sw.json5 b/src/assets/i18n/sw.json5 index 5e00b54599..4f68655019 100644 --- a/src/assets/i18n/sw.json5 +++ b/src/assets/i18n/sw.json5 @@ -6459,9 +6459,9 @@ // TODO New key - Add a translation "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // TODO New key - Add a translation - "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", // "submission.sections.upload.no-entry": "No", // TODO New key - Add a translation diff --git a/src/assets/i18n/tr.json5 b/src/assets/i18n/tr.json5 index fff02c5967..92e0c5b6e2 100644 --- a/src/assets/i18n/tr.json5 +++ b/src/assets/i18n/tr.json5 @@ -4905,7 +4905,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "{{collectionName}} koleksiyonuna yüklenen dosyalara, tek dosya için açıkça karar verilenlere ek olarak aşağıdaki gruplarla erişilebilir olacağını lütfen unutmayın:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Burada, o anda öğede bulunan tüm dosyaları bulacaksınız. Dosya metadatalarını güncelleyebilir ve koşullara erişebilir veya sayfanın her yerine sürükleyip bırakarak ek dosyalar yükleyebilirsiniz", // "submission.sections.upload.no-entry": "No", diff --git a/src/assets/i18n/uk.json5 b/src/assets/i18n/uk.json5 index 0ba5b0109a..6ee2bd9f1c 100644 --- a/src/assets/i18n/uk.json5 +++ b/src/assets/i18n/uk.json5 @@ -5225,7 +5225,7 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Зверніть увагу, що завантажені файли в {{collectionName}} зібрання будуть доступні, для користувачів, що входять у групу(и):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Тут ви знайдете всі файли, які зараз містяться в документі. Ви можете оновити метадані файлу та умови доступу або завантажити додаткові файли, просто перетягнувши їх сюди на сторінці", // "submission.sections.upload.no-entry": "No", From b676c1ab7967234392381d4362ac0137f2b3bb4c Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 15 Feb 2023 18:43:49 +0100 Subject: [PATCH 355/833] [CST-8935] Fix issue with missing matcher providers --- src/app/app.module.ts | 4 ++++ src/app/shared/form/form.module.ts | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 750d63beda..89e361821b 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -9,6 +9,8 @@ import { RouterStateSerializer, StoreRouterConnectingModule } from '@ngrx/router import { MetaReducer, StoreModule, USER_PROVIDED_META_REDUCERS } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to'; +import { DYNAMIC_MATCHER_PROVIDERS } from '@ng-dynamic-forms/core'; + import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { appEffects } from './app.effects'; @@ -101,6 +103,8 @@ const PROVIDERS = [ useClass: LogInterceptor, multi: true }, + // register the dynamic matcher used by form. MUST be provided by the app module + ...DYNAMIC_MATCHER_PROVIDERS, ]; const DECLARATIONS = [ diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 61fc7e3c39..51ebaee1b8 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -21,7 +21,7 @@ import { DsDynamicLookupRelationExternalSourceTabComponent } from './builder/ds- import { SharedModule } from '../shared.module'; import { TranslateModule } from '@ngx-translate/core'; import { SearchModule } from '../search/search.module'; -import { DYNAMIC_FORM_CONTROL_MAP_FN, DYNAMIC_MATCHER_PROVIDERS, DynamicFormLayoutService, DynamicFormsCoreModule, DynamicFormService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; +import { DYNAMIC_FORM_CONTROL_MAP_FN, DynamicFormLayoutService, DynamicFormsCoreModule, DynamicFormService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; import { ExistingMetadataListElementComponent } from './builder/ds-dynamic-form-ui/existing-metadata-list-element/existing-metadata-list-element.component'; import { ExistingRelationListElementComponent } from './builder/ds-dynamic-form-ui/existing-relation-list-element/existing-relation-list-element.component'; import { ExternalSourceEntryImportModalComponent } from './builder/ds-dynamic-form-ui/relation-lookup-modal/external-source-tab/external-source-entry-import-modal/external-source-entry-import-modal.component'; @@ -101,7 +101,6 @@ const DIRECTIVES = [ provide: DYNAMIC_FORM_CONTROL_MAP_FN, useValue: dsDynamicFormControlMapFn }, - ...DYNAMIC_MATCHER_PROVIDERS, VocabularyTreeviewService, DynamicFormLayoutService, DynamicFormService, From 938bf33ad24bc8d0545c8fc936bfc6bcaadf93d0 Mon Sep 17 00:00:00 2001 From: aroman-arvo Date: Wed, 15 Feb 2023 19:20:20 +0100 Subject: [PATCH 356/833] DS-8404 - fix config param name --- config/config.example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.example.yml b/config/config.example.yml index 7c784b4a8e..f1e6be76aa 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -372,5 +372,5 @@ vocabularies: # Default collection/community sorting order at Advanced search, Create/update community and collection when there are not a query. comcolSelectionSort: - sortMetadata: 'dc.title' + sortField: 'dc.title' sortDirection: 'ASC' \ No newline at end of file From 028d4192bb7e4f0f69f60b02b7912d5982b49de7 Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Wed, 15 Feb 2023 11:37:37 +0100 Subject: [PATCH 357/833] translation fixes in security form --- src/assets/i18n/de.json5 | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 82d422621c..6c8eb4bc8f 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -3838,17 +3838,17 @@ // "profile.security.form.error.matching-passwords": "The passwords do not match.", "profile.security.form.error.matching-passwords": "Die Passwörter stimmen nicht überein.", - // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", - "profile.security.form.error.password-length": "Das Passwort sollte mindestens 6 Zeichen lang sein.", - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "profile.security.form.info": "Optional können Sie ein neues Passwort in das Feld darunter eingeben und es durch erneute Eingabe in das zweite Feld bestätigen. Es sollte mindestens sechs Zeichen lang sein.", + "profile.security.form.info": "Im nachfolgenden Feld können Sie bei Bedarf ein neues Passwort eingeben und es durch erneute Eingabe in das zweite Feld bestätigen. Es sollte mindestens sechs Zeichen lang sein.", // "profile.security.form.label.password": "Password", "profile.security.form.label.password": "Passwort", // "profile.security.form.label.passwordrepeat": "Retype to confirm", - "profile.security.form.label.passwordrepeat": "Zum Bestätigen erneut eingeben", + "profile.security.form.label.passwordrepeat": "Zum Bestätigen das Passwort erneut eingeben", + + // "profile.security.form.label.current-password": "Current password" + "profile.security.form.label.current-password": "Ihr aktuelles Passwort" // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", "profile.security.form.notifications.success.content": "Ihr geändertes Passwort wurde gespeichert.", @@ -3862,8 +3862,14 @@ // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", "profile.security.form.notifications.error.not-long-enough": "Das Passwort sollte mindestens 6 Zeichen lang sein.", + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + "profile.security.form.notifications.error.change-failed": "Es ist ein Fehler beim Ändern des Passworts aufgetreten. Bitte überprüfen Sie, ob Ihr aktuelles Passwort korrekt eingegeben wurde.", + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", "profile.security.form.notifications.error.not-same": "Die angegebenen Passwörter sind nicht identisch.", + + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + "profile.security.form.notifications.error.general": "Bitte füllen Sie alle Pflichtfelder im Formular aus.", // "profile.title": "Update Profile", "profile.title": "Profil aktualisieren", From 3ed9ae2d3ea343767c362e223c4579cbc7bda419 Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Wed, 15 Feb 2023 12:14:42 +0100 Subject: [PATCH 358/833] remove minimum passwort length value from translated messages --- src/assets/i18n/de.json5 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 6c8eb4bc8f..e5d074d7f5 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -1982,8 +1982,8 @@ // "forgot-password.form.head": "Forgot Password", "forgot-password.form.head": "Passwort vergessen", - // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "forgot-password.form.info": "Bitte geben Sie ein neues Passwort (mindestens sechs Zeichen) ein und bestätigen Sie es erneut.", + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", + "forgot-password.form.info": "Bitte geben Sie ein neues Passwort ein und bestätigen Sie es erneut.", // "forgot-password.form.card.security": "Security", "forgot-password.form.card.security": "Sicherheit", @@ -3838,8 +3838,8 @@ // "profile.security.form.error.matching-passwords": "The passwords do not match.", "profile.security.form.error.matching-passwords": "Die Passwörter stimmen nicht überein.", - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "profile.security.form.info": "Im nachfolgenden Feld können Sie bei Bedarf ein neues Passwort eingeben und es durch erneute Eingabe in das zweite Feld bestätigen. Es sollte mindestens sechs Zeichen lang sein.", + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", + "profile.security.form.info": "Im nachfolgenden Feld können Sie bei Bedarf ein neues Passwort eingeben und es durch erneute Eingabe in das zweite Feld bestätigen.", // "profile.security.form.label.password": "Password", "profile.security.form.label.password": "Passwort", @@ -3975,8 +3975,8 @@ // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Sicherheit", - // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "register-page.create-profile.security.info": "Bitte geben Sie ein Passwort in das unten stehende Feld ein und bestätigen Sie es, indem Sie es in das zweite Feld erneut eingeben. Es sollte mindestens sechs Zeichen lang sein.", + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", + "register-page.create-profile.security.info": "Bitte geben Sie ein Passwort in das unten stehende Feld ein und bestätigen Sie es, indem Sie es in das zweite Feld erneut eingeben.", // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Passwort *", From 26705a5cf75b4301991f1edbfa4994b4c55e3800 Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Wed, 15 Feb 2023 18:32:54 +0100 Subject: [PATCH 359/833] fixed missing comma --- src/assets/i18n/de.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index e5d074d7f5..9dbd703255 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -3848,7 +3848,7 @@ "profile.security.form.label.passwordrepeat": "Zum Bestätigen das Passwort erneut eingeben", // "profile.security.form.label.current-password": "Current password" - "profile.security.form.label.current-password": "Ihr aktuelles Passwort" + "profile.security.form.label.current-password": "Ihr aktuelles Passwort", // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", "profile.security.form.notifications.success.content": "Ihr geändertes Passwort wurde gespeichert.", From e5e6639d214adc7d5e52003577618a2cbf0d40c0 Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Wed, 15 Feb 2023 18:34:02 +0100 Subject: [PATCH 360/833] added comma to default translation --- src/assets/i18n/de.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 9dbd703255..df4c2cb4ee 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -3847,7 +3847,7 @@ // "profile.security.form.label.passwordrepeat": "Retype to confirm", "profile.security.form.label.passwordrepeat": "Zum Bestätigen das Passwort erneut eingeben", - // "profile.security.form.label.current-password": "Current password" + // "profile.security.form.label.current-password": "Current password", "profile.security.form.label.current-password": "Ihr aktuelles Passwort", // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", From bf22eb5582e7ff76483a9d6d95b1061af1b2a41a Mon Sep 17 00:00:00 2001 From: cris Date: Wed, 15 Feb 2023 22:14:31 +0000 Subject: [PATCH 361/833] suggestionOption.name displayed --- .../dso-input-suggestions/dso-input-suggestions.component.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html b/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html index 7515b830b9..64c88bbd78 100644 --- a/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html +++ b/src/app/shared/input-suggestions/dso-input-suggestions/dso-input-suggestions.component.html @@ -14,6 +14,7 @@ diff --git a/src/app/home-page/home-page.module.ts b/src/app/home-page/home-page.module.ts index d304c78696..1ab7d751b0 100644 --- a/src/app/home-page/home-page.module.ts +++ b/src/app/home-page/home-page.module.ts @@ -9,11 +9,13 @@ import { TopLevelCommunityListComponent } from './top-level-community-list/top-l import { StatisticsModule } from '../statistics/statistics.module'; import { ThemedHomeNewsComponent } from './home-news/themed-home-news.component'; import { ThemedHomePageComponent } from './themed-home-page.component'; +import { ThemedTopLevelCommunityListComponent } from './top-level-community-list/themed-top-level-community-list.component'; const DECLARATIONS = [ HomePageComponent, ThemedHomePageComponent, TopLevelCommunityListComponent, + ThemedTopLevelCommunityListComponent, ThemedHomeNewsComponent, HomeNewsComponent, ]; diff --git a/src/app/home-page/top-level-community-list/themed-top-level-community-list.component.ts b/src/app/home-page/top-level-community-list/themed-top-level-community-list.component.ts new file mode 100644 index 0000000000..6eb74cc0a9 --- /dev/null +++ b/src/app/home-page/top-level-community-list/themed-top-level-community-list.component.ts @@ -0,0 +1,25 @@ +import { Component } from '@angular/core'; +import { TopLevelCommunityListComponent } from './top-level-community-list.component'; +import { ThemedComponent } from '../../shared/theme-support/themed.component'; + +@Component({ + selector: 'ds-themed-top-level-community-list', + styleUrls: [], + templateUrl: '../../shared/theme-support/themed.component.html', +}) +export class ThemedTopLevelCommunityListComponent extends ThemedComponent { + protected inAndOutputNames: (keyof TopLevelCommunityListComponent & keyof this)[]; + + protected getComponentName(): string { + return 'TopLevelCommunityListComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/home-page/top-level-community-list/top-level-community-list.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./top-level-community-list.component`); + } + +} diff --git a/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.html b/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.scss b/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.ts b/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.ts new file mode 100644 index 0000000000..b52cb1439c --- /dev/null +++ b/src/themes/custom/app/home-page/top-level-community-list/top-level-community-list.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { TopLevelCommunityListComponent as BaseComponent } from '../../../../../app/home-page/top-level-community-list/top-level-community-list.component'; + +@Component({ + selector: 'ds-top-level-community-list', + // styleUrls: ['./top-level-community-list.component.scss'], + styleUrls: ['../../../../../app/home-page/top-level-community-list/top-level-community-list.component.scss'], + // templateUrl: './top-level-community-list.component.html' + templateUrl: '../../../../../app/home-page/top-level-community-list/top-level-community-list.component.html' +}) + +export class TopLevelCommunityListComponent extends BaseComponent {} + diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..db3bf197a6 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,7 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { TopLevelCommunityListComponent } from './app/home-page/top-level-community-list/top-level-community-list.component'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +127,8 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + TopLevelCommunityListComponent, ]; @NgModule({ From efe1d1085a1f5bcddce4c1489033edda4ca46b1c Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 22 Feb 2023 16:12:40 +0100 Subject: [PATCH 379/833] Moved TopLevelCommunityComponent to Eager module --- src/themes/custom/eager-theme.module.ts | 3 +- src/themes/custom/lazy-theme.module.ts | 37 ++++++------------------- 2 files changed, 11 insertions(+), 29 deletions(-) diff --git a/src/themes/custom/eager-theme.module.ts b/src/themes/custom/eager-theme.module.ts index 4e3c6f8b46..ad9f4b7064 100644 --- a/src/themes/custom/eager-theme.module.ts +++ b/src/themes/custom/eager-theme.module.ts @@ -43,6 +43,7 @@ import { import { CommunityListElementComponent } from './app/shared/object-list/community-list-element/community-list-element.component'; import { CollectionListElementComponent} from './app/shared/object-list/collection-list-element/collection-list-element.component'; +import { TopLevelCommunityListComponent } from './app/home-page/top-level-community-list/top-level-community-list.component'; /** @@ -55,9 +56,9 @@ const ENTRY_COMPONENTS = [ JournalVolumeComponent, PublicationComponent, UntypedItemComponent, - CommunityListElementComponent, CollectionListElementComponent, + TopLevelCommunityListComponent, ]; const DECLARATIONS = [ diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index 6050afef72..1623132d03 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -55,12 +55,8 @@ import { PageNotFoundComponent } from './app/pagenotfound/pagenotfound.component import { ObjectNotFoundComponent } from './app/lookup-by-id/objectnotfound/objectnotfound.component'; import { ForbiddenComponent } from './app/forbidden/forbidden.component'; import { PrivacyComponent } from './app/info/privacy/privacy.component'; -import { - CollectionStatisticsPageComponent -} from './app/statistics-page/collection-statistics-page/collection-statistics-page.component'; -import { - CommunityStatisticsPageComponent -} from './app/statistics-page/community-statistics-page/community-statistics-page.component'; +import { CollectionStatisticsPageComponent } from './app/statistics-page/collection-statistics-page/collection-statistics-page.component'; +import { CommunityStatisticsPageComponent } from './app/statistics-page/community-statistics-page/community-statistics-page.component'; import { ItemStatisticsPageComponent } from './app/statistics-page/item-statistics-page/item-statistics-page.component'; import { SiteStatisticsPageComponent } from './app/statistics-page/site-statistics-page/site-statistics-page.component'; import { CommunityPageComponent } from './app/community-page/community-page.component'; @@ -76,45 +72,31 @@ import { ProfilePageComponent } from './app/profile-page/profile-page.component' import { RegisterEmailComponent } from './app/register-page/register-email/register-email.component'; import { MyDSpacePageComponent } from './app/my-dspace-page/my-dspace-page.component'; import { SubmissionEditComponent } from './app/submission/edit/submission-edit.component'; -import { - SubmissionImportExternalComponent -} from './app/submission/import-external/submission-import-external.component'; +import { SubmissionImportExternalComponent } from './app/submission/import-external/submission-import-external.component'; import { SubmissionSubmitComponent } from './app/submission/submit/submission-submit.component'; -import { WorkflowItemDeleteComponent -} from './app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component'; -import { - WorkflowItemSendBackComponent -} from './app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component'; +import { WorkflowItemDeleteComponent } from './app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component'; +import { WorkflowItemSendBackComponent } from './app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component'; import { BreadcrumbsComponent } from './app/breadcrumbs/breadcrumbs.component'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { CommunityListComponent } from './app/community-list-page/community-list/community-list.component'; import { ComcolPageHandleComponent } from './app/shared/comcol-page-handle/comcol-page-handle.component'; import { AuthNavMenuComponent } from './app/shared/auth-nav-menu/auth-nav-menu.component'; -import { - ExpandableNavbarSectionComponent -} from './app/navbar/expandable-navbar-section/expandable-navbar-section.component'; +import { ExpandableNavbarSectionComponent } from './app/navbar/expandable-navbar-section/expandable-navbar-section.component'; import { ItemMetadataComponent } from './app/item-page/edit-item-page/item-metadata/item-metadata.component'; -import { - EditItemTemplatePageComponent -} from './app/collection-page/edit-item-template-page/edit-item-template-page.component'; +import { EditItemTemplatePageComponent } from './app/collection-page/edit-item-template-page/edit-item-template-page.component'; import { LoadingComponent } from './app/shared/loading/loading.component'; import { SearchResultsComponent } from './app/shared/search/search-results/search-results.component'; import { AdminSidebarComponent } from './app/admin/admin-sidebar/admin-sidebar.component'; import { ComcolPageBrowseByComponent } from './app/shared/comcol-page-browse-by/comcol-page-browse-by.component'; import { SearchSettingsComponent } from './app/shared/search/search-settings/search-settings.component'; -import { - CommunityPageSubCommunityListComponent -} from './app/community-page/sub-community-list/community-page-sub-community-list.component'; -import { - CommunityPageSubCollectionListComponent -} from './app/community-page/sub-collection-list/community-page-sub-collection-list.component'; +import { CommunityPageSubCommunityListComponent } from './app/community-page/sub-community-list/community-page-sub-community-list.component'; +import { CommunityPageSubCollectionListComponent } from './app/community-page/sub-collection-list/community-page-sub-collection-list.component'; import { ObjectListComponent } from './app/shared/object-list/object-list.component'; import { BrowseByMetadataPageComponent } from './app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; import { BrowseByDatePageComponent } from './app/browse-by/browse-by-date-page/browse-by-date-page.component'; import { BrowseByTitlePageComponent } from './app/browse-by/browse-by-title-page/browse-by-title-page.component'; -import { TopLevelCommunityListComponent } from './app/home-page/top-level-community-list/top-level-community-list.component'; const DECLARATIONS = [ FileSectionComponent, @@ -169,7 +151,6 @@ const DECLARATIONS = [ BrowseByMetadataPageComponent, BrowseByDatePageComponent, BrowseByTitlePageComponent, - TopLevelCommunityListComponent, ]; @NgModule({ From feb2d09d5a026cd6098db827c3d2b7b4714d86a4 Mon Sep 17 00:00:00 2001 From: Lucky Date: Thu, 23 Feb 2023 13:59:05 +0530 Subject: [PATCH 380/833] CSS changed for login-container #1952 --- src/app/shared/log-in/log-in.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/log-in/log-in.component.scss b/src/app/shared/log-in/log-in.component.scss index caaeef3dc7..3bd4023500 100644 --- a/src/app/shared/log-in/log-in.component.scss +++ b/src/app/shared/log-in/log-in.component.scss @@ -1,3 +1,3 @@ .login-container { - max-width: 350px; + max-width: 450px; } From ab78df2e6835a4720acf7d2b0f15045cd3c8d563 Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 23 Feb 2023 11:08:23 +0100 Subject: [PATCH 381/833] Fixes after merge --- .../dso-edit-metadata-value.component.html | 2 +- ...-declined-task-search-result-list-element.component.html | 1 - ...ed-declined-task-search-result-list-element.component.ts | 6 ------ .../claimed-search-result-list-element.component.html | 3 +-- .../pool-search-result-list-element.component.html | 3 +-- src/app/shared/shared.module.ts | 1 - .../subscription-modal/subscription-modal.component.html | 2 +- .../subscription-view/subscription-view.component.html | 2 +- 8 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html index f54dde4971..525b42610b 100644 --- a/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html +++ b/src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html @@ -7,7 +7,7 @@ [dsDebounce]="300" (onDebounce)="confirm.emit(false)">
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.html index a8ec21fa6c..50e8870fd8 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.html @@ -4,7 +4,6 @@
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.ts index 131f4b6730..620513fe6a 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-declined-task-search-result/claimed-declined-task-search-result-list-element.component.ts @@ -4,7 +4,6 @@ import { ClaimedDeclinedTaskTaskSearchResult } from 'src/app/shared/object-colle import { ViewMode } from '../../../../../core/shared/view-mode.model'; import { LinkService } from '../../../../../core/cache/builders/link.service'; import { TruncatableService } from '../../../../truncatable/truncatable.service'; -import { MyDspaceItemStatusType } from '../../../../object-collection/shared/mydspace-item-status/my-dspace-item-status-type'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { WorkflowItem } from '../../../../../core/submission/models/workflowitem.model'; @@ -31,11 +30,6 @@ export class ClaimedDeclinedTaskSearchResultListElementComponent extends SearchR */ public showSubmitter = true; - /** - * Represent item's status - */ - public status = MyDspaceItemStatusType.DECLINED_TASk; - /** * The workflowitem object that belonging to the result object */ diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html index d3bcfc20dc..99d1bca135 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.html @@ -3,8 +3,7 @@ [object]="object" [showSubmitter]="showSubmitter" [context]="childContext" - [workflowItem]="workflowitem$.value" - [status]="status"> + [workflowItem]="workflowitem$.value">
    diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html index 9ee1e022f3..d27c8a11c5 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.html @@ -3,8 +3,7 @@ [object]="object" [showSubmitter]="showSubmitter" [context]="childContext" - [workflowItem]="workflowitem$.value" - [status]="status"> + [workflowItem]="workflowitem$.value">

    - +
    @@ -20,7 +20,7 @@ - From 388c08b9a13cf636eb0487e595a9e1017bad1d0f Mon Sep 17 00:00:00 2001 From: damian Date: Mon, 15 May 2023 20:34:46 +0200 Subject: [PATCH 662/833] Archived items moved outside initial span element(fix for tests). Tests added. --- .../community-list.component.html | 2 +- .../collection-list-element.component.html | 4 +- .../collection-list-element.component.spec.ts | 52 ++++++++++++++++++- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index efc1f086ae..5f940b4405 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,7 +37,7 @@ {{node.name}} - [{{node.payload.archivedItems}}] + [{{node.payload.archivedItems}}] diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index b1900908a5..1fdb97f17b 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -4,9 +4,7 @@ {{object.name}} - -[{{object.archivedItems}}] - +[{{object.archivedItems}}]
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts index c41d5a7314..c1d9665bc3 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts @@ -7,6 +7,29 @@ import { Collection } from '../../../core/shared/collection.model'; let collectionListElementComponent: CollectionListElementComponent; let fixture: ComponentFixture; +const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection(), { + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'Test title' + } + ] + }, archivedItems: 1 +}); + +const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collection(), { + metadata: { + 'dc.title': [ + { + language: 'en_US', + value: 'Test title' + } + ] + }, archivedItems: 0 +}); + + const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { metadata: { 'dc.description.abstract': [ @@ -15,7 +38,7 @@ const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { value: 'Short description' } ] - } + }, archivedItems: 1 }); const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection(), { @@ -26,7 +49,7 @@ const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection() value: 'Test title' } ] - } + }, archivedItems: 1 }); describe('CollectionListElementComponent', () => { @@ -71,4 +94,29 @@ describe('CollectionListElementComponent', () => { expect(collectionAbstractField).toBeNull(); }); }); + + + describe('When the collection has archived items', () => { + beforeEach(() => { + collectionListElementComponent.object = mockCollectionWithArchivedItems; + fixture.detectChanges(); + }); + + it('should show the archived items paragraph', () => { + const field = fixture.debugElement.query(By.css('span.archived-items-lead')); + expect(field).not.toBeNull(); + }); + }); + + describe('When the collection has no archived items', () => { + beforeEach(() => { + collectionListElementComponent.object = mockCollectionWithoutArchivedItems; + fixture.detectChanges(); + }); + + it('should not show the archived items paragraph', () => { + const field = fixture.debugElement.query(By.css('span.archived-items-lead')); + expect(field).toBeNull(); + }); + }); }); From 3d7e61f57f5ab5693b6a310b593ab335072f32d8 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 17 May 2023 18:31:46 +0200 Subject: [PATCH 663/833] add a custom FindDataImpl for browsedefinitions --- src/app/browse-by/browse-by-guard.spec.ts | 4 +- src/app/browse-by/browse-by-guard.ts | 4 +- .../browse-by-switcher.component.spec.ts | 14 ++-- .../browse-by-switcher.component.ts | 4 +- .../browse/browse-definition-data.service.ts | 81 ++++++++++--------- src/app/core/browse/browse.service.spec.ts | 6 +- src/app/core/browse/browse.service.ts | 16 ++-- src/app/core/core.module.ts | 4 +- .../data/browse-response-parsing.service.ts | 33 +++++--- .../core/shared/browse-definition.model.ts | 16 ++++ src/app/core/shared/browse-definition.ts | 10 --- .../shared/flat-browse-definition.model.ts | 11 +-- .../hierarchical-browse-definition.model.ts | 11 +-- src/app/core/shared/operators.ts | 12 +-- src/app/menu.resolver.ts | 8 +- src/app/navbar/navbar.component.spec.ts | 10 +-- .../comcol-page-browse-by.component.ts | 8 +- 17 files changed, 134 insertions(+), 118 deletions(-) create mode 100644 src/app/core/shared/browse-definition.model.ts delete mode 100644 src/app/core/shared/browse-definition.ts diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index 8a9f9b8c50..933c95a3cb 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -2,7 +2,7 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; describe('BrowseByGuard', () => { @@ -18,7 +18,7 @@ describe('BrowseByGuard', () => { const id = 'author'; const scope = '1234-65487-12354-1235'; const value = 'Filter'; - const browseDefinition = Object.assign(new FlatBrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); + const browseDefinition = Object.assign(new BrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); beforeEach(() => { dsoService = { diff --git a/src/app/browse-by/browse-by-guard.ts b/src/app/browse-by/browse-by-guard.ts index f42359b56b..e4582cb77a 100644 --- a/src/app/browse-by/browse-by-guard.ts +++ b/src/app/browse-by/browse-by-guard.ts @@ -7,7 +7,7 @@ import { getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload } from import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; @Injectable() /** @@ -23,7 +23,7 @@ export class BrowseByGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const title = route.data.title; const id = route.params.id || route.queryParams.id || route.data.id; - let browseDefinition$: Observable; + let browseDefinition$: Observable; if (hasNoValue(route.data.browseDefinition) && hasValue(id)) { browseDefinition$ = this.browseDefinitionService.findById(id).pipe(getFirstSucceededRemoteDataPayload()); } else { diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts index 91c6c29252..c2e1c9cb68 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BROWSE_BY_COMPONENT_FACTORY, BrowseByDataType } from './browse-by-decorator'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { BehaviorSubject } from 'rxjs'; import { ThemeService } from '../../shared/theme-support/theme.service'; @@ -13,33 +13,33 @@ describe('BrowseBySwitcherComponent', () => { const types = [ Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } ), ]; - const data = new BehaviorSubject(createDataWithBrowseDefinition(new FlatBrowseDefinition())); + const data = new BehaviorSubject(createDataWithBrowseDefinition(new BrowseDefinition())); const activatedRouteStub = { data @@ -70,7 +70,7 @@ describe('BrowseBySwitcherComponent', () => { comp = fixture.componentInstance; })); - types.forEach((type: FlatBrowseDefinition) => { + types.forEach((type: BrowseDefinition) => { describe(`when switching to a browse-by page for "${type.id}"`, () => { beforeEach(() => { data.next(createDataWithBrowseDefinition(type)); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts index e4746129dc..35e4edf900 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { BROWSE_BY_COMPONENT_FACTORY } from './browse-by-decorator'; import { GenericConstructor } from '../../core/shared/generic-constructor'; -import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { ThemeService } from '../../shared/theme-support/theme.service'; @Component({ @@ -31,7 +31,7 @@ export class BrowseBySwitcherComponent implements OnInit { */ ngOnInit(): void { this.browseByComponent = this.route.data.pipe( - map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) + map((data: { browseDefinition: BrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) ); } diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 465c5b44b4..5380bb7ec4 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; -import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { RequestService } from '../data/request.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -16,46 +15,10 @@ import { dataService } from '../data/base/data-service.decorator'; import { isNotEmpty, isNotEmptyOperator, hasValue } from '../../shared/empty.util'; import { take } from 'rxjs/operators'; import { BrowseDefinitionRestRequest } from '../data/request.models'; +import { BrowseDefinition } from '../shared/browse-definition.model'; -/** - * Data service responsible for retrieving browse definitions from the REST server - */ -@Injectable({ - providedIn: 'root', -}) -@dataService(BROWSE_DEFINITION) -export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: FindAllDataImpl; - - constructor( - protected requestService: RequestService, - protected rdbService: RemoteDataBuildService, - protected objectCache: ObjectCacheService, - protected halService: HALEndpointService, - ) { - super('browses', requestService, rdbService, objectCache, halService); - - this.findAllData = new FindAllDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); - } - - /** - * Returns {@link RemoteData} of all object with a list of {@link FollowLinkConfig}, to indicate which embedded - * info should be added to the objects - * - * @param options Find list options object - * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's - * no valid cached version. Defaults to true - * @param reRequestOnStale Whether or not the request should automatically be re- - * requested after the response becomes stale - * @param linksToFollow List of {@link FollowLinkConfig} that indicate which - * {@link HALLink}s should be automatically resolved - * @return {Observable>>} - * Return an observable that emits object list - */ - findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { - return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); - } +class BrowseDefinitionDataImpl extends FindAllDataImpl { /** * Create a GET request for the given href, and send it. * Use a GET request specific for BrowseDefinitions. @@ -86,3 +49,43 @@ export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { + private findAllData: BrowseDefinitionDataImpl; + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + ) { + super('browses', requestService, rdbService, objectCache, halService); + + this.findAllData = new BrowseDefinitionDataImpl(this.linkPath, requestService, rdbService, objectCache, halService, this.responseMsToLive); + } + + /** + * Returns {@link RemoteData} of all object with a list of {@link FollowLinkConfig}, to indicate which embedded + * info should be added to the objects + * + * @param options Find list options object + * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's + * no valid cached version. Defaults to true + * @param reRequestOnStale Whether or not the request should automatically be re- + * requested after the response becomes stale + * @param linksToFollow List of {@link FollowLinkConfig} that indicate which + * {@link HALLink}s should be automatically resolved + * @return {Observable>>} + * Return an observable that emits object list + */ + findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { + return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); + } +} + diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 9e0615385b..46ac8c44f4 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -6,7 +6,7 @@ import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestService } from '../data/request.service'; -import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../shared/browse-definition.model'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { BrowseService } from './browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -23,7 +23,7 @@ describe('BrowseService', () => { const browsesEndpointURL = 'https://rest.api/browses'; const halService: any = new HALEndpointServiceStub(browsesEndpointURL); const browseDefinitions = [ - Object.assign(new FlatBrowseDefinition(), { + Object.assign(new BrowseDefinition(), { id: 'date', metadataBrowse: false, sortOptions: [ @@ -50,7 +50,7 @@ describe('BrowseService', () => { items: { href: 'https://rest.api/discover/browses/dateissued/items' } } }), - Object.assign(new FlatBrowseDefinition(), { + Object.assign(new BrowseDefinition(), { id: 'author', metadataBrowse: true, sortOptions: [ diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index 9e5589e3d8..a9a030bf57 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -6,6 +6,7 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; +import { BrowseDefinition } from '../shared/browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { BrowseEntry } from '../shared/browse-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; @@ -60,7 +61,7 @@ export class BrowseService { /** * Get all BrowseDefinitions */ - getBrowseDefinitions(): Observable>> { + getBrowseDefinitions(): Observable>> { // TODO properly support pagination return this.browseDefinitionDataService.findAll({ elementsPerPage: 9999 }).pipe( getFirstSucceededRemoteData(), @@ -233,13 +234,18 @@ export class BrowseService { return this.getBrowseDefinitions().pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions - .find((def: FlatBrowseDefinition) => { - const matchingKeys = def.metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); + map((browseDefinitions: BrowseDefinition[]) => browseDefinitions + .find((def: BrowseDefinition) => { + let matchingKeys = ''; + + if (Array.isArray((def as FlatBrowseDefinition).metadataKeys)) { + matchingKeys = (def as FlatBrowseDefinition).metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); + } + return isNotEmpty(matchingKeys); }) ), - map((def: FlatBrowseDefinition) => { + map((def: BrowseDefinition) => { if (isEmpty(def) || isEmpty(def._links) || isEmpty(def._links[linkPath])) { throw new Error(`A browse endpoint for ${linkPath} on ${metadataKey} isn't configured`); } else { diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index c00cfd6002..5365de0c4b 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -73,7 +73,7 @@ import { ServerResponseService } from './services/server-response.service'; import { NativeWindowFactory, NativeWindowService } from './services/window.service'; import { BitstreamFormat } from './shared/bitstream-format.model'; import { Bitstream } from './shared/bitstream.model'; -import { FlatBrowseDefinition } from './shared/flat-browse-definition.model'; +import { BrowseDefinition } from './shared/browse-definition.model'; import { BrowseEntry } from './shared/browse-entry.model'; import { Bundle } from './shared/bundle.model'; import { Collection } from './shared/collection.model'; @@ -325,7 +325,7 @@ export const models = SubmissionUploadsModel, AuthStatus, BrowseEntry, - FlatBrowseDefinition, + BrowseDefinition, HierarchicalBrowseDefinition, ClaimedTask, TaskObject, diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index 9aa508ccf0..cc1a4a64a1 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -1,35 +1,42 @@ import { Injectable } from '@angular/core'; import { ObjectCacheService } from '../cache/object-cache.service'; import { hasValue } from '../../shared/empty.util'; -import { HIERARCHICAL_BROWSE_DEFINITION } from '../shared/hierarchical-browse-definition.resource-type'; +import { + HIERARCHICAL_BROWSE_DEFINITION +} from '../shared/hierarchical-browse-definition.resource-type'; import { FLAT_BROWSE_DEFINITION } from '../shared/flat-browse-definition.resource-type'; import { HierarchicalBrowseDefinition } from '../shared/hierarchical-browse-definition.model'; import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { DSOResponseParsingService } from './dso-response-parsing.service'; +import { Serializer } from '../serializer'; +import { BrowseDefinition } from '../shared/browse-definition.model'; +import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; /** * A ResponseParsingService used to parse RawRestResponse coming from the REST API to a BrowseDefinition object */ @Injectable({ - providedIn: 'root', - }) + providedIn: 'root', +}) export class BrowseResponseParsingService extends DSOResponseParsingService { - protected objectCache: ObjectCacheService; - protected toCache: boolean; + constructor( + protected objectCache: ObjectCacheService, + ) { + super(objectCache); + } protected deserialize(obj): any { const browseType: string = obj.browseType; - if (hasValue(browseType)) { + if (obj.type === BROWSE_DEFINITION.value && hasValue(browseType)) { + let serializer: Serializer; if (browseType === HIERARCHICAL_BROWSE_DEFINITION.value) { - const serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); - return serializer.deserialize(obj); - } else if (browseType === FLAT_BROWSE_DEFINITION.value) { - const serializer = new this.serializerConstructor(FlatBrowseDefinition); - return serializer.deserialize(obj); + serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); + } else { + serializer = new this.serializerConstructor(FlatBrowseDefinition); } + return serializer.deserialize(obj); } else { - console.warn('cannot deserialize type ' + browseType); - return null; + return super.deserialize(obj); } } } diff --git a/src/app/core/shared/browse-definition.model.ts b/src/app/core/shared/browse-definition.model.ts new file mode 100644 index 0000000000..a5bed53c9f --- /dev/null +++ b/src/app/core/shared/browse-definition.model.ts @@ -0,0 +1,16 @@ +import { autoserialize } from 'cerialize'; +import { CacheableObject } from '../cache/cacheable-object.model'; + +/** + * Base class for BrowseDefinition models + */ +export abstract class BrowseDefinition extends CacheableObject { + + @autoserialize + id: string; + + /** + * Get the render type of the BrowseDefinition model + */ + abstract getRenderType(): string; +} diff --git a/src/app/core/shared/browse-definition.ts b/src/app/core/shared/browse-definition.ts deleted file mode 100644 index 788ef65739..0000000000 --- a/src/app/core/shared/browse-definition.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Base class for BrowseDefinition models - */ -export abstract class BrowseDefinition { - - /** - * Get the render type of the BrowseDefinition model - */ - abstract getRenderType(): string; -} diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index fa664c7747..9660a3bac9 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,16 +1,16 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; import { SortOption } from './sort-option.model'; -import { CacheableObject } from '../cache/cacheable-object.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { BrowseDefinition } from './browse-definition'; +import { BrowseDefinition } from './browse-definition.model'; @typedObject -export class FlatBrowseDefinition extends CacheableObject implements BrowseDefinition { +@inheritSerialization(BrowseDefinition) +export class FlatBrowseDefinition extends BrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -19,9 +19,6 @@ export class FlatBrowseDefinition extends CacheableObject implements BrowseDefin @excludeFromEquals type: ResourceType = FLAT_BROWSE_DEFINITION; - @autoserialize - id: string; - @autoserialize sortOptions: SortOption[]; diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts index a57550e1b3..427f5e1947 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -1,14 +1,14 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { HIERARCHICAL_BROWSE_DEFINITION } from './hierarchical-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; -import { CacheableObject } from '../cache/cacheable-object.model'; -import { BrowseDefinition } from './browse-definition'; +import { BrowseDefinition } from './browse-definition.model'; @typedObject -export class HierarchicalBrowseDefinition extends CacheableObject implements BrowseDefinition { +@inheritSerialization(BrowseDefinition) +export class HierarchicalBrowseDefinition extends BrowseDefinition { static type = HIERARCHICAL_BROWSE_DEFINITION; /** @@ -17,9 +17,6 @@ export class HierarchicalBrowseDefinition extends CacheableObject implements Bro @excludeFromEquals type: ResourceType = HIERARCHICAL_BROWSE_DEFINITION; - @autoserialize - id: string; - @autoserialize facetType: string; diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index dd0ade112a..32610c82fd 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -6,7 +6,7 @@ import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { MetadataField } from '../metadata/metadata-field.model'; import { MetadataSchema } from '../metadata/metadata-schema.model'; -import { FlatBrowseDefinition } from './flat-browse-definition.model'; +import { BrowseDefinition } from './browse-definition.model'; import { DSpaceObject } from './dspace-object.model'; import { InjectionToken } from '@angular/core'; import { MonoTypeOperatorFunction, SchedulerLike } from 'rxjs/internal/types'; @@ -171,17 +171,17 @@ export const toDSpaceObjectListRD = () => /** * Get the browse links from a definition by ID given an array of all definitions * @param {string} definitionID - * @returns {(source: Observable>) => Observable} + * @returns {(source: Observable>) => Observable} */ export const getBrowseDefinitionLinks = (definitionID: string) => - (source: Observable>>): Observable => + (source: Observable>>): Observable => source.pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions - .find((def: FlatBrowseDefinition) => def.id === definitionID) + map((browseDefinitions: BrowseDefinition[]) => browseDefinitions + .find((def: BrowseDefinition) => def.id === definitionID) ), - map((def: FlatBrowseDefinition) => { + map((def: BrowseDefinition) => { if (isNotEmpty(def)) { return def._links; } else { diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index d423d3bc33..f771ef8b27 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -7,7 +7,7 @@ import { MenuItemType } from './shared/menu/menu-item-type.model'; import { LinkMenuItemModel } from './shared/menu/menu-item/models/link.model'; import { getFirstCompletedRemoteData } from './core/shared/operators'; import { PaginatedList } from './core/data/paginated-list.model'; -import { FlatBrowseDefinition } from './core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from './core/shared/browse-definition.model'; import { RemoteData } from './core/data/remote-data'; import { TextMenuItemModel } from './shared/menu/menu-item/models/text.model'; import { BrowseService } from './core/browse/browse.service'; @@ -108,10 +108,10 @@ export class MenuResolver implements Resolve { ]; // Read the different Browse-By types from config and add them to the browse menu this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { - browseDefListRD.payload.page.forEach((browseDef: FlatBrowseDefinition) => { + browseDefListRD.payload.page.forEach((browseDef: BrowseDefinition) => { menuList.push({ id: `browse_global_by_${browseDef.id}`, parentID: 'browse_global', diff --git a/src/app/navbar/navbar.component.spec.ts b/src/app/navbar/navbar.component.spec.ts index 084047fc46..ada9be9d0b 100644 --- a/src/app/navbar/navbar.component.spec.ts +++ b/src/app/navbar/navbar.component.spec.ts @@ -16,7 +16,7 @@ import { RouterTestingModule } from '@angular/router/testing'; import { BrowseService } from '../core/browse/browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { buildPaginatedList } from '../core/data/paginated-list.model'; -import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from '../browse-by/browse-by-switcher/browse-by-decorator'; import { Item } from '../core/shared/item.model'; import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; @@ -66,26 +66,26 @@ describe('NavbarComponent', () => { beforeEach(waitForAsync(() => { browseDefinitions = [ Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new FlatBrowseDefinition(), { + new BrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } diff --git a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts index 668bd138c8..0527d283f0 100644 --- a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts +++ b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts @@ -6,7 +6,7 @@ import { getCommunityPageRoute } from '../../../community-page/community-page-ro import { getCollectionPageRoute } from '../../../collection-page/collection-page-routing-paths'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { FlatBrowseDefinition } from '../../../core/shared/flat-browse-definition.model'; +import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; import { RemoteData } from '../../../core/data/remote-data'; import { BrowseService } from '../../../core/browse/browse.service'; @@ -46,11 +46,11 @@ export class ComcolPageBrowseByComponent implements OnInit { ngOnInit(): void { this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { this.allOptions = browseDefListRD.payload.page - .map((config: FlatBrowseDefinition) => ({ + .map((config: BrowseDefinition) => ({ id: config.id, label: `browse.comcol.by.${config.id}`, routerLink: `/browse/${config.id}`, From 69a3a1ec08a00903ab547216dc931df0427758d2 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 18 May 2023 11:30:51 +0200 Subject: [PATCH 664/833] [DURACOM-133] Remove isAdmin checks --- .../workspaceitem/workspaceitem-actions.component.html | 4 ++-- .../workspaceitem/workspaceitem-actions.component.ts | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html index 6c3dd79d7c..6e958c7a8b 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html @@ -8,7 +8,7 @@ @@ -16,7 +16,7 @@
    diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 375fc3856a..9f0684fbf3 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -849,6 +849,8 @@ "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.input": "Filter", + "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", From ba8b27e611a6c14d35317609f6049ffe2cf9c07c Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 18 May 2023 19:03:37 +0200 Subject: [PATCH 670/833] Fix test --- .../workspaceitems-delete-page.component.spec.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts index c11659df24..e2135636a5 100644 --- a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts @@ -6,7 +6,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { WorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page.component'; import { ActivatedRoute, Router } from '@angular/router'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule, TranslateService } from '@ngx-translate/core'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { EventEmitter, NO_ERRORS_SCHEMA } from '@angular/core'; @@ -46,7 +46,10 @@ describe('WorkspaceitemsDeletePageComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot()], + imports: [ + NgbModalModule, + TranslateModule.forRoot() + ], declarations: [WorkspaceItemsDeletePageComponent], providers: [ { @@ -65,7 +68,6 @@ describe('WorkspaceitemsDeletePageComponent', () => { useValue: workspaceitemDataServiceSpy, }, { provide: Location, useValue: new LocationStub() }, - { provide: NgbModal, useValue: modalService }, { provide: NotificationsService, useValue: new NotificationsServiceStub(), From ba2444768e6148b1293a58e1e6e55ee886a138ef Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 18 May 2023 13:14:37 -0500 Subject: [PATCH 671/833] Minor fix to spec after Angular 15 update --- .../community-list/community-list.component.spec.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.spec.ts b/src/app/community-list-page/community-list/community-list.component.spec.ts index 2120df62fa..ce6b27dbeb 100644 --- a/src/app/community-list-page/community-list/community-list.component.spec.ts +++ b/src/app/community-list-page/community-list/community-list.component.spec.ts @@ -194,8 +194,9 @@ describe('CommunityListComponent', () => { }, }), CdkTreeModule, - RouterTestingModule], - declarations: [CommunityListComponent, RouterLinkWithHref], + RouterTestingModule, + RouterLinkWithHref], + declarations: [CommunityListComponent], providers: [CommunityListComponent, { provide: CommunityListService, useValue: communityListServiceStub },], schemas: [CUSTOM_ELEMENTS_SCHEMA], From 12a561d0a03f4121f76bc6a55f7ba08bf56ad01b Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 18 May 2023 13:28:08 -0500 Subject: [PATCH 672/833] Comment out problematic test in "workspaceitems-delete-page" component --- .../workspaceitems-delete-page.component.spec.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts index c11659df24..1bdf10d7a1 100644 --- a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts @@ -14,7 +14,6 @@ import { Location } from '@angular/common'; import { of as observableOf } from 'rxjs'; import { routeServiceStub } from '../../shared/testing/route-service.stub'; import { LocationStub } from '../../shared/testing/location.stub'; -import { By } from '@angular/platform-browser'; import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; @@ -93,12 +92,12 @@ describe('WorkspaceitemsDeletePageComponent', () => { }); }); - it('should delete the target workspace item', () => { + /*it('should delete the target workspace item', () => { spyOn((component as any).modalService, 'open').and.returnValue({}); component.confirmDelete(By.css('#delete-modal')); fixture.detectChanges(); expect((component as any).modalService.open).toHaveBeenCalled(); - }); + });*/ it('should call workspaceItemService.delete', () => { component.sendDeleteRequest(); From 008dee60c1903b7db0329baa60b59a9deb890617 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 18 May 2023 23:21:45 +0200 Subject: [PATCH 673/833] Fix test --- .../workspaceitems-delete-page.component.spec.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts index c0094e36aa..ac2878e8bd 100644 --- a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts @@ -14,6 +14,7 @@ import { Location } from '@angular/common'; import { of as observableOf } from 'rxjs'; import { routeServiceStub } from '../../shared/testing/route-service.stub'; import { LocationStub } from '../../shared/testing/location.stub'; +import { By } from '@angular/platform-browser'; import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; @@ -39,10 +40,6 @@ describe('WorkspaceitemsDeletePageComponent', () => { onDefaultLangChange: new EventEmitter() }; - const modalService = { - open: () => {/** empty */}, - }; - beforeEach(async () => { await TestBed.configureTestingModule({ imports: [ @@ -94,12 +91,12 @@ describe('WorkspaceitemsDeletePageComponent', () => { }); }); - /*it('should delete the target workspace item', () => { - spyOn((component as any).modalService, 'open').and.returnValue({}); + it('should delete the target workspace item', () => { + spyOn((component as any).modalService, 'open').and.returnValue({result: Promise.resolve('ok')}); component.confirmDelete(By.css('#delete-modal')); fixture.detectChanges(); expect((component as any).modalService.open).toHaveBeenCalled(); - });*/ + }); it('should call workspaceItemService.delete', () => { component.sendDeleteRequest(); From a4a0482d8852cd1bddc60661c27f3f7925e4a3d5 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 17 May 2023 18:10:32 +0200 Subject: [PATCH 674/833] 101577: Fixed ListableObjectComponentLoaderComponent not updating its @listableObjectComponent components ngOnChanges --- ...-object-component-loader.component.spec.ts | 2 +- ...table-object-component-loader.component.ts | 35 ++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts index edf0b3ea7c..a932eb17a4 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.spec.ts @@ -148,7 +148,7 @@ describe('ListableObjectComponentLoaderComponent', () => { (listableComponent as any).reloadedObject.emit(reloadedObject); tick(); - expect((comp as any).instantiateComponent).toHaveBeenCalledWith(reloadedObject); + expect((comp as any).instantiateComponent).toHaveBeenCalledWith(reloadedObject, undefined); })); it('should re-emit it as a contentChange', fakeAsync(() => { diff --git a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts index 8adbcbeec3..6d6048afa3 100644 --- a/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts +++ b/src/app/shared/object-collection/shared/listable-object/listable-object-component-loader.component.ts @@ -19,8 +19,8 @@ import { getListableObjectComponent } from './listable-object.decorator'; import { GenericConstructor } from '../../../../core/shared/generic-constructor'; import { ListableObjectDirective } from './listable-object.directive'; import { CollectionElementLinkType } from '../../collection-element-link.type'; -import { hasValue, isNotEmpty } from '../../../empty.util'; -import { Subscription } from 'rxjs'; +import { hasValue, isNotEmpty, hasNoValue } from '../../../empty.util'; +import { Subscription, combineLatest, of as observableOf, Observable } from 'rxjs'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; import { take } from 'rxjs/operators'; import { ThemeService } from '../../../theme-support/theme.service'; @@ -147,8 +147,18 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges * Whenever the inputs change, update the inputs of the dynamic component */ ngOnChanges(changes: SimpleChanges): void { - if (this.inAndOutputNames.some((name: any) => hasValue(changes[name]))) { - this.connectInputsAndOutputs(); + if (hasNoValue(this.compRef)) { + // sometimes the component has not been initialized yet, so it first needs to be initialized + // before being called again + this.instantiateComponent(this.object, changes); + } else { + // if an input or output has changed + if (this.inAndOutputNames.some((name: any) => hasValue(changes[name]))) { + this.connectInputsAndOutputs(); + if (this.compRef?.instance && 'ngOnChanges' in this.compRef.instance) { + (this.compRef.instance as any).ngOnChanges(changes); + } + } } } @@ -158,7 +168,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges .forEach((subscription) => subscription.unsubscribe()); } - private instantiateComponent(object) { + private instantiateComponent(object: ListableObject, changes?: SimpleChanges): void { this.initBadges(); @@ -177,14 +187,21 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges [this.badges.nativeElement], ]); - this.connectInputsAndOutputs(); + if (hasValue(changes)) { + this.ngOnChanges(changes); + } else { + this.connectInputsAndOutputs(); + } if ((this.compRef.instance as any).reloadedObject) { - (this.compRef.instance as any).reloadedObject.pipe(take(1)).subscribe((reloadedObject: DSpaceObject) => { + combineLatest([ + observableOf(changes), + (this.compRef.instance as any).reloadedObject.pipe(take(1)) as Observable, + ]).subscribe(([simpleChanges, reloadedObject]: [SimpleChanges, DSpaceObject]) => { if (reloadedObject) { this.compRef.destroy(); this.object = reloadedObject; - this.instantiateComponent(reloadedObject); + this.instantiateComponent(reloadedObject, simpleChanges); this.contentChange.emit(reloadedObject); } }); @@ -220,7 +237,7 @@ export class ListableObjectComponentLoaderComponent implements OnInit, OnChanges */ protected connectInputsAndOutputs(): void { if (isNotEmpty(this.inAndOutputNames) && hasValue(this.compRef) && hasValue(this.compRef.instance)) { - this.inAndOutputNames.forEach((name: any) => { + this.inAndOutputNames.filter((name: any) => this[name] !== undefined).forEach((name: any) => { this.compRef.instance[name] = this[name]; }); } From 2ca91fd331d29f99ee64358ce93b0d684149715d Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 17 May 2023 18:49:06 +0200 Subject: [PATCH 675/833] 101577: Fixed MetadataRepresentationLoaderComponent not updating its @metadataRepresentationComponent components ngOnChanges --- ...-item-metadata-list-element.component.html | 8 +-- ...em-metadata-list-element.component.spec.ts | 2 +- ...-item-metadata-list-element.component.html | 10 +-- ...em-metadata-list-element.component.spec.ts | 2 +- ...etadata-representation-loader.component.ts | 71 +++++++++++++++---- .../item-metadata-list-element.component.html | 2 +- ...em-metadata-list-element.component.spec.ts | 2 +- ...a-representation-list-element.component.ts | 6 +- ...a-representation-list-element.component.ts | 10 ++- ...-text-metadata-list-element.component.html | 2 +- ...xt-metadata-list-element.component.spec.ts | 2 +- 11 files changed, 85 insertions(+), 32 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.html index 1771f3d2bc..ec4dbd4323 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.html +++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.html @@ -1,12 +1,12 @@ - + - + + [innerHTML]="mdRepresentation.getValue()" + [ngbTooltip]="mdRepresentation.allMetadata(['dc.description']).length > 0 ? descTemplate : null"> diff --git a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts index eff6fd0b31..429f2986b9 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/org-unit/org-unit-item-metadata-list-element.component.spec.ts @@ -34,7 +34,7 @@ describe('OrgUnitItemMetadataListElementComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(OrgUnitItemMetadataListElementComponent); comp = fixture.componentInstance; - comp.metadataRepresentation = mockItemMetadataRepresentation; + comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); }); diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.html index 97632117f4..6f56056781 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.html +++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.html @@ -1,15 +1,15 @@ - - + - + + [innerHTML]="mdRepresentation.getValue()" + [ngbTooltip]="mdRepresentation.allMetadata(['person.jobTitle']).length > 0 ? descTemplate : null"> diff --git a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts index ab801826d6..865c262035 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/person/person-item-metadata-list-element.component.spec.ts @@ -36,7 +36,7 @@ describe('PersonItemMetadataListElementComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(PersonItemMetadataListElementComponent); comp = fixture.componentInstance; - comp.metadataRepresentation = mockItemMetadataRepresentation; + comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); }); diff --git a/src/app/shared/metadata-representation/metadata-representation-loader.component.ts b/src/app/shared/metadata-representation/metadata-representation-loader.component.ts index 7077949809..42ee093278 100644 --- a/src/app/shared/metadata-representation/metadata-representation-loader.component.ts +++ b/src/app/shared/metadata-representation/metadata-representation-loader.component.ts @@ -1,4 +1,4 @@ -import { Component, ComponentFactoryResolver, Inject, Input, OnInit, ViewChild } from '@angular/core'; +import { Component, ComponentFactoryResolver, Inject, Input, OnInit, ViewChild, OnChanges, SimpleChanges, ComponentRef, ViewContainerRef, ComponentFactory } from '@angular/core'; import { MetadataRepresentation, MetadataRepresentationType @@ -8,19 +8,17 @@ import { Context } from '../../core/shared/context.model'; import { GenericConstructor } from '../../core/shared/generic-constructor'; import { MetadataRepresentationListElementComponent } from '../object-list/metadata-representation-list-element/metadata-representation-list-element.component'; import { MetadataRepresentationDirective } from './metadata-representation.directive'; -import { hasValue } from '../empty.util'; +import { hasValue, isNotEmpty, hasNoValue } from '../empty.util'; import { ThemeService } from '../theme-support/theme.service'; @Component({ selector: 'ds-metadata-representation-loader', - // styleUrls: ['./metadata-representation-loader.component.scss'], templateUrl: './metadata-representation-loader.component.html' }) /** * Component for determining what component to use depending on the item's entity type (dspace.entity.type), its metadata representation and, optionally, its context */ -export class MetadataRepresentationLoaderComponent implements OnInit { - private componentRefInstance: MetadataRepresentationListElementComponent; +export class MetadataRepresentationLoaderComponent implements OnInit, OnChanges { /** * The item or metadata to determine the component for @@ -31,8 +29,8 @@ export class MetadataRepresentationLoaderComponent implements OnInit { } @Input() set mdRepresentation(nextValue: MetadataRepresentation) { this._mdRepresentation = nextValue; - if (hasValue(this.componentRefInstance)) { - this.componentRefInstance.metadataRepresentation = nextValue; + if (hasValue(this.compRef?.instance)) { + this.compRef.instance.mdRepresentation = nextValue; } } @@ -46,6 +44,16 @@ export class MetadataRepresentationLoaderComponent implements OnInit { */ @ViewChild(MetadataRepresentationDirective, {static: true}) mdRepDirective: MetadataRepresentationDirective; + /** + * The reference to the dynamic component + */ + protected compRef: ComponentRef; + + protected inAndOutputNames: (keyof this)[] = [ + 'context', + 'mdRepresentation', + ]; + constructor( private componentFactoryResolver: ComponentFactoryResolver, private themeService: ThemeService, @@ -57,14 +65,41 @@ export class MetadataRepresentationLoaderComponent implements OnInit { * Set up the dynamic child component */ ngOnInit(): void { - const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.getComponent()); + this.instantiateComponent(); + } - const viewContainerRef = this.mdRepDirective.viewContainerRef; + /** + * Whenever the inputs change, update the inputs of the dynamic component + */ + ngOnChanges(changes: SimpleChanges): void { + if (hasNoValue(this.compRef)) { + // sometimes the component has not been initialized yet, so it first needs to be initialized + // before being called again + this.instantiateComponent(changes); + } else { + // if an input or output has changed + if (this.inAndOutputNames.some((name: any) => hasValue(changes[name]))) { + this.connectInputsAndOutputs(); + if (this.compRef?.instance && 'ngOnChanges' in this.compRef.instance) { + (this.compRef.instance as any).ngOnChanges(changes); + } + } + } + } + + private instantiateComponent(changes?: SimpleChanges): void { + const componentFactory: ComponentFactory = this.componentFactoryResolver.resolveComponentFactory(this.getComponent()); + + const viewContainerRef: ViewContainerRef = this.mdRepDirective.viewContainerRef; viewContainerRef.clear(); - const componentRef = viewContainerRef.createComponent(componentFactory); - this.componentRefInstance = componentRef.instance as MetadataRepresentationListElementComponent; - this.componentRefInstance.metadataRepresentation = this.mdRepresentation; + this.compRef = viewContainerRef.createComponent(componentFactory); + + if (hasValue(changes)) { + this.ngOnChanges(changes); + } else { + this.connectInputsAndOutputs(); + } } /** @@ -74,4 +109,16 @@ export class MetadataRepresentationLoaderComponent implements OnInit { private getComponent(): GenericConstructor { return this.getMetadataRepresentationComponent(this.mdRepresentation.itemType, this.mdRepresentation.representationType, this.context, this.themeService.getThemeName()); } + + /** + * Connect the in and outputs of this component to the dynamic component, + * to ensure they're in sync + */ + protected connectInputsAndOutputs(): void { + if (isNotEmpty(this.inAndOutputNames) && hasValue(this.compRef) && hasValue(this.compRef.instance)) { + this.inAndOutputNames.filter((name: any) => this[name] !== undefined).forEach((name: any) => { + this.compRef.instance[name] = this[name]; + }); + } + } } diff --git a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.html b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.html index 91219c7189..904ea95c20 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.html +++ b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.html @@ -1 +1 @@ - + diff --git a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts index 6e48ba3a6f..99052b6b14 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-list-element.component.spec.ts @@ -23,7 +23,7 @@ describe('ItemMetadataListElementComponent', () => { beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(ItemMetadataListElementComponent); comp = fixture.componentInstance; - comp.metadataRepresentation = mockItemMetadataRepresentation; + comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); })); diff --git a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component.ts index 967b09986d..c4a6903129 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component.ts @@ -1,5 +1,5 @@ import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component'; -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input } from '@angular/core'; import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model'; import { getItemPageRoute } from '../../../../item-page/item-page-routing-paths'; @@ -11,7 +11,7 @@ import { getItemPageRoute } from '../../../../item-page/item-page-routing-paths' * An abstract class for displaying a single ItemMetadataRepresentation */ export class ItemMetadataRepresentationListElementComponent extends MetadataRepresentationListElementComponent implements OnInit { - metadataRepresentation: ItemMetadataRepresentation; + @Input() mdRepresentation: ItemMetadataRepresentation; /** * Route to the item's page @@ -19,6 +19,6 @@ export class ItemMetadataRepresentationListElementComponent extends MetadataRepr itemPageRoute: string; ngOnInit(): void { - this.itemPageRoute = getItemPageRoute(this.metadataRepresentation); + this.itemPageRoute = getItemPageRoute(this.mdRepresentation); } } diff --git a/src/app/shared/object-list/metadata-representation-list-element/metadata-representation-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/metadata-representation-list-element.component.ts index 2e14485fbb..b13dd60601 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/metadata-representation-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/metadata-representation-list-element.component.ts @@ -1,5 +1,6 @@ -import { Component } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { MetadataRepresentation } from '../../../core/shared/metadata-representation/metadata-representation.model'; +import { Context } from '../../../core/shared/context.model'; @Component({ selector: 'ds-metadata-representation-list-element', @@ -9,8 +10,13 @@ import { MetadataRepresentation } from '../../../core/shared/metadata-representa * An abstract class for displaying a single MetadataRepresentation */ export class MetadataRepresentationListElementComponent { + /** + * The optional context + */ + @Input() context: Context; + /** * The metadata representation of this component */ - metadataRepresentation: MetadataRepresentation; + @Input() mdRepresentation: MetadataRepresentation; } diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html index 31b670b1a3..cd199836b6 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html +++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.html @@ -1,3 +1,3 @@
    - {{metadataRepresentation.getValue()}} + {{mdRepresentation.getValue()}}
    diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts index af09d3c204..39ee54c32b 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.spec.ts @@ -25,7 +25,7 @@ describe('PlainTextMetadataListElementComponent', () => { beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(PlainTextMetadataListElementComponent); comp = fixture.componentInstance; - comp.metadataRepresentation = mockMetadataRepresentation; + comp.mdRepresentation = mockMetadataRepresentation; fixture.detectChanges(); })); From 82a8da60282d0f195ab3d5ac5a3f3b372a85d319 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 17 May 2023 17:57:00 +0100 Subject: [PATCH 676/833] 101577: Fixed ClaimedTaskActionsLoaderComponent not updating its @rendersWorkflowTaskOption components ngOnChanges --- .../claimed-task-actions-loader.component.ts | 73 ++++++++++++++----- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.ts b/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.ts index 68c597a41c..288fa2e00a 100644 --- a/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-loader.component.ts @@ -3,18 +3,19 @@ import { ComponentFactoryResolver, EventEmitter, Input, - OnDestroy, OnInit, Output, - ViewChild + ViewChild, + OnChanges, + SimpleChanges, + ComponentRef, } from '@angular/core'; import { getComponentByWorkflowTaskOption } from './claimed-task-actions-decorator'; import { ClaimedTask } from '../../../../core/tasks/models/claimed-task-object.model'; import { ClaimedTaskActionsDirective } from './claimed-task-actions.directive'; -import { ClaimedTaskActionsAbstractComponent } from '../abstract/claimed-task-actions-abstract.component'; -import { hasValue } from '../../../empty.util'; -import { Subscription } from 'rxjs'; +import { hasValue, isNotEmpty, hasNoValue } from '../../../empty.util'; import { MyDSpaceActionsResult } from '../../mydspace-actions'; +import { ClaimedTaskActionsAbstractComponent } from '../abstract/claimed-task-actions-abstract.component'; @Component({ selector: 'ds-claimed-task-actions-loader', @@ -24,7 +25,7 @@ import { MyDSpaceActionsResult } from '../../mydspace-actions'; * Component for loading a ClaimedTaskAction component depending on the "option" input * Passes on the ClaimedTask to the component and subscribes to the processCompleted output */ -export class ClaimedTaskActionsLoaderComponent implements OnInit, OnDestroy { +export class ClaimedTaskActionsLoaderComponent implements OnInit, OnChanges { /** * The ClaimedTask object */ @@ -47,10 +48,18 @@ export class ClaimedTaskActionsLoaderComponent implements OnInit, OnDestroy { @ViewChild(ClaimedTaskActionsDirective, {static: true}) claimedTaskActionsDirective: ClaimedTaskActionsDirective; /** - * Array to track all subscriptions and unsubscribe them onDestroy - * @type {Array} + * The reference to the dynamic component */ - protected subs: Subscription[] = []; + protected compRef: ComponentRef; + + /** + * The list of input and output names for the dynamic component + */ + protected inAndOutputNames: (keyof ClaimedTaskActionsAbstractComponent & keyof this)[] = [ + 'object', + 'option', + 'processCompleted', + ]; constructor(private componentFactoryResolver: ComponentFactoryResolver) { } @@ -59,7 +68,29 @@ export class ClaimedTaskActionsLoaderComponent implements OnInit, OnDestroy { * Fetch, create and initialize the relevant component */ ngOnInit(): void { + this.instantiateComponent(); + } + /** + * Whenever the inputs change, update the inputs of the dynamic component + */ + ngOnChanges(changes: SimpleChanges): void { + if (hasNoValue(this.compRef)) { + // sometimes the component has not been initialized yet, so it first needs to be initialized + // before being called again + this.instantiateComponent(changes); + } else { + // if an input or output has changed + if (this.inAndOutputNames.some((name: any) => hasValue(changes[name]))) { + this.connectInputsAndOutputs(); + if (this.compRef?.instance && 'ngOnChanges' in this.compRef.instance) { + (this.compRef.instance as any).ngOnChanges(changes); + } + } + } + } + + private instantiateComponent(changes?: SimpleChanges): void { const comp = this.getComponentByWorkflowTaskOption(this.option); if (hasValue(comp)) { const componentFactory = this.componentFactoryResolver.resolveComponentFactory(comp); @@ -67,11 +98,12 @@ export class ClaimedTaskActionsLoaderComponent implements OnInit, OnDestroy { const viewContainerRef = this.claimedTaskActionsDirective.viewContainerRef; viewContainerRef.clear(); - const componentRef = viewContainerRef.createComponent(componentFactory); - const componentInstance = (componentRef.instance as ClaimedTaskActionsAbstractComponent); - componentInstance.object = this.object; - if (hasValue(componentInstance.processCompleted)) { - this.subs.push(componentInstance.processCompleted.subscribe((result) => this.processCompleted.emit(result))); + this.compRef = viewContainerRef.createComponent(componentFactory); + + if (hasValue(changes)) { + this.ngOnChanges(changes); + } else { + this.connectInputsAndOutputs(); } } } @@ -81,11 +113,14 @@ export class ClaimedTaskActionsLoaderComponent implements OnInit, OnDestroy { } /** - * Unsubscribe from open subscriptions + * Connect the in and outputs of this component to the dynamic component, + * to ensure they're in sync */ - ngOnDestroy(): void { - this.subs - .filter((subscription) => hasValue(subscription)) - .forEach((subscription) => subscription.unsubscribe()); + protected connectInputsAndOutputs(): void { + if (isNotEmpty(this.inAndOutputNames) && hasValue(this.compRef) && hasValue(this.compRef.instance)) { + this.inAndOutputNames.filter((name: any) => this[name] !== undefined).forEach((name: any) => { + this.compRef.instance[name] = this[name]; + }); + } } } From 98a50763663863a57688f72a11eaac47eb1b3bf8 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 19 May 2023 10:33:25 +0200 Subject: [PATCH 677/833] 101577: Fixed some SearchResultListElementComponents not rendering because of potential undefined dso --- .../claimed-task-search-result-detail-element.component.ts | 6 ++++-- .../pool-search-result-detail-element.component.ts | 6 ++++-- .../claimed-search-result-list-element.component.ts | 6 ++++-- .../pool-search-result-list-element.component.ts | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts index 2ee661ef38..c5d511b867 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/claimed-task-search-result/claimed-task-search-result-detail-element.component.ts @@ -17,7 +17,7 @@ import { followLink } from '../../../utils/follow-link-config.model'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { Item } from '../../../../core/shared/item.model'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; -import { isNotEmpty } from '../../../empty.util'; +import { isNotEmpty, hasValue } from '../../../empty.util'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; /** @@ -88,7 +88,9 @@ export class ClaimedTaskSearchResultDetailElementComponent extends SearchResultD ngOnDestroy() { // This ensures the object is removed from cache, when action is performed on task - this.objectCache.remove(this.dso._links.workflowitem.href); + if (hasValue(this.dso)) { + this.objectCache.remove(this.dso._links.workflowitem.href); + } } } diff --git a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts index 6dec14f9cb..a5eca3c148 100644 --- a/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts +++ b/src/app/shared/object-detail/my-dspace-result-detail-element/pool-search-result/pool-search-result-detail-element.component.ts @@ -17,7 +17,7 @@ import { followLink } from '../../../utils/follow-link-config.model'; import { LinkService } from '../../../../core/cache/builders/link.service'; import { Item } from '../../../../core/shared/item.model'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; -import { isNotEmpty } from '../../../empty.util'; +import { isNotEmpty, hasValue } from '../../../empty.util'; import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; /** @@ -89,7 +89,9 @@ export class PoolSearchResultDetailElementComponent extends SearchResultDetailEl ngOnDestroy() { // This ensures the object is removed from cache, when action is performed on task - this.objectCache.remove(this.dso._links.workflowitem.href); + if (hasValue(this.dso)) { + this.objectCache.remove(this.dso._links.workflowitem.href); + } } } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts index 237a5f516e..3da443551f 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/claimed-search-result/claimed-search-result-list-element.component.ts @@ -22,7 +22,7 @@ import { ObjectCacheService } from '../../../../core/cache/object-cache.service' import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { Item } from '../../../../core/shared/item.model'; import { mergeMap, tap } from 'rxjs/operators'; -import { isNotEmpty } from '../../../empty.util'; +import { isNotEmpty, hasValue } from '../../../empty.util'; @Component({ selector: 'ds-claimed-search-result-list-element', @@ -101,7 +101,9 @@ export class ClaimedSearchResultListElementComponent extends SearchResultListEle ngOnDestroy() { // This ensures the object is removed from cache, when action is performed on task - this.objectCache.remove(this.dso._links.workflowitem.href); + if (hasValue(this.dso)) { + this.objectCache.remove(this.dso._links.workflowitem.href); + } } } diff --git a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts index cb924af40f..674b62733f 100644 --- a/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts +++ b/src/app/shared/object-list/my-dspace-result-list-element/pool-search-result/pool-search-result-list-element.component.ts @@ -23,7 +23,7 @@ import { APP_CONFIG, AppConfig } from '../../../../../config/app-config.interfac import { ObjectCacheService } from '../../../../core/cache/object-cache.service'; import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; import { Item } from '../../../../core/shared/item.model'; -import { isNotEmpty } from '../../../empty.util'; +import { isNotEmpty, hasValue } from '../../../empty.util'; /** * This component renders pool task object for the search result in the list view. @@ -111,6 +111,8 @@ export class PoolSearchResultListElementComponent extends SearchResultListElemen ngOnDestroy() { // This ensures the object is removed from cache, when action is performed on task - this.objectCache.remove(this.dso._links.workflowitem.href); + if (hasValue(this.dso)) { + this.objectCache.remove(this.dso._links.workflowitem.href); + } } } From 92f58f0e8a79c60d0fb0bd98a7223986776c8092 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 19 May 2023 14:01:35 +0200 Subject: [PATCH 678/833] 101577: Fixed default thumbnail not working when thumbnail isn't defined --- src/app/thumbnail/thumbnail.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/thumbnail/thumbnail.component.ts b/src/app/thumbnail/thumbnail.component.ts index 90c48d19bc..7dfa2c1b5e 100644 --- a/src/app/thumbnail/thumbnail.component.ts +++ b/src/app/thumbnail/thumbnail.component.ts @@ -53,6 +53,7 @@ export class ThumbnailComponent implements OnChanges { */ ngOnChanges(changes: SimpleChanges): void { if (this.thumbnail === undefined || this.thumbnail === null) { + this.src = this.defaultImage; return; } if (this.thumbnail instanceof Bitstream) { From 11a86c3756ec92d51ab7041cd32c516be583c7a5 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 19 May 2023 14:59:23 +0200 Subject: [PATCH 679/833] Fixed switch collection in submission form not working anymore --- .../form/collection/submission-form-collection.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/form/collection/submission-form-collection.component.ts b/src/app/submission/form/collection/submission-form-collection.component.ts index 6cdd95a5de..6a9d799ae2 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.ts @@ -168,7 +168,7 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { }) ).subscribe((submissionObject: SubmissionObject) => { this.selectedCollectionId = event.collection.id; - this.selectedCollectionName$ = observableOf(this.dsoNameService.getName(event.collection)); + this.selectedCollectionName$ = observableOf(event.collection.name); this.collectionChange.emit(submissionObject); this.submissionService.changeSubmissionCollection(this.submissionId, event.collection.id); this.processingChange$.next(false); From bf31c76c885669d1215491dc2acbd5e3a052f663 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 19 May 2023 16:36:13 +0200 Subject: [PATCH 680/833] 101623: Add ValueListBrowseDefinition model + super NonHierarchicalBrowse class --- .../browse/browse-definition-data.service.ts | 6 ++-- src/app/core/core.module.ts | 6 ++++ .../data/browse-response-parsing.service.ts | 10 ++++-- .../shared/flat-browse-definition.model.ts | 30 +++-------------- .../non-hierarchical-browse-definition.ts | 32 +++++++++++++++++++ .../value-list-browse-definition.model.ts | 26 +++++++++++++++ ...ue-list-browse-definition.resource-type.ts | 9 ++++++ 7 files changed, 88 insertions(+), 31 deletions(-) create mode 100644 src/app/core/shared/non-hierarchical-browse-definition.ts create mode 100644 src/app/core/shared/value-list-browse-definition.model.ts create mode 100644 src/app/core/shared/value-list-browse-definition.resource-type.ts diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 5380bb7ec4..a4c7bf1353 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -18,7 +18,7 @@ import { BrowseDefinitionRestRequest } from '../data/request.models'; import { BrowseDefinition } from '../shared/browse-definition.model'; -class BrowseDefinitionDataImpl extends FindAllDataImpl { +class BrowseDefinitionFindAllDataImpl extends FindAllDataImpl { /** * Create a GET request for the given href, and send it. * Use a GET request specific for BrowseDefinitions. @@ -57,7 +57,7 @@ class BrowseDefinitionDataImpl extends FindAllDataImpl { }) @dataService(BROWSE_DEFINITION) export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: BrowseDefinitionDataImpl; + private findAllData: BrowseDefinitionFindAllDataImpl; constructor( protected requestService: RequestService, @@ -67,7 +67,7 @@ export class BrowseDefinitionDataService extends IdentifiableDataService; if (browseType === HIERARCHICAL_BROWSE_DEFINITION.value) { serializer = new this.serializerConstructor(HierarchicalBrowseDefinition); - } else { + } else if (browseType === FLAT_BROWSE_DEFINITION.value) { serializer = new this.serializerConstructor(FlatBrowseDefinition); + } else if (browseType === VALUE_LIST_BROWSE_DEFINITION.value) { + serializer = new this.serializerConstructor(ValueListBrowseDefinition); + } else { + throw new Error('An error occurred while retrieving the browse definitions.'); } return serializer.deserialize(obj); } else { - return super.deserialize(obj); + throw new Error('An error occurred while retrieving the browse definitions.'); } } } diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 9660a3bac9..f94fa75b91 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,16 +1,13 @@ -import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { inheritSerialization } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; -import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; -import { SortOption } from './sort-option.model'; -import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { BrowseDefinition } from './browse-definition.model'; +import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; @typedObject -@inheritSerialization(BrowseDefinition) -export class FlatBrowseDefinition extends BrowseDefinition { +@inheritSerialization(NonHierarchicalBrowseDefinition) +export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -19,29 +16,10 @@ export class FlatBrowseDefinition extends BrowseDefinition { @excludeFromEquals type: ResourceType = FLAT_BROWSE_DEFINITION; - @autoserialize - sortOptions: SortOption[]; - - @autoserializeAs('order') - defaultSortOrder: string; - - @autoserializeAs('metadata') - metadataKeys: string[]; - - @autoserialize - dataType: BrowseByDataType; - get self(): string { return this._links.self.href; } - @deserialize - _links: { - self: HALLink; - entries: HALLink; - items: HALLink; - }; - getRenderType(): string { return this.dataType; } diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts new file mode 100644 index 0000000000..a4f6df43d9 --- /dev/null +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -0,0 +1,32 @@ +import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { SortOption } from './sort-option.model'; +import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; +import { HALLink } from './hal-link.model'; +import { BrowseDefinition } from './browse-definition.model'; + +/** + * Super class for NonHierarchicalBrowseDefinition models, + * e.g. FlatBrowseDefinition and ValueListBrowseDefinition + */ +@inheritSerialization(BrowseDefinition) +export abstract class NonHierarchicalBrowseDefinition extends BrowseDefinition { + + @autoserialize + sortOptions: SortOption[]; + + @autoserializeAs('order') + defaultSortOrder: string; + + @autoserializeAs('metadata') + metadataKeys: string[]; + + @autoserialize + dataType: BrowseByDataType; + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + items: HALLink; + }; +} diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts new file mode 100644 index 0000000000..a42a702940 --- /dev/null +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -0,0 +1,26 @@ +import { inheritSerialization } from 'cerialize'; +import { typedObject } from '../cache/builders/build-decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { VALUE_LIST_BROWSE_DEFINITION } from './value-list-browse-definition.resource-type'; +import { ResourceType } from './resource-type'; +import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; + +@typedObject +@inheritSerialization(NonHierarchicalBrowseDefinition) +export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { + static type = VALUE_LIST_BROWSE_DEFINITION; + + /** + * The object type + */ + @excludeFromEquals + type: ResourceType = VALUE_LIST_BROWSE_DEFINITION; + + get self(): string { + return this._links.self.href; + } + + getRenderType(): string { + return this.dataType; + } +} diff --git a/src/app/core/shared/value-list-browse-definition.resource-type.ts b/src/app/core/shared/value-list-browse-definition.resource-type.ts new file mode 100644 index 0000000000..8904dc472f --- /dev/null +++ b/src/app/core/shared/value-list-browse-definition.resource-type.ts @@ -0,0 +1,9 @@ +import { ResourceType } from './resource-type'; + +/** + * The resource type for ValueListBrowseDefinition + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const VALUE_LIST_BROWSE_DEFINITION = new ResourceType('valueList'); From 99ea73f9f61a739ff968d0482599be50429ece3a Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 19 May 2023 17:46:56 +0200 Subject: [PATCH 681/833] Fix jasmine Matchers functions not properly indexing --- tsconfig.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 11b5a03eaf..1eed699114 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -46,5 +46,8 @@ "fullTemplateTypeCheck": true, "strictInjectionParameters": true, "strictInputAccessModifiers": true - } + }, + "exclude": [ + "cypress.config.ts" + ] } From 6c8f816fb20590655018ee6aba08b2c7b7085872 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 27 Apr 2023 15:58:37 +0200 Subject: [PATCH 682/833] [DURACOM-133] Do not show edit/delete button for observer --- .../workspaceitem-actions.component.html | 6 +- .../workspaceitem-actions.component.spec.ts | 96 ++++++++++++++++++- .../workspaceitem-actions.component.ts | 53 ++++++++-- 3 files changed, 143 insertions(+), 12 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html index f789f4df47..6c3dd79d7c 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html @@ -7,7 +7,8 @@ {{"submission.workspace.generic.view" | translate}} - @@ -15,6 +16,7 @@ - \ No newline at end of file + diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts index 14d3c07650..f786782c05 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts @@ -1,3 +1,4 @@ +import { EPerson } from './../../../core/eperson/models/eperson.model'; import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Router } from '@angular/router'; @@ -24,12 +25,16 @@ import { RequestService } from '../../../core/data/request.service'; import { getMockRequestService } from '../../mocks/request.service.mock'; import { getMockSearchService } from '../../mocks/search-service.mock'; import { SearchService } from '../../../core/shared/search/search.service'; +import { AuthService } from '../../../core/auth/auth.service'; +import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; let component: WorkspaceitemActionsComponent; let fixture: ComponentFixture; let mockObject: WorkspaceItem; let notificationsServiceStub: NotificationsServiceStub; +let authorizationService; +let authService; const mockDataService = jasmine.createSpyObj('WorkspaceitemDataService', { delete: jasmine.createSpy('delete') @@ -71,10 +76,88 @@ const item = Object.assign(new Item(), { const rd = createSuccessfulRemoteDataObject(item); mockObject = Object.assign(new WorkspaceItem(), { item: observableOf(rd), id: '1234', uuid: '1234' }); -describe('WorkspaceitemActionsComponent', () => { - beforeEach(waitForAsync(() => { +const ePersonMock: EPerson = Object.assign(new EPerson(), { + handle: null, + netid: null, + lastActive: '2023-04-27T12:15:57.054+00:00', + canLogIn: true, + email: 'dspacedemo+submit@gmail.com', + requireCertificate: false, + selfRegistered: false, + _name: 'dspacedemo+submit@gmail.com', + id: '914955b1-cf2e-4884-8af7-a166aa24cf73', + uuid: '914955b1-cf2e-4884-8af7-a166aa24cf73', + type: 'eperson', + metadata: { + 'dspace.agreements.cookies': [ + { + uuid: '0a53a0f2-e168-4ed9-b4af-cba9a2d267ca', + language: null, + value: + '{"authentication":true,"preferences":true,"acknowledgement":true,"google-analytics":true}', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'dspace.agreements.end-user': [ + { + uuid: '0879e571-6e4a-4efe-af9b-704c755166be', + language: null, + value: 'true', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'eperson.firstname': [ + { + uuid: '18052a3e-f19b-49ca-b9f9-ee4cf9c71b86', + language: null, + value: 'Demo', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'eperson.language': [ + { + uuid: '98c2abdb-6a6f-4b41-b455-896bcf333ca3', + language: null, + value: 'en', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'eperson.lastname': [ + { + uuid: 'df722e70-9497-468d-a92a-4038e7ef2586', + language: null, + value: 'Submitter', + place: 0, + authority: null, + confidence: -1, + }, + ], + }, + _links: { + groups: { + href: 'http://localhost:8080/server/api/eperson/epersons/914955b1-cf2e-4884-8af7-a166aa24cf73/groups', + }, + self: { + href: 'http://localhost:8080/server/api/eperson/epersons/914955b1-cf2e-4884-8af7-a166aa24cf73', + }, + }, +}); - TestBed.configureTestingModule({ +authService = jasmine.createSpyObj('authService', { + getAuthenticatedUserFromStore: jasmine.createSpy('getAuthenticatedUserFromStore') +}); + +describe('WorkspaceitemActionsComponent', () => { + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ imports: [ NgbModule, TranslateModule.forRoot({ @@ -92,6 +175,8 @@ describe('WorkspaceitemActionsComponent', () => { { provide: WorkspaceitemDataService, useValue: mockDataService }, { provide: SearchService, useValue: searchService }, { provide: RequestService, useValue: requestServce }, + { provide: AuthService, useValue: authService }, + { provide: AuthorizationDataService, useValue: authorizationService}, NgbModal ], schemas: [NO_ERRORS_SCHEMA] @@ -105,6 +190,10 @@ describe('WorkspaceitemActionsComponent', () => { component = fixture.componentInstance; component.object = mockObject; notificationsServiceStub = TestBed.inject(NotificationsService as any); + authorizationService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true) + }); + (authService.getAuthenticatedUserFromStore as jasmine.Spy).and.returnValue(observableOf(ePersonMock)); fixture.detectChanges(); }); @@ -150,7 +239,6 @@ describe('WorkspaceitemActionsComponent', () => { confirmBtn.click(); fixture.detectChanges(); - fixture.whenStable().then(() => { done(); }); diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index a6d30728ac..d758ef1bb5 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -1,7 +1,12 @@ -import { Component, Injector, Input } from '@angular/core'; +import { EPerson } from './../../../core/eperson/models/eperson.model'; +import { AuthorizationDataService } from 'src/app/core/data/feature-authorization/authorization-data.service'; +import { AuthService } from './../../../core/auth/auth.service'; +import { Item } from 'src/app/core/shared/item.model'; +import { FeatureID } from './../../../core/data/feature-authorization/feature-id'; +import { Component, Injector, Input, OnInit } from '@angular/core'; import { Router } from '@angular/router'; -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, Observable, switchMap } from 'rxjs'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TranslateService } from '@ngx-translate/core'; @@ -11,7 +16,7 @@ import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem import { NotificationsService } from '../../notifications/notifications.service'; import { RequestService } from '../../../core/data/request.service'; import { SearchService } from '../../../core/shared/search/search.service'; -import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; +import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { NoContent } from '../../../core/shared/NoContent.model'; import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/workspaceitems-edit-page-routing-paths'; @@ -24,7 +29,7 @@ import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/wor styleUrls: ['./workspaceitem-actions.component.scss'], templateUrl: './workspaceitem-actions.component.html', }) -export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent { +export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent implements OnInit { /** * The workspaceitem object @@ -37,6 +42,20 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent(false); + /** + * A boolean representing if the user is an admin + * @type {Observable} + */ + isAdmin$: Observable; + + /** + * A boolean representing if the user can edit the item + * and therefore can delete it as well + * (since the user can discard the item also from the edit page) + * @type {Observable} + */ + canEditItem$: Observable; + /** * Initialize instance variables * @@ -54,8 +73,12 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent this.authorizationService.isAuthorized(FeatureID.AdministratorOf, user.uuid))); + + this.canEditItem$ = activeEPerson$.pipe( + switchMap((eperson) => { + return this.object?.item.pipe( + getFirstCompletedRemoteData(), + getRemoteDataPayload(), + switchMap((item: Item) => { + return this.authorizationService.isAuthorized(FeatureID.CanEditItem, item?._links?.self.href, eperson.uuid); + }) + ) as Observable; + })); + } + /** * Init the target object * @@ -92,5 +134,4 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent Date: Wed, 3 May 2023 10:26:48 +0200 Subject: [PATCH 683/833] [DURACOM-133] Fixed failing test --- .../workspaceitem/workspaceitem-actions.component.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts index f786782c05..b0a08a70bb 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts @@ -157,6 +157,9 @@ authService = jasmine.createSpyObj('authService', { describe('WorkspaceitemActionsComponent', () => { beforeEach(waitForAsync(async () => { + authorizationService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true) + }); await TestBed.configureTestingModule({ imports: [ NgbModule, @@ -190,9 +193,6 @@ describe('WorkspaceitemActionsComponent', () => { component = fixture.componentInstance; component.object = mockObject; notificationsServiceStub = TestBed.inject(NotificationsService as any); - authorizationService = jasmine.createSpyObj('authorizationService', { - isAuthorized: observableOf(true) - }); (authService.getAuthenticatedUserFromStore as jasmine.Spy).and.returnValue(observableOf(ePersonMock)); fixture.detectChanges(); }); From 709764c8aff45d7f9b157f9f2a94d6512b482f26 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 2 May 2023 15:52:24 +0200 Subject: [PATCH 684/833] [DURACOM-133] Fix import paths --- .../workspaceitem/workspaceitem-actions.component.spec.ts | 2 +- .../workspaceitem/workspaceitem-actions.component.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts index b0a08a70bb..c76cce3982 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts @@ -1,4 +1,4 @@ -import { EPerson } from './../../../core/eperson/models/eperson.model'; +import { EPerson } from '../../../core/eperson/models/eperson.model'; import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Router } from '@angular/router'; diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index d758ef1bb5..3ce3751fec 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -1,8 +1,8 @@ -import { EPerson } from './../../../core/eperson/models/eperson.model'; +import { EPerson } from '../../../core/eperson/models/eperson.model'; import { AuthorizationDataService } from 'src/app/core/data/feature-authorization/authorization-data.service'; -import { AuthService } from './../../../core/auth/auth.service'; -import { Item } from 'src/app/core/shared/item.model'; -import { FeatureID } from './../../../core/data/feature-authorization/feature-id'; +import { AuthService } from '../../../core/auth/auth.service'; +import { Item } from '../../../core/shared/item.model'; +import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; import { Component, Injector, Input, OnInit } from '@angular/core'; import { Router } from '@angular/router'; From 3e202a67f16586d6faca787a39063a57bab14da3 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 18 May 2023 11:30:51 +0200 Subject: [PATCH 685/833] [DURACOM-133] Remove isAdmin checks --- .../workspaceitem/workspaceitem-actions.component.html | 4 ++-- .../workspaceitem/workspaceitem-actions.component.ts | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html index 6c3dd79d7c..6e958c7a8b 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html @@ -8,7 +8,7 @@ @@ -16,7 +16,7 @@ + + + +
    + + + + + + + + + + diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.scss b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts new file mode 100644 index 0000000000..00431cbbe2 --- /dev/null +++ b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts @@ -0,0 +1,89 @@ +import { + Component, Input, ViewChild +} from '@angular/core'; + +import { + SubmissionFormsModel +} from 'src/app/core/config/models/config-submission-forms.model'; +import { + SubmissionSectionUploadFileEditComponent +} from 'src/app/submission/sections/upload/file/edit/section-upload-file-edit.component'; +import { + SubmissionSectionUploadFileComponent as BaseComponent +} from 'src/app/submission/sections/upload/file/section-upload-file.component'; + +/** + * This component represents a single bitstream contained in the submission + */ +@Component({ + selector: 'ds-submission-upload-section-file', + // styleUrls: ['./section-upload-file.component.scss'], + styleUrls: ['../../../../../../../app/submission/sections/upload/file/section-upload-file.component.scss'], + // templateUrl: './section-upload-file.component.html' + templateUrl: '../../../../../../../app/submission/sections/upload/file/section-upload-file.component.html' +}) +export class SubmissionSectionUploadFileComponent + extends BaseComponent { + + /** + * The list of available access condition + * @type {Array} + */ + @Input() availableAccessConditionOptions: any[]; + + /** + * The submission id + * @type {string} + */ + @Input() collectionId: string; + + /** + * Define if collection access conditions policy type : + * POLICY_DEFAULT_NO_LIST : is not possible to define additional access group/s for the single file + * POLICY_DEFAULT_WITH_LIST : is possible to define additional access group/s for the single file + * @type {number} + */ + @Input() collectionPolicyType: number; + + /** + * The configuration for the bitstream's metadata form + * @type {SubmissionFormsModel} + */ + @Input() configMetadataForm: SubmissionFormsModel; + + /** + * The bitstream id + * @type {string} + */ + @Input() fileId: string; + + /** + * The bitstream array key + * @type {string} + */ + @Input() fileIndex: string; + + /** + * The bitstream id + * @type {string} + */ + @Input() fileName: string; + + /** + * The section id + * @type {string} + */ + @Input() sectionId: string; + + /** + * The submission id + * @type {string} + */ + @Input() submissionId: string; + + /** + * The [[SubmissionSectionUploadFileEditComponent]] reference + * @type {SubmissionSectionUploadFileEditComponent} + */ + @ViewChild(SubmissionSectionUploadFileEditComponent) fileEditComp: SubmissionSectionUploadFileEditComponent; +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index adf3a888c1..6f442eafcc 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -141,6 +141,7 @@ import { import { NgxGalleryModule } from '@kolkov/ngx-gallery'; import { WorkspaceItemsDeletePageComponent } from './app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component'; import { ThumbnailComponent } from './app/thumbnail/thumbnail.component'; +import { SubmissionSectionUploadFileComponent } from './app/submission/sections/upload/file/section-upload-file.component'; const DECLARATIONS = [ FileSectionComponent, @@ -217,6 +218,7 @@ const DECLARATIONS = [ MediaViewerVideoComponent, WorkspaceItemsDeletePageComponent, ThumbnailComponent, + SubmissionSectionUploadFileComponent, ]; @NgModule({ From e7b02778cfae025a9db5805e82e46b37c8cd9a32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 02:15:33 +0000 Subject: [PATCH 705/833] Bump socket.io-parser from 4.2.2 to 4.2.3 Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.2 to 4.2.3. - [Release notes](https://github.com/socketio/socket.io-parser/releases) - [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.2...4.2.3) --- updated-dependencies: - dependency-name: socket.io-parser dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d1d0f56ab5..730966fcdb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10377,9 +10377,9 @@ socket.io-client@^4.4.1: socket.io-parser "~4.2.1" socket.io-parser@~4.2.1: - version "4.2.2" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz" - integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== + version "4.2.3" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.3.tgz#926bcc6658e2ae0883dc9dee69acbdc76e4e3667" + integrity sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" From 1d0df844c3388d710572cbc9a04aeb07648e2c69 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 24 May 2023 16:51:52 +0200 Subject: [PATCH 706/833] 101623: Fixes after merge --- .../metadata-values/metadata-values.component.ts | 3 ++- .../browse-link-metadata-list-element.component.ts | 3 ++- .../plain-text-metadata-list-element.component.ts | 3 ++- .../testing/browse-definition-data-service.stub.ts | 10 ++++++---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.ts b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts index 49ce453fbe..cbbae9006d 100644 --- a/src/app/item-page/field-components/metadata-values/metadata-values.component.ts +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts @@ -3,6 +3,7 @@ import { MetadataValue } from '../../../core/shared/metadata.models'; import { APP_CONFIG, AppConfig } from '../../../../config/app-config.interface'; import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; import { hasValue } from '../../../shared/empty.util'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../../../core/shared/value-list-browse-definition.resource-type'; /** * This component renders the configured 'values' into the ds-metadata-field-wrapper component. @@ -84,7 +85,7 @@ export class MetadataValuesComponent implements OnChanges { */ getQueryParams(value) { let queryParams = {startsWith: value}; - if (this.browseDefinition.metadataBrowse) { + if (this.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { return {value: value}; } return queryParams; diff --git a/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts index 0eb0ce05b0..072601d456 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/browse-link/browse-link-metadata-list-element.component.ts @@ -2,6 +2,7 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep import { Component } from '@angular/core'; import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component'; import { metadataRepresentationComponent } from '../../../metadata-representation/metadata-representation.decorator'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../../../../core/shared/value-list-browse-definition.resource-type'; //@metadataRepresentationComponent('Publication', MetadataRepresentationType.PlainText) // For now, authority controlled fields are rendered the same way as plain text fields //@metadataRepresentationComponent('Publication', MetadataRepresentationType.AuthorityControlled) @@ -21,7 +22,7 @@ export class BrowseLinkMetadataListElementComponent extends MetadataRepresentati */ getQueryParams() { let queryParams = {startsWith: this.metadataRepresentation.getValue()}; - if (this.metadataRepresentation.browseDefinition.metadataBrowse) { + if (this.metadataRepresentation.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { return {value: this.metadataRepresentation.getValue()}; } return queryParams; diff --git a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts index 2d21a7afe8..c4470ae974 100644 --- a/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts +++ b/src/app/shared/object-list/metadata-representation-list-element/plain-text/plain-text-metadata-list-element.component.ts @@ -2,6 +2,7 @@ import { MetadataRepresentationType } from '../../../../core/shared/metadata-rep import { Component } from '@angular/core'; import { MetadataRepresentationListElementComponent } from '../metadata-representation-list-element.component'; import { metadataRepresentationComponent } from '../../../metadata-representation/metadata-representation.decorator'; +import { VALUE_LIST_BROWSE_DEFINITION } from '../../../../core/shared/value-list-browse-definition.resource-type'; @metadataRepresentationComponent('Publication', MetadataRepresentationType.PlainText) // For now, authority controlled fields are rendered the same way as plain text fields @@ -21,7 +22,7 @@ export class PlainTextMetadataListElementComponent extends MetadataRepresentatio */ getQueryParams() { let queryParams = {startsWith: this.metadataRepresentation.getValue()}; - if (this.metadataRepresentation.browseDefinition.metadataBrowse) { + if (this.metadataRepresentation.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { return {value: this.metadataRepresentation.getValue()}; } return queryParams; diff --git a/src/app/shared/testing/browse-definition-data-service.stub.ts b/src/app/shared/testing/browse-definition-data-service.stub.ts index ec1fc2f05e..8d46fcda00 100644 --- a/src/app/shared/testing/browse-definition-data-service.stub.ts +++ b/src/app/shared/testing/browse-definition-data-service.stub.ts @@ -5,12 +5,14 @@ import { BrowseDefinition } from '../../core/shared/browse-definition.model'; import { BrowseService } from '../../core/browse/browse.service'; import { createSuccessfulRemoteDataObject } from '../remote-data.utils'; import { PageInfo } from '../../core/shared/page-info.model'; +import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; +import { ValueListBrowseDefinition } from '../../core/shared/value-list-browse-definition.model'; // This data is in post-serialized form (metadata -> metadataKeys) export const mockData: BrowseDefinition[] = [ - Object.assign(new BrowseDefinition, { + Object.assign(new FlatBrowseDefinition(), { 'id' : 'dateissued', - 'metadataBrowse' : false, + 'browseType': 'flatBrowse', 'dataType' : 'date', 'sortOptions' : EMPTY, 'order' : 'ASC', @@ -18,9 +20,9 @@ export const mockData: BrowseDefinition[] = [ 'metadataKeys' : [ 'dc.date.issued' ], '_links' : EMPTY }), - Object.assign(new BrowseDefinition, { + Object.assign(new ValueListBrowseDefinition(), { 'id' : 'author', - 'metadataBrowse' : true, + 'browseType' : 'valueList', 'dataType' : 'text', 'sortOptions' : EMPTY, 'order' : 'ASC', From efaf1d47daf9ab4481f64f2b0c639fc306ca7bde Mon Sep 17 00:00:00 2001 From: Kim Shepherd Date: Thu, 25 May 2023 10:16:55 +1200 Subject: [PATCH 707/833] item-status comp should handle missing config gracefully if the "register identifier" config is missing, simply return enabled=false rather than break the rest of the page features from loading --- .../item-status/item-status.component.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/app/item-page/edit-item-page/item-status/item-status.component.ts index c2db518415..ce84786304 100644 --- a/src/app/item-page/edit-item-page/item-status/item-status.component.ts +++ b/src/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -9,9 +9,9 @@ import { RemoteData } from '../../../core/data/remote-data'; import { getItemEditRoute, getItemPageRoute } from '../../item-page-routing-paths'; import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../../core/data/feature-authorization/feature-id'; -import { hasValue } from '../../../shared/empty.util'; +import { hasValue, isNotEmpty } from '../../../shared/empty.util'; import { - getAllSucceededRemoteDataPayload, getFirstSucceededRemoteData, getRemoteDataPayload, + getAllSucceededRemoteDataPayload, getFirstCompletedRemoteData, getFirstSucceededRemoteData, getRemoteDataPayload, } from '../../../core/shared/operators'; import { IdentifierDataService } from '../../../core/data/identifier-data.service'; import { Identifier } from '../../../shared/object-list/identifier-data/identifier.model'; @@ -105,12 +105,13 @@ export class ItemStatusComponent implements OnInit { // Observable for configuration determining whether the Register DOI feature is enabled let registerConfigEnabled$: Observable = this.configurationService.findByPropertyName('identifiers.item-status.register-doi').pipe( - getFirstSucceededRemoteData(), - getRemoteDataPayload(), - map((enabled: ConfigurationProperty) => { - if (enabled !== undefined && enabled.values) { - return true; + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + // If the config property is exposed via rest and has a value set, return it + if (rd.hasSucceeded && hasValue(rd.payload) && isNotEmpty(rd.payload.values)) { + return rd.payload.values[0] === 'true'; } + // Otherwise, return false return false; }) ); From 85f95112b3542281858cfc9db1d97aec50647c4d Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 25 May 2023 12:10:28 +0200 Subject: [PATCH 708/833] 101127: Remove invalid links in BrowseDefinition models --- src/app/core/shared/flat-browse-definition.model.ts | 9 ++++++++- .../core/shared/hierarchical-browse-definition.model.ts | 2 -- .../core/shared/non-hierarchical-browse-definition.ts | 7 ------- .../core/shared/value-list-browse-definition.model.ts | 9 ++++++++- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 308f0c7a5b..f275db199c 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,9 +1,10 @@ -import { inheritSerialization } from 'cerialize'; +import { inheritSerialization, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { ResourceType } from './resource-type'; import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; +import { HALLink } from './hal-link.model'; /** * BrowseDefinition model for browses of type 'flatBrowse' @@ -26,4 +27,10 @@ export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { getRenderType(): string { return this.dataType; } + + @deserialize + _links: { + self: HALLink; + items: HALLink; + }; } diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts index ca3ed7bff0..d561fff643 100644 --- a/src/app/core/shared/hierarchical-browse-definition.model.ts +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -36,8 +36,6 @@ export class HierarchicalBrowseDefinition extends BrowseDefinition { @deserialize _links: { self: HALLink; - entries: HALLink; - items: HALLink; vocabulary: HALLink; }; diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts index a4f6df43d9..12f2a06333 100644 --- a/src/app/core/shared/non-hierarchical-browse-definition.ts +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -22,11 +22,4 @@ export abstract class NonHierarchicalBrowseDefinition extends BrowseDefinition { @autoserialize dataType: BrowseByDataType; - - @deserialize - _links: { - self: HALLink; - entries: HALLink; - items: HALLink; - }; } diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts index 33cce82cac..9bcd8f2e43 100644 --- a/src/app/core/shared/value-list-browse-definition.model.ts +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -1,9 +1,10 @@ -import { inheritSerialization } from 'cerialize'; +import { inheritSerialization, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; import { VALUE_LIST_BROWSE_DEFINITION } from './value-list-browse-definition.resource-type'; import { ResourceType } from './resource-type'; import { NonHierarchicalBrowseDefinition } from './non-hierarchical-browse-definition'; +import { HALLink } from './hal-link.model'; /** * BrowseDefinition model for browses of type 'valueList' @@ -26,4 +27,10 @@ export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { getRenderType(): string { return this.dataType; } + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + }; } From 220b30bea7661b1e7af58611bd3ff3531cdb0421 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 25 May 2023 23:15:57 +0200 Subject: [PATCH 709/833] [CST-5729] Address review feedback --- .../bitstream-download-page.component.spec.ts | 4 +- .../bitstream-download-page.component.ts | 40 +++++++++------ src/app/core/data/signposting-data.service.ts | 8 +++ .../core/services/server-response.service.ts | 36 +++++++++++++ src/app/init.service.ts | 1 - .../full/full-item-page.component.spec.ts | 3 +- .../full/full-item-page.component.ts | 7 +-- .../simple/item-page.component.spec.ts | 32 +++++++++--- .../item-page/simple/item-page.component.ts | 50 ++++++++++++------- 9 files changed, 136 insertions(+), 45 deletions(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts index 66024063cd..59261e56d2 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts @@ -13,6 +13,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { CommonModule } from '@angular/common'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; import { ServerResponseService } from '../../core/services/server-response.service'; +import { PLATFORM_ID } from '@angular/core'; describe('BitstreamDownloadPageComponent', () => { let component: BitstreamDownloadPageComponent; @@ -99,7 +100,8 @@ describe('BitstreamDownloadPageComponent', () => { { provide: FileService, useValue: fileService }, { provide: HardRedirectService, useValue: hardRedirectService }, { provide: ServerResponseService, useValue: serverResponseService }, - { provide: SignpostingDataService, useValue: signpostingDataService } + { provide: SignpostingDataService, useValue: signpostingDataService }, + { provide: PLATFORM_ID, useValue: 'server' } ] }) .compileComponents(); diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 14245c4cd1..0becfcf473 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Inject, OnInit, PLATFORM_ID } from '@angular/core'; import { filter, map, switchMap, take } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; @@ -13,7 +13,7 @@ import { HardRedirectService } from '../../core/services/hard-redirect.service'; import { getForbiddenRoute } from '../../app-routing-paths'; import { RemoteData } from '../../core/data/remote-data'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; -import { Location } from '@angular/common'; +import { isPlatformServer, Location } from '@angular/common'; import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; import { ServerResponseService } from 'src/app/core/services/server-response.service'; import { SignpostingLink } from '../../core/data/signposting-links.model'; @@ -39,19 +39,10 @@ export class BitstreamDownloadPageComponent implements OnInit { private hardRedirectService: HardRedirectService, private location: Location, private signpostingDataService: SignpostingDataService, - private responseService: ServerResponseService + private responseService: ServerResponseService, + @Inject(PLATFORM_ID) protected platformId: string ) { - this.route.params.subscribe(params => { - this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { - let links = ''; - - signpostingLinks.forEach((link: SignpostingLink) => { - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; - }); - - this.responseService.setHeader('Link', links); - }); - }); + this.initPageLinks(); } back(): void { @@ -101,4 +92,25 @@ export class BitstreamDownloadPageComponent implements OnInit { } }); } + + /** + * Create page links if any are retrieved by signposting endpoint + * + * @private + */ + private initPageLinks(): void { + if (isPlatformServer(this.platformId)) { + this.route.params.subscribe(params => { + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; + }); + + this.responseService.setHeader('Link', links); + }); + }); + } + } } diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index e09d68974c..fca22ec383 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -8,6 +8,9 @@ import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { SignpostingLink } from './signposting-links.model'; +/** + * Service responsible for handling requests related to the Signposting endpoint + */ @Injectable({ providedIn: 'root' }) @@ -16,6 +19,11 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } + /** + * Retrieve the list of signposting links related to the given resource's id + * + * @param uuid + */ getLinks(uuid: string): Observable { const baseUrl = this.halService.getRootHref().replace('/api', ''); diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index 2268e9eb03..0b193d536c 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -1,7 +1,11 @@ import { RESPONSE } from '@nguniversal/express-engine/tokens'; import { Inject, Injectable, Optional } from '@angular/core'; + import { Response } from 'express'; +/** + * Service responsible to provide method to manage the response object + */ @Injectable() export class ServerResponseService { private response: Response; @@ -10,6 +14,12 @@ export class ServerResponseService { this.response = response; } + /** + * Set a status code to response + * + * @param code + * @param message + */ setStatus(code: number, message?: string): this { if (this.response) { this.response.statusCode = code; @@ -20,22 +30,48 @@ export class ServerResponseService { return this; } + /** + * Set Unauthorized status + * + * @param message + */ setUnauthorized(message = 'Unauthorized'): this { return this.setStatus(401, message); } + /** + * Set Forbidden status + * + * @param message + */ setForbidden(message = 'Forbidden'): this { return this.setStatus(403, message); } + /** + * Set Not found status + * + * @param message + */ setNotFound(message = 'Not found'): this { return this.setStatus(404, message); } + /** + * Set Internal Server Error status + * + * @param message + */ setInternalServerError(message = 'Internal Server Error'): this { return this.setStatus(500, message); } + /** + * Set a response's header + * + * @param header + * @param content + */ setHeader(header: string, content: string) { if (this.response) { this.response.setHeader(header, content); diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 2bbc589cc0..9fef2ca4ed 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -188,7 +188,6 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); this.menuService.listenForRouteChanges(); - // this.metadataItem.checkCurrentRoute(); } /** diff --git a/src/app/item-page/full/full-item-page.component.spec.ts b/src/app/item-page/full/full-item-page.component.spec.ts index ec4054d888..9fc078c2cd 100644 --- a/src/app/item-page/full/full-item-page.component.spec.ts +++ b/src/app/item-page/full/full-item-page.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, fakeAsync, TestBed, waitForAsync } from '@angular/cor import { ItemDataService } from '../../core/data/item-data.service'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; -import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA, PLATFORM_ID } from '@angular/core'; import { TruncatePipe } from '../../shared/utils/truncate.pipe'; import { FullItemPageComponent } from './full-item-page.component'; import { MetadataService } from '../../core/metadata/metadata.service'; @@ -122,6 +122,7 @@ describe('FullItemPageComponent', () => { { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, { provide: LinkHeadService, useValue: linkHeadService }, + { provide: PLATFORM_ID, useValue: 'server' } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(FullItemPageComponent, { diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index f0100eed72..31dd2c5fc2 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -1,5 +1,5 @@ import { filter, map } from 'rxjs/operators'; -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { ActivatedRoute, Data, Router } from '@angular/router'; import { BehaviorSubject, Observable } from 'rxjs'; @@ -54,9 +54,10 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit, protected _location: Location, protected responseService: ServerResponseService, protected signpostingDataService: SignpostingDataService, - protected linkHeadService: LinkHeadService + protected linkHeadService: LinkHeadService, + @Inject(PLATFORM_ID) protected platformId: string, ) { - super(route, router, items, authService, authorizationService, responseService, signpostingDataService, linkHeadService); + super(route, router, items, authService, authorizationService, responseService, signpostingDataService, linkHeadService, platformId); } /*** AoT inheritance fix, will hopefully be resolved in the near future **/ diff --git a/src/app/item-page/simple/item-page.component.spec.ts b/src/app/item-page/simple/item-page.component.spec.ts index 005142e3f1..dfba4bd235 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock'; import { ItemDataService } from '../../core/data/item-data.service'; -import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA, PLATFORM_ID } from '@angular/core'; import { ItemPageComponent } from './item-page.component'; import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; @@ -24,7 +24,8 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; -import { LinkHeadService } from '../../core/services/link-head.service'; +import { LinkDefinition, LinkHeadService } from '../../core/services/link-head.service'; +import { SignpostingLink } from '../../core/data/signposting-links.model'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -41,16 +42,18 @@ const mockWithdrawnItem: Item = Object.assign(new Item(), { const mocklink = { href: 'http://test.org', - rel: 'test', - type: 'test' + rel: 'rel1', + type: 'type1' }; const mocklink2 = { href: 'http://test2.org', - rel: 'test', - type: 'test' + rel: 'rel2', + type: 'type2' }; +const mockSignpostingLinks: SignpostingLink[] = [mocklink, mocklink2]; + describe('ItemPageComponent', () => { let comp: ItemPageComponent; let fixture: ComponentFixture; @@ -109,6 +112,7 @@ describe('ItemPageComponent', () => { { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, { provide: LinkHeadService, useValue: linkHeadService }, + { provide: PLATFORM_ID, useValue: 'server' }, ], schemas: [NO_ERRORS_SCHEMA] @@ -165,6 +169,22 @@ describe('ItemPageComponent', () => { expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); }); + + it('should add link tags correctly', () => { + + expect(comp.signpostingLinks).toEqual([mocklink, mocklink2]); + + // Check if linkHeadService.addTag() was called with the correct arguments + expect(linkHeadService.addTag).toHaveBeenCalledTimes(mockSignpostingLinks.length); + expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[0] as LinkDefinition); + expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[1] as LinkDefinition); + }); + + it('should set Link header on the server', () => { + + expect(serverResponseService.setHeader).toHaveBeenCalledWith('Link', ' ; rel="rel1" ; type="type1" , ; rel="rel2" ; type="type2" '); + }); + }); describe('when the item is withdrawn and the user is not an admin', () => { beforeEach(() => { diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index f5ee9e1e78..a11cb22883 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -1,5 +1,6 @@ -import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import { isPlatformServer } from '@angular/common'; import { Observable } from 'rxjs'; import { map, take } from 'rxjs/operators'; @@ -75,25 +76,10 @@ export class ItemPageComponent implements OnInit, OnDestroy { protected authorizationService: AuthorizationDataService, protected responseService: ServerResponseService, protected signpostingDataService: SignpostingDataService, - protected linkHeadService: LinkHeadService + protected linkHeadService: LinkHeadService, + @Inject(PLATFORM_ID) protected platformId: string ) { - this.route.params.subscribe(params => { - this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { - let links = ''; - this.signpostingLinks = signpostingLinks; - - signpostingLinks.forEach((link: SignpostingLink) => { - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; - this.linkHeadService.addTag({ - href: link.href, - type: link.type, - rel: link.rel - }); - }); - - this.responseService.setHeader('Link', links); - }); - }); + this.initPageLinks(); } /** @@ -113,6 +99,32 @@ export class ItemPageComponent implements OnInit, OnDestroy { } + /** + * Create page links if any are retrieved by signposting endpoint + * + * @private + */ + private initPageLinks(): void { + this.route.params.subscribe(params => { + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + this.signpostingLinks = signpostingLinks; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; + this.linkHeadService.addTag({ + href: link.href, + type: link.type, + rel: link.rel + }); + }); + + if (isPlatformServer(this.platformId)) { + this.responseService.setHeader('Link', links); + } + }); + }); + } ngOnDestroy(): void { this.signpostingLinks.forEach((link: SignpostingLink) => { From 74a08202715008d5060cca4f0b4f531d7551616b Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 26 May 2023 13:13:03 -0400 Subject: [PATCH 710/833] Correct test fixture to match unit-under-test requirements. --- src/app/shared/mocks/submission.mock.ts | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/app/shared/mocks/submission.mock.ts b/src/app/shared/mocks/submission.mock.ts index b90cababcb..268ae33ab3 100644 --- a/src/app/shared/mocks/submission.mock.ts +++ b/src/app/shared/mocks/submission.mock.ts @@ -1668,11 +1668,7 @@ export const mockFileFormData = { ], endDate: [ { - value: { - year: 2019, - month: 1, - day: 16 - }, + value: new Date('2019-01-16'), language: null, authority: null, display: { @@ -1694,7 +1690,7 @@ export const mockFileFormData = { value: 'embargo', language: null, authority: null, - display: 'lease', + display: 'embargo', confidence: -1, place: 0, otherInformation: null @@ -1702,11 +1698,7 @@ export const mockFileFormData = { ], startDate: [ { - value: { - year: 2019, - month: 1, - day: 16 - }, + value: new Date('2019-01-16'), language: null, authority: null, display: { From bd477765c0fbf43936f0acbc69d7c52466463953 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Mon, 29 May 2023 10:44:03 +0200 Subject: [PATCH 711/833] Added labels and hide dates if disabled --- .../access-control-array-form.component.html | 10 ++++++++-- .../access-control-form-container-intial-state.ts | 4 ++-- .../access-control-form-container.component.ts | 8 +++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 2e6d9c2fc1..faa28a60e8 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -9,6 +9,7 @@ style="display: grid; grid-template-columns: 1fr 1fr 1fr 50px; grid-gap: 5px">
    +
    -
    +
    +
    -
    +
    +
    + -
    + {{'access-control-option-start-date-note' | translate}}
    -
    -
    - -
    +
    +
    + {{'access-control-option-end-date-note' | translate}}
    - +
    + + +
    diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0618596e60..2b8c64ed13 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5358,23 +5358,53 @@ "admin.system-wide-alert.title": "System-wide Alerts", "item-access-control-title": "This form allows you to perform changes to the access condition of all the item's metadata and all its bitstreams.", + "collection-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", + "community-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", + "access-control-item-header-toggle": "Item's Metadata", + "access-control-bitstream-header-toggle": "Bitstreams", + "access-control-mode": "Mode", + "access-control-access-conditions": "Access conditions", + "access-control-no-access-conditions-warning-message": "You have not specified any access conditions, the new items access conditions will be inherited from the owning collection.", + "access-control-replace-all": "Replace access conditions", + "access-control-add-to-existing": "Add to existing ones", + "access-control-limit-to-specific": "Limit the changes to specific bitstreams", + "access-control-process-all-bitstreams": "process all the bitstreams in the item", + "access-control-bitstreams-selected": "bitstreams selected", + "access-control-reset": "Reset", + "access-control-execute": "Execute", + "access-control-add-more": "Add more", + "access-control-select-bitstreams-modal.title": "Select bitstreams", + "access-control-select-bitstreams-modal.no-items": "No items to show.", + "access-control-select-bitstreams-modal.close": "Close", + "access-control-option-label": "Access condition type", + + "access-control-option-note": "Select an access condition to apply on the bitstream once the item is deposited", + + "access-control-option-start-date": "Grant access from", + + "access-control-option-start-date-note": "Select the date from which the relate access condition is applied", + + "access-control-option-end-date": "Grant access until", + + "access-control-option-end-date-note": "Select the date until which the relate access condition is applied", + } From fb66b5abd6b55b536e5a7b953fa6754d82c6dbbd Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 26 May 2023 18:15:58 +0200 Subject: [PATCH 715/833] 102039: Use patch to delete multiple bitstreams at once --- .../core/data/bitstream-data.service.spec.ts | 77 +++++++++++++++++-- src/app/core/data/bitstream-data.service.ts | 36 ++++++++- .../item-bitstreams.component.spec.ts | 17 ++-- .../item-bitstreams.component.ts | 16 ++-- .../testing/bitstream-data-service.stub.ts | 13 ++++ 5 files changed, 130 insertions(+), 29 deletions(-) create mode 100644 src/app/shared/testing/bitstream-data-service.stub.ts diff --git a/src/app/core/data/bitstream-data.service.spec.ts b/src/app/core/data/bitstream-data.service.spec.ts index c67eaa2d68..89178f8dd2 100644 --- a/src/app/core/data/bitstream-data.service.spec.ts +++ b/src/app/core/data/bitstream-data.service.spec.ts @@ -1,13 +1,14 @@ +import { TestBed } from '@angular/core/testing'; import { BitstreamDataService } from './bitstream-data.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { RequestService } from './request.service'; import { Bitstream } from '../shared/bitstream.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { BitstreamFormatDataService } from './bitstream-format-data.service'; -import { of as observableOf } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; import { BitstreamFormat } from '../shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../shared/bitstream-format-support-level'; -import { PutRequest } from './request.models'; +import { PatchRequest, PutRequest } from './request.models'; import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; @@ -15,6 +16,11 @@ import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-bu import { testSearchDataImplementation } from './base/search-data.spec'; import { testPatchDataImplementation } from './base/patch-data.spec'; import { testDeleteDataImplementation } from './base/delete-data.spec'; +import { DSOChangeAnalyzer } from './dso-change-analyzer.service'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import objectContaining = jasmine.objectContaining; +import { RemoteData } from './remote-data'; +import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; describe('BitstreamDataService', () => { let service: BitstreamDataService; @@ -25,10 +31,18 @@ describe('BitstreamDataService', () => { let rdbService: RemoteDataBuildService; const bitstreamFormatHref = 'rest-api/bitstreamformats'; - const bitstream = Object.assign(new Bitstream(), { - uuid: 'fake-bitstream', + const bitstream1 = Object.assign(new Bitstream(), { + id: 'fake-bitstream1', + uuid: 'fake-bitstream1', _links: { - self: { href: 'fake-bitstream-self' } + self: { href: 'fake-bitstream1-self' } + } + }); + const bitstream2 = Object.assign(new Bitstream(), { + id: 'fake-bitstream2', + uuid: 'fake-bitstream2', + _links: { + self: { href: 'fake-bitstream2-self' } } }); const format = Object.assign(new BitstreamFormat(), { @@ -50,7 +64,18 @@ describe('BitstreamDataService', () => { }); rdbService = getMockRemoteDataBuildService(); - service = new BitstreamDataService(requestService, rdbService, objectCache, halService, null, bitstreamFormatService, null, null); + TestBed.configureTestingModule({ + providers: [ + { provide: ObjectCacheService, useValue: objectCache }, + { provide: RequestService, useValue: requestService }, + { provide: HALEndpointService, useValue: halService }, + { provide: BitstreamFormatDataService, useValue: bitstreamFormatService }, + { provide: RemoteDataBuildService, useValue: rdbService }, + { provide: DSOChangeAnalyzer, useValue: {} }, + { provide: NotificationsService, useValue: {} }, + ], + }); + service = TestBed.inject(BitstreamDataService); }); describe('composition', () => { @@ -62,11 +87,49 @@ describe('BitstreamDataService', () => { describe('when updating the bitstream\'s format', () => { beforeEach(() => { - service.updateFormat(bitstream, format); + service.updateFormat(bitstream1, format); }); it('should send a put request', () => { expect(requestService.send).toHaveBeenCalledWith(jasmine.any(PutRequest)); }); }); + + describe('removeMultiple', () => { + function mockBuildFromRequestUUIDAndAwait(requestUUID$: string | Observable, callback: (rd?: RemoteData) => Observable, ..._linksToFollow: FollowLinkConfig[]): Observable> { + callback(); + return; + } + + beforeEach(() => { + spyOn(service, 'invalidateByHref'); + spyOn(rdbService, 'buildFromRequestUUIDAndAwait').and.callFake((requestUUID$: string | Observable, callback: (rd?: RemoteData) => Observable, ...linksToFollow: FollowLinkConfig[]) => mockBuildFromRequestUUIDAndAwait(requestUUID$, callback, ...linksToFollow)); + }); + + it('should be able to 1 bitstream', () => { + service.removeMultiple([bitstream1]); + + expect(requestService.send).toHaveBeenCalledWith(objectContaining({ + href: `${url}/bitstreams`, + body: [ + { op: 'remove', path: '/bitstreams/fake-bitstream1' }, + ], + } as PatchRequest)); + expect(service.invalidateByHref).toHaveBeenCalledWith('fake-bitstream1-self'); + }); + + it('should be able to delete multiple bitstreams', () => { + service.removeMultiple([bitstream1, bitstream2]); + + expect(requestService.send).toHaveBeenCalledWith(objectContaining({ + href: `${url}/bitstreams`, + body: [ + { op: 'remove', path: '/bitstreams/fake-bitstream1' }, + { op: 'remove', path: '/bitstreams/fake-bitstream2' }, + ], + } as PatchRequest)); + expect(service.invalidateByHref).toHaveBeenCalledWith('fake-bitstream1-self'); + expect(service.invalidateByHref).toHaveBeenCalledWith('fake-bitstream2-self'); + }); + }); }); diff --git a/src/app/core/data/bitstream-data.service.ts b/src/app/core/data/bitstream-data.service.ts index 6bdcefe187..bb4ec28166 100644 --- a/src/app/core/data/bitstream-data.service.ts +++ b/src/app/core/data/bitstream-data.service.ts @@ -1,7 +1,7 @@ import { HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; -import { map, switchMap, take } from 'rxjs/operators'; +import { find, map, switchMap, take } from 'rxjs/operators'; import { hasValue } from '../../shared/empty.util'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; @@ -14,7 +14,7 @@ import { Item } from '../shared/item.model'; import { BundleDataService } from './bundle-data.service'; import { buildPaginatedList, PaginatedList } from './paginated-list.model'; import { RemoteData } from './remote-data'; -import { PutRequest } from './request.models'; +import { PatchRequest, PutRequest } from './request.models'; import { RequestService } from './request.service'; import { BitstreamFormatDataService } from './bitstream-format-data.service'; import { BitstreamFormat } from '../shared/bitstream-format.model'; @@ -33,7 +33,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { NoContent } from '../shared/NoContent.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { dataService } from './base/data-service.decorator'; -import { Operation } from 'fast-json-patch'; +import { Operation, RemoveOperation } from 'fast-json-patch'; /** * A service to retrieve {@link Bitstream}s from the REST API @@ -277,4 +277,34 @@ export class BitstreamDataService extends IdentifiableDataService imp deleteByHref(href: string, copyVirtualMetadata?: string[]): Observable> { return this.deleteData.deleteByHref(href, copyVirtualMetadata); } + + /** + * Delete multiple {@link Bitstream}s at once by sending a PATCH request to the backend + * + * @param bitstreams The bitstreams that should be removed + */ + removeMultiple(bitstreams: Bitstream[]): Observable> { + const operations: RemoveOperation[] = bitstreams.map((bitstream: Bitstream) => { + return { + op: 'remove', + path: `/bitstreams/${bitstream.id}`, + }; + }); + const requestId: string = this.requestService.generateRequestId(); + + const hrefObs: Observable = this.halService.getEndpoint(this.linkPath); + + hrefObs.pipe( + find((href: string) => hasValue(href)), + ).subscribe((href: string) => { + const request = new PatchRequest(requestId, href, operations); + if (hasValue(this.responseMsToLive)) { + request.responseMsToLive = this.responseMsToLive; + } + this.requestService.send(request); + }); + + return this.rdbService.buildFromRequestUUIDAndAwait(requestId, () => observableCombineLatest(bitstreams.map((bitstream: Bitstream) => this.invalidateByHref(bitstream._links.self.href)))); + } + } diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts index 67d047d776..10e1812131 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.spec.ts @@ -25,6 +25,7 @@ import { getMockRequestService } from '../../../shared/mocks/request.service.moc import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../../shared/remote-data.utils'; import { createPaginatedList } from '../../../shared/testing/utils.test'; import { FieldChangeType } from '../../../core/data/object-updates/field-change-type.model'; +import { BitstreamDataServiceStub } from '../../../shared/testing/bitstream-data-service.stub'; let comp: ItemBitstreamsComponent; let fixture: ComponentFixture; @@ -71,7 +72,7 @@ let objectUpdatesService: ObjectUpdatesService; let router: any; let route: ActivatedRoute; let notificationsService: NotificationsService; -let bitstreamService: BitstreamDataService; +let bitstreamService: BitstreamDataServiceStub; let objectCache: ObjectCacheService; let requestService: RequestService; let searchConfig: SearchConfigurationService; @@ -112,9 +113,7 @@ describe('ItemBitstreamsComponent', () => { success: successNotification } ); - bitstreamService = jasmine.createSpyObj('bitstreamService', { - delete: jasmine.createSpy('delete') - }); + bitstreamService = new BitstreamDataServiceStub(); objectCache = jasmine.createSpyObj('objectCache', { remove: jasmine.createSpy('remove') }); @@ -179,15 +178,16 @@ describe('ItemBitstreamsComponent', () => { describe('when submit is called', () => { beforeEach(() => { + spyOn(bitstreamService, 'removeMultiple').and.callThrough(); comp.submit(); }); - it('should call delete on the bitstreamService for the marked field', () => { - expect(bitstreamService.delete).toHaveBeenCalledWith(bitstream2.id); + it('should call removeMultiple on the bitstreamService for the marked field', () => { + expect(bitstreamService.removeMultiple).toHaveBeenCalledWith([bitstream2]); }); - it('should not call delete on the bitstreamService for the unmarked field', () => { - expect(bitstreamService.delete).not.toHaveBeenCalledWith(bitstream1.id); + it('should not call removeMultiple on the bitstreamService for the unmarked field', () => { + expect(bitstreamService.removeMultiple).not.toHaveBeenCalledWith([bitstream1]); }); }); @@ -210,7 +210,6 @@ describe('ItemBitstreamsComponent', () => { comp.dropBitstream(bundle, { fromIndex: 0, toIndex: 50, - // eslint-disable-next-line no-empty, @typescript-eslint/no-empty-function finish: () => { done(); } diff --git a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts index 0c7dfb1e34..ee53bd919c 100644 --- a/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts +++ b/src/app/item-page/edit-item-page/item-bitstreams/item-bitstreams.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectorRef, Component, NgZone, OnDestroy } from '@angular/core'; import { AbstractItemUpdateComponent } from '../abstract-item-update/abstract-item-update.component'; import { filter, map, switchMap, take } from 'rxjs/operators'; -import { Observable, of as observableOf, Subscription, zip as observableZip } from 'rxjs'; +import { Observable, Subscription, zip as observableZip } from 'rxjs'; import { ItemDataService } from '../../../core/data/item-data.service'; import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; import { ActivatedRoute, Router } from '@angular/router'; @@ -133,20 +133,16 @@ export class ItemBitstreamsComponent extends AbstractItemUpdateComponent impleme ); // Send out delete requests for all deleted bitstreams - const removedResponses$ = removedBitstreams$.pipe( + const removedResponses$: Observable> = removedBitstreams$.pipe( take(1), - switchMap((removedBistreams: Bitstream[]) => { - if (isNotEmpty(removedBistreams)) { - return observableZip(...removedBistreams.map((bitstream: Bitstream) => this.bitstreamService.delete(bitstream.id))); - } else { - return observableOf(undefined); - } + switchMap((removedBitstreams: Bitstream[]) => { + return this.bitstreamService.removeMultiple(removedBitstreams); }) ); // Perform the setup actions from above in order and display notifications - removedResponses$.pipe(take(1)).subscribe((responses: RemoteData[]) => { - this.displayNotifications('item.edit.bitstreams.notifications.remove', responses); + removedResponses$.subscribe((responses: RemoteData) => { + this.displayNotifications('item.edit.bitstreams.notifications.remove', [responses]); this.submitting = false; }); } diff --git a/src/app/shared/testing/bitstream-data-service.stub.ts b/src/app/shared/testing/bitstream-data-service.stub.ts new file mode 100644 index 0000000000..5b05109b98 --- /dev/null +++ b/src/app/shared/testing/bitstream-data-service.stub.ts @@ -0,0 +1,13 @@ +import { Bitstream } from '../../core/shared/bitstream.model'; +import { Observable, of as observableOf } from 'rxjs'; +import { RemoteData } from '../../core/data/remote-data'; +import { NoContent } from '../../core/shared/NoContent.model'; +import { RequestEntryState } from '../../core/data/request-entry-state.model'; + +export class BitstreamDataServiceStub { + + removeMultiple(_bitstreams: Bitstream[]): Observable> { + return observableOf(new RemoteData(0, 0, 0, RequestEntryState.Success)); + } + +} From d9ed91df05be56b32c693a793e675e0a19afd32d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 30 May 2023 11:46:59 +0100 Subject: [PATCH 716/833] new project metadata representation component --- ...-item-metadata-list-element.component.html | 12 +++++ ...em-metadata-list-element.component.spec.ts | 46 +++++++++++++++++++ ...ct-item-metadata-list-element.component.ts | 15 ++++++ 3 files changed, 73 insertions(+) create mode 100644 src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html create mode 100644 src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts create mode 100644 src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html new file mode 100644 index 0000000000..f8eca9da6a --- /dev/null +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts new file mode 100644 index 0000000000..a20120b691 --- /dev/null +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -0,0 +1,46 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { By } from '@angular/platform-browser'; + +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; + +import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-representation/item/item-metadata-representation.model'; +import { Item } from '../../../../core/shared/item.model'; +import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; +import { MetadataValue } from '../../../../core/shared/metadata.models'; + +const projectTitle = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.'; +const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); +const virtMD = Object.assign(new MetadataValue(), { value: projectTitle }); + +const mockItemMetadataRepresentation = Object.assign(new ItemMetadataRepresentation(virtMD), mockItem); + +describe('ProjectItemMetadataListElementComponent', () => { + let comp: ProjectItemMetadataListElementComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports:[ + NgbModule + ], + declarations: [ProjectItemMetadataListElementComponent], + schemas: [NO_ERRORS_SCHEMA] + }).overrideComponent(ProjectItemMetadataListElementComponent, { + set: { changeDetection: ChangeDetectionStrategy.Default } + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ProjectItemMetadataListElementComponent); + comp = fixture.componentInstance; + comp.metadataRepresentation = mockItemMetadataRepresentation; + fixture.detectChanges(); + }); + + it('should show the project\'s name as a link', () => { + const linkText = fixture.debugElement.query(By.css('a')).nativeElement.textContent; + expect(linkText).toBe(projectTitle); + }); + +}); diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts new file mode 100644 index 0000000000..7f291b0996 --- /dev/null +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator'; +import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model'; +import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component'; + +@metadataRepresentationComponent('Project', MetadataRepresentationType.Item) +@Component({ + selector: 'ds-project-item-metadata-list-element', + templateUrl: './project-item-metadata-list-element.component.html' +}) +/** + * The component for displaying an item of the type Project as a metadata field + */ +export class ProjectItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent { +} From 138fccf711ae20330f68c46e969a0709f9f07228 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 30 May 2023 14:05:44 +0200 Subject: [PATCH 717/833] 101623: Fix lint/tests after removing invalid links, Make arrows on Treeview smaller --- src/app/core/browse/browse.service.spec.ts | 6 +++--- src/app/core/shared/flat-browse-definition.model.ts | 8 ++++---- src/app/core/shared/non-hierarchical-browse-definition.ts | 3 +-- src/app/core/shared/value-list-browse-definition.model.ts | 8 ++++---- .../vocabulary-treeview.component.html | 4 ++-- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 0e39e53e43..9f166e3d19 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -27,7 +27,7 @@ describe('BrowseService', () => { const browseDefinitions = [ Object.assign(new FlatBrowseDefinition(), { id: 'date', - metadataBrowse: false, + browseType: 'flatBrowse', sortOptions: [ { name: 'title', @@ -54,7 +54,7 @@ describe('BrowseService', () => { }), Object.assign(new ValueListBrowseDefinition(), { id: 'author', - metadataBrowse: true, + browseType: 'valueList', sortOptions: [ { name: 'title', @@ -158,7 +158,7 @@ describe('BrowseService', () => { describe('when getBrowseEntriesFor is called with a valid browse definition id', () => { it('should call hrefOnlyDataService.findListByHref with the expected href', () => { - const expected = browseDefinitions[1]._links.entries.href; + const expected = (browseDefinitions[1] as ValueListBrowseDefinition)._links.entries.href; scheduler.schedule(() => service.getBrowseEntriesFor(new BrowseEntrySearchOptions(browseDefinitions[1].id)).subscribe()); scheduler.flush(); diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index f275db199c..086fca891b 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -24,13 +24,13 @@ export class FlatBrowseDefinition extends NonHierarchicalBrowseDefinition { return this._links.self.href; } - getRenderType(): string { - return this.dataType; - } - @deserialize _links: { self: HALLink; items: HALLink; }; + + getRenderType(): string { + return this.dataType; + } } diff --git a/src/app/core/shared/non-hierarchical-browse-definition.ts b/src/app/core/shared/non-hierarchical-browse-definition.ts index 12f2a06333..d5481fcc8d 100644 --- a/src/app/core/shared/non-hierarchical-browse-definition.ts +++ b/src/app/core/shared/non-hierarchical-browse-definition.ts @@ -1,7 +1,6 @@ -import { autoserialize, autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { SortOption } from './sort-option.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; -import { HALLink } from './hal-link.model'; import { BrowseDefinition } from './browse-definition.model'; /** diff --git a/src/app/core/shared/value-list-browse-definition.model.ts b/src/app/core/shared/value-list-browse-definition.model.ts index 9bcd8f2e43..3378263962 100644 --- a/src/app/core/shared/value-list-browse-definition.model.ts +++ b/src/app/core/shared/value-list-browse-definition.model.ts @@ -24,13 +24,13 @@ export class ValueListBrowseDefinition extends NonHierarchicalBrowseDefinition { return this._links.self.href; } - getRenderType(): string { - return this.dataType; - } - @deserialize _links: { self: HALLink; entries: HALLink; }; + + getRenderType(): string { + return this.dataType; + } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 9f14795342..9cbc0146a1 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -23,7 +23,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index b7e1330c86..7993fca011 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index e4c9ada3ca..51bd8e53d1 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index 9d02a5d837..ee0c98347d 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,7 +1,7 @@
    @@ -15,7 +15,7 @@
    @@ -15,7 +15,7 @@
    - @@ -13,7 +13,7 @@
    - diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index fe26fd7063..53fc335213 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index cf47f947cc..a77bf549f9 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index 9495577c01..f2416b5c90 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,7 +1,7 @@
    diff --git a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html index c448c70991..f9afd76e4d 100644 --- a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html +++ b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -11,7 +11,7 @@

    {{ dsoNameService.getName(object) }}

    {{object.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index 1e46f11144..3541a52060 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{ dsoNameService.getName(dso) }}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index 96e10156c3..d042c8f150 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{ dsoNameService.getName(dso) }}

    {{dso.shortDescription}}

    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index 3d6e251238..f93032c739 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -2,7 +2,7 @@
    - diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index dcbdd77bff..93d967ceb8 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
    - + {{object.value}} diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 6c2cff5215..41caa74fe8 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,4 +1,4 @@ - + {{ dsoNameService.getName(object) }} diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index 462db7be91..4c4dec8213 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,4 +1,4 @@ - + {{ dsoNameService.getName(object) }} diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index 6856c63cce..5e54823266 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -2,7 +2,7 @@
    - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index 037b62e736..40592b0481 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -2,7 +2,7 @@
    - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index 88d6ab6e07..23c1e19f6c 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,6 +1,6 @@
    - {{ 'submission.sections.ccLicense.link' | translate }}
    - + {{ licenseLink }}
    From 3df0286ec8e6f4ff31927b56dbb90287f786ee9e Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 4 May 2023 17:41:47 +0200 Subject: [PATCH 723/833] fix an issue where the current page would be used instead of a third party referrer --- .../services/browser.referrer.service.spec.ts | 35 +++++++++++++------ .../core/services/browser.referrer.service.ts | 18 ++++++---- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/app/core/services/browser.referrer.service.spec.ts b/src/app/core/services/browser.referrer.service.spec.ts index bff01bf913..9dc8f466b6 100644 --- a/src/app/core/services/browser.referrer.service.spec.ts +++ b/src/app/core/services/browser.referrer.service.spec.ts @@ -10,7 +10,7 @@ describe(`BrowserReferrerService`, () => { beforeEach(() => { routeService = { - getPreviousUrl: () => observableOf('') + getHistory: () => observableOf([]) } as any; service = new BrowserReferrerService( { referrer: documentReferrer }, @@ -20,12 +20,9 @@ describe(`BrowserReferrerService`, () => { }); describe(`getReferrer`, () => { - let prevUrl: string; - - describe(`when getPreviousUrl is an empty string`, () => { + describe(`when the history is an empty`, () => { beforeEach(() => { - prevUrl = ''; - spyOn(routeService, 'getPreviousUrl').and.returnValue(observableOf(prevUrl)); + spyOn(routeService, 'getHistory').and.returnValue(observableOf([])); }); it(`should return document.referrer`, (done: DoneFn) => { @@ -36,13 +33,31 @@ describe(`BrowserReferrerService`, () => { }); }); - describe(`when getPreviousUrl is not empty`, () => { + describe(`when the history only contains the current route`, () => { beforeEach(() => { - prevUrl = '/some/local/route'; - spyOn(routeService, 'getPreviousUrl').and.returnValue(observableOf(prevUrl)); + spyOn(routeService, 'getHistory').and.returnValue(observableOf(['/current/route'])); }); - it(`should return the value emitted by getPreviousUrl combined with the origin from HardRedirectService`, (done: DoneFn) => { + it(`should return document.referrer`, (done: DoneFn) => { + service.getReferrer().subscribe((emittedReferrer: string) => { + expect(emittedReferrer).toBe(documentReferrer); + done(); + }); + }); + }); + + describe(`when the history contains multiple routes`, () => { + const prevUrl = '/the/route/we/need'; + beforeEach(() => { + spyOn(routeService, 'getHistory').and.returnValue(observableOf([ + '/first/route', + '/second/route', + prevUrl, + '/current/route' + ])); + }); + + it(`should return the last route before the current one combined with the origin from HardRedirectService`, (done: DoneFn) => { service.getReferrer().subscribe((emittedReferrer: string) => { expect(emittedReferrer).toBe(origin + prevUrl); done(); diff --git a/src/app/core/services/browser.referrer.service.ts b/src/app/core/services/browser.referrer.service.ts index 1bf1cf2d4a..5aae750599 100644 --- a/src/app/core/services/browser.referrer.service.ts +++ b/src/app/core/services/browser.referrer.service.ts @@ -1,7 +1,7 @@ import { ReferrerService } from './referrer.service'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { isEmpty } from '../../shared/empty.util'; +import { isEmpty, hasNoValue } from '../../shared/empty.util'; import { URLCombiner } from '../url-combiner/url-combiner'; import { Inject, Injectable } from '@angular/core'; import { DOCUMENT } from '@angular/common'; @@ -33,13 +33,19 @@ export class BrowserReferrerService extends ReferrerService { * in the store yet, document.referrer will be used */ public getReferrer(): Observable { - return this.routeService.getPreviousUrl().pipe( - map((prevUrl: string) => { - // if we don't have anything in the history yet, return document.referrer - // (note that that may be empty too, e.g. if you've just opened a new browser tab) - if (isEmpty(prevUrl)) { + return this.routeService.getHistory().pipe( + map((history: string[]) => { + const currentURL = history[history.length - 1]; + // if the current URL isn't set yet, or the only URL in the history is the current one, + // return document.referrer (note that that may be empty too, e.g. if you've just opened a + // new browser tab) + if (hasNoValue(currentURL) || history.every((url: string) => url === currentURL)) { return this.document.referrer; } else { + // reverse the history + const reversedHistory = [...history].reverse(); + // and find the first URL that differs from the current one + const prevUrl = reversedHistory.find((url: string) => url !== currentURL); return new URLCombiner(this.hardRedirectService.getCurrentOrigin(), prevUrl).toString(); } }) From 5b37101bb9f99597c0b84a231ab0d91b2abd1656 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Tue, 30 May 2023 17:17:54 +0200 Subject: [PATCH 724/833] add the rel="noreferrer" attribute when target="_blank" --- .../journal-issue-search-result-grid-element.component.html | 4 ++-- .../journal-volume-search-result-grid-element.component.html | 4 ++-- .../journal/journal-search-result-grid-element.component.html | 4 ++-- .../journal-issue-search-result-list-element.component.html | 2 +- .../journal-volume-search-result-list-element.component.html | 2 +- .../journal/journal-search-result-list-element.component.html | 2 +- .../org-unit-search-result-grid-element.component.html | 4 ++-- .../person/person-search-result-grid-element.component.html | 4 ++-- .../project/project-search-result-grid-element.component.html | 4 ++-- .../org-unit-search-result-list-element.component.html | 2 +- .../person/person-search-result-list-element.component.html | 2 +- .../project/project-search-result-list-element.component.html | 2 +- .../collection-grid-element.component.html | 4 ++-- .../community-grid-element.component.html | 4 ++-- .../collection-search-result-grid-element.component.html | 4 ++-- .../community-search-result-grid-element.component.html | 4 ++-- .../item/item-search-result-grid-element.component.html | 4 ++-- .../browse-entry-list-element.component.html | 2 +- .../collection-list-element.component.html | 2 +- .../community-list-element.component.html | 2 +- .../collection-search-result-list-element.component.html | 2 +- .../community-search-result-list-element.component.html | 2 +- .../item/item-search-result-list-element.component.html | 2 +- 23 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html index a54c78fb78..82f9a695a2 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-issue/journal-issue-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html index 0ae775a9de..9a3cc4cfe8 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal-volume/journal-volume-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html index e71049bdbc..35dbe0b501 100644 --- a/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html +++ b/src/app/entity-groups/journal-entities/item-grid-elements/search-result-grid-elements/journal/journal-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html index a51f55f5a1..33f47edf5c 100644 --- a/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html +++ b/src/app/entity-groups/journal-entities/item-list-elements/search-result-list-elements/journal-issue/journal-issue-search-result-list-element.component.html @@ -1,6 +1,6 @@ - - - diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html index 7dafbf0dc2..809a00d07c 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/person/person-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html index 54f7d73cdc..8323cb4f67 100644 --- a/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html +++ b/src/app/entity-groups/research-entities/item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component.html @@ -5,7 +5,7 @@
    diff --git a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html index 52273d18aa..b4a7a259ab 100644 --- a/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html +++ b/src/app/entity-groups/research-entities/item-list-elements/search-result-list-elements/org-unit/org-unit-search-result-list-element.component.html @@ -1,6 +1,6 @@ - - - - + @@ -11,7 +11,7 @@

    {{object.name}}

    {{object.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html index 9049d8ad18..3b401d8b22 100644 --- a/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html +++ b/src/app/shared/object-grid/community-grid-element/community-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -11,7 +11,7 @@

    {{object.name}}

    {{object.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html index e452353a95..8d6e6337b8 100644 --- a/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/collection-search-result/collection-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{dso.name}}

    {{dso.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html index 4674d3d750..f987284204 100644 --- a/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/community-search-result/community-search-result-grid-element.component.html @@ -1,5 +1,5 @@
    - + @@ -12,7 +12,7 @@

    {{dso.name}}

    {{dso.shortDescription}}

    - View + View
    diff --git a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html index 8d4421a15c..bc691e0295 100644 --- a/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html +++ b/src/app/shared/object-grid/search-result-grid-element/item-search-result/item/item-search-result-grid-element.component.html @@ -3,7 +3,7 @@
    - diff --git a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html index 99d79f3670..79575fd4d9 100644 --- a/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html +++ b/src/app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component.html @@ -1,5 +1,5 @@
    - + {{object.value}} diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 3f2cff33c2..aeefcd6e65 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,4 +1,4 @@ - + {{object.name}} diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index fca6ff77c2..88aacb94db 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,4 +1,4 @@ - + {{object.name}} diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html index e85667382c..7874d33d21 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html index bba6bf2c5e..a28a0b6920 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.html @@ -1,4 +1,4 @@ - +
    diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html index a12989ada3..284885e760 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.html @@ -1,7 +1,7 @@ - Date: Tue, 30 May 2023 22:09:59 +0100 Subject: [PATCH 725/833] Contribution to the Portuguese (pt-PT) translation of DSpace v7.5 Extended revision of the Portuguese (pt-PT) translation of DSpace v7.5. This version adds new message keys, reordered the message keys accordingly to the authoritative master (en.json5) and adds missing or not found translation keys (mentioned in the last section of the file). --- src/assets/i18n/pt-PT.json5 | 4704 ++++++++++++++++++++++++++--------- 1 file changed, 3526 insertions(+), 1178 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c0327c4b54..17477285af 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,271 +1,97 @@ { -// NOTE 1 - Doesn't exist on en_EN +// Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 -// "repository.title.prefixDSpace": "DSpace ::", -"repository.title.prefixDSpace": "DSpace ::", - -// "collection.edit.item-mapper-search-form.placeholder": "Search Item to Map...", -"collection.edit.item-mapper-search-form.placeholder": "Pesquisar Item a Mapear...", - -// "idle.modal.header":"Your Session is About to Expire!", -"idle.modal.header":"A sua sessão está prestes a expirar!", - -// "idle.modal.info":"Your session is about to expire, would you like to logout or continue the session?", -"idle.modal.info":"A sua sessão está prestes a expirar, pretende sair ou continuar a sessão?", - -// "idle.modal.log-out":"Logout", -"idle.modal.log-out":"Sair", - -// "idle.modal.extend-session":"Continue Session", -"idle.modal.extend-session":"Continuar a Sessão", - - - - - -// NOTE 2 - Add to other languages - needed for OpenAIRE compliance - relations between entities - -// "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", -"submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova Entidade Adicionada!", - -// "item.preview.project.funder.name": "Funder", -"item.preview.project.funder.name": "Financiador", - -// "item.preview.project.funder.identifier": "Funder Identifier", -"item.preview.project.funder.identifier": "Identificador do Financiador", - -// "item.preview.oaire.awardNumber": "Funding ID", -"item.preview.oaire.awardNumber": "ID de Financiamento", - -// "item.preview.dc.title.alternative": "Acronym", -"item.preview.dc.title.alternative": "Acrónimo", - -// "item.preview.dc.coverage.spatial": "Jurisdiction", -"item.preview.dc.coverage.spatial": "Jurisdição", - -// "item.preview.oaire.fundingStream": "Funding Stream", -"item.preview.oaire.fundingStream": "Linha de Financiamento", - -// "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", -"submission.import-external.source.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", -"submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projeto", - -// "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", -"submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", - -// "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", -"submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", -"submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", -"submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamento API OpenAIRE", - -// "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", -"submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", - -// "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", -"submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projetos", - -// "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", -"submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projetos", - -// "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", -"relationships.isContributorOf.OrgUnit": "Contribuidor (Unidade organizacional)", - -// "relationships.isContributorOf.Person": "Contributor", -"relationships.isContributorOf.Person": "Contribuidor", - -// "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", -"submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador de Projeto", - -// "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", -"submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador de Projeto", - -// "relationships.isFundingAgencyOf.OrgUnit": "Funder", -"relationships.isFundingAgencyOf.OrgUnit": "Financiador", - - - - - - - - -// Other strings - -//"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", -"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", - -// "submission.general.info.saved": "Saved", -"submission.general.info.saved": "Informação Guardada", - -// "bitstream.edit.authorizations.link": "Edit bitstream's Policies", -"bitstream.edit.authorizations.link": "Editar Polítcas de Ficheiros", - -// "bitstream.edit.return": "Back", -"bitstream.edit.return": "Voltar", - -// "submission.edit.breadcrumbs": "Edit Submission", -"submission.edit.breadcrumbs": "Editar Submissão", - -// "search.filters.filter.subject.label": "Search subject", -"search.filters.filter.subject.label": "Pesquisar Assunto", - -// "search.filters.filter.entityType.label": "Search item type", -"search.filters.filter.entityType.label": "Pesquisar Tipo", - -// "search.filters.filter.author.label": "Search author name", -"search.filters.filter.author.label": "Pesquisar Autor", - -// "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", -"sorting.dc.date.accessioned.ASC": "Data de Disponibilização Ascendente", - -// "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", -"sorting.dc.date.accessioned.DESC": "Data de Disponibilização Descendente", - -// "search.search-form.placeholder": "Search the repository ...", -"search.search-form.placeholder": "Pesquisar ...", - -// "item.edit.item-mapper.search-form.placeholder": "Search collections...", -"item.edit.item-mapper.search-form.placeholder": "Pesquisar coleções...", - -// "item.edit.return": "Back", -"item.edit.return": "Voltar", - -// "repository.title.prefix": "DSpace Angular :: ", -"repository.title.prefix": "DSpace ::", - - -// "thumbnail.person.placeholder": "No Profile Picture Available", -"thumbnail.person.placeholder": "Sem Fotografia de Perfil", - -// "admin.access-control.groups.breadcrumbs": "Groups", -"admin.access-control.groups.breadcrumbs": "Grupos", - -// "admin.access-control.groups.search.placeholder": "Search groups...", -"admin.access-control.groups.search.placeholder": "Pesquisar Grupos...", - -// "admin.access-control.epeople.breadcrumbs": "EPeople", -"admin.access-control.epeople.breadcrumbs": "Utilizador", - -// "admin.access-control.epeople.search.placeholder": "Search people...", -"admin.access-control.epeople.search.placeholder": "Pesquisar Utilizadores...", - -// "admin.access-control.epeople.form.return": "Back", -"admin.access-control.epeople.form.return": "Voltar", - -// "submission.submit.breadcrumbs": "New submission", -"submission.submit.breadcrumbs": "Nova Submissão", - -// "search.filters.filter.namedresourcetype.label": "Search status", -"search.filters.filter.namedresourcetype.label": "Pesquisar Estado", - -// "sorting.dc.date.issued.ASC": "Date Issued Ascending", -"sorting.dc.date.issued.ASC": "Data de Publicação Ascendente", - -// "sorting.dc.date.issued.DESC": "Date Issued Descending", -"sorting.dc.date.issued.DESC": "Data de Publicação Descendente", - -// "sorting.score.ASC": "Least Relevant", -"sorting.score.ASC": "Menos Relevante", - -// "search.filters.filter.dateIssued.min.label": "Start", -"search.filters.filter.dateIssued.min.label": "Início", - -// "search.filters.filter.dateIssued.max.label": "End", -"search.filters.filter.dateIssued.max.label": "Fim", - -// "search.filters.search.submit": "Submit", -"search.filters.search.submit": "Enviar", - -// "default.search.results.head": "Search Results", -"default.search.results.head": "Resultados da Pesquisa", - -// "communityList.breadcrumbs": "Community List", -"communityList.breadcrumbs": "Lista de Comunidades", - -// "browse.previous.button": "Previous", -"browse.previous.button": "Anterior", - -// "browse.next.button": "Next", -"browse.next.button": "Próximo", - -// "pagination.options.description": "Pagination options", -"pagination.options.description": "Opções de Paginação", - -// "mydspace.breadcrumbs": "MyDSpace", -"mydspace.breadcrumbs": "Área Pessoal", - -// "thumbnail.default.placeholder": "No Thumbnail Available", -"thumbnail.default.placeholder": "Sem Miniatura", - -// "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", -"submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar ...", - -// "home.search-form.placeholder": "Search the repository ...", -"home.search-form.placeholder": "Pesquisar ...", - -// "mydspace.search-form.placeholder": "Search in mydspace...", -"mydspace.search-form.placeholder": "Pesquisar na Área Pessoal ...", - - -// OLD strings // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", - "401.help": "Não está autorizado a aceder a esta página. Use o botão abaixo para regressar à página inicial.", + "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", // "401.link.home-page": "Take me to the home page", - "401.link.home-page": "Regresso à página inicial", - + "401.link.home-page": "Voltar à página de início", + // "401.unauthorized": "unauthorized", - "401.unauthorized": "Não Autorizado", - + "401.unauthorized": "Não autorizado", + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", - "403.help": "Não está autorizado a aceder a esta página. Use o botão abaixo para regressar à página inicial.", - + "403.help": "Não possui permissões para aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", + // "403.link.home-page": "Take me to the home page", - "403.link.home-page": "Regresso à página inicial", - + "403.link.home-page": "Voltar à página de início", + // "403.forbidden": "forbidden", - "403.forbidden": "Não Autorizado", + "403.forbidden": "Proibido", + + // "500.page-internal-server-error": "Service Unavailable", + "500.page-internal-server-error": "Serviço indisponível", + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "500.help": "O servidor encontra-se temporariamete indisponível para responder ao seu pedido, devido a processos de manutenção em curso ou capacidade de resposta. Por favor tente mais tarde.", + + // "500.link.home-page": "Take me to the home page", + "500.link.home-page": "Voltar à página de início", + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", - "404.help": "Não pudemos encontrar a página pela qual procura. A página pode ter sido movida ou apagada. Você pode utilizar o botão abaixo para voltar a página inicial. ", - + "404.help": "Não encontramos a página que procura. A página pode ter sido movida ou eliminada. Pode utilizar o botão em baixo para voltar à página de início. ", + // "404.link.home-page": "Take me to the home page", - "404.link.home-page": "Leve-me a página inicial", + "404.link.home-page": "Voltar à página de início", // "404.page-not-found": "page not found", - "404.page-not-found": "Página não encontrada", + "404.page-not-found": "página não encontrada", + + // "error-page.description.401": "unauthorized", + "error-page.description.401": "Não autorizado", + // "error-page.description.403": "forbidden", + "error-page.description.403": "Proibido", + + // "error-page.description.500": "Service Unavailable", + "error-page.description.500": "Serviço indisponível", + + // "error-page.description.404": "page not found", + "error-page.description.404": "página não encontrada", + + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + "error-page.orcid.generic-error": "Ocorreu um erro com a sua autenticação via ORCID. Certifique-se que partilhou o seu endereço de email associado à sua conta ORCID com o repositório. Se o erro persistir, por favor contacte o administrador do sistema.", + + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargado", + + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Apenas Metadados", + + // "access-status.open.access.listelement.badge": "Open Access", + "access-status.open.access.listelement.badge": "Acesso Aberto", + + // "access-status.restricted.listelement.badge": "Restricted", + "access-status.restricted.listelement.badge": "Acesso Restrito", + + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Desconhecido", + // "admin.curation-tasks.breadcrumbs": "System curation tasks", - "admin.curation-tasks.breadcrumbs": "Tarefas de Curadoria", + "admin.curation-tasks.breadcrumbs": "Tarefas de curadoria", // "admin.curation-tasks.title": "System curation tasks", - "admin.curation-tasks.title": "Tarefas de Curadoria", - + "admin.curation-tasks.title": "Tarefas de curadoria", + // "admin.curation-tasks.header": "System curation tasks", - "admin.curation-tasks.header": "Tarefas de Curadoria", - + "admin.curation-tasks.header": "Tarefas de curadoria", + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", - "admin.registries.bitstream-formats.breadcrumbs": "Registo de Formatos de Ficheiro", + "admin.registries.bitstream-formats.breadcrumbs": "Registo de formatos", // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", - "admin.registries.bitstream-formats.create.breadcrumbs": "Registo de Formatos de Ficheiro", + "admin.registries.bitstream-formats.create.breadcrumbs": "Registo de formatos de ficheiro", // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", - "admin.registries.bitstream-formats.create.failure.content": "Um erro ocorreu durante a criação do novo formato de ficheiro.", + "admin.registries.bitstream-formats.create.failure.content": "Ocorreu um erro durante a criação do novo formato de ficheiro.", // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Falha", // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", - "admin.registries.bitstream-formats.create.head": "Criar formato de Ficheiro", + "admin.registries.bitstream-formats.create.head": "Criar formato de ficheiro", // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Adicionar um novo formato de ficheiro", @@ -289,10 +115,10 @@ "admin.registries.bitstream-formats.delete.success.head": "Sucesso", // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", - "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos de ficheiros conhecidos e os seus níveis de suporte.", + "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos conhecidos e os seus níveis de suporte.", // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", - "admin.registries.bitstream-formats.edit.breadcrumbs": "Formatos de Ficheiro", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Formatos de ficheiro", // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", @@ -319,7 +145,7 @@ "admin.registries.bitstream-formats.edit.head": "Formato de bitstream: {{ format }}", // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", - "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o Utilizador, usados por motivos administrativos.", + "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o utilizador, usados por motivos administrativos.", // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Interno", @@ -349,7 +175,7 @@ "admin.registries.bitstream-formats.edit.supportLevel.label": "Nível de suporte", // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", - "admin.registries.bitstream-formats.head": "Registo de Formato de Ficheiro", + "admin.registries.bitstream-formats.head": "Registo de formatos de ficheiros", // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nenhum formato de bitstream para exibir.", @@ -368,35 +194,36 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - // TODO New key - Add a translation + + // "admin.registries.bitstream-formats.table.id" : "ID", "admin.registries.bitstream-formats.table.id" : "ID", - // "admin.registries.bitstream-formats.table.return": "Return", + // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Com suporte", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Suportado", // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconhecido", // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", - "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de Suporte", - - // "admin.registries.bitstream-formats.title": "DSpace Angular :: Bitstream Format Registry", - "admin.registries.bitstream-formats.title": "DSpace :: Registo de Formato de Ficheiro", + "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de suporte", + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + "admin.registries.bitstream-formats.title": "Registo de formatos de ficheiro", + // "admin.registries.metadata.breadcrumbs": "Metadata registry", - "admin.registries.metadata.breadcrumbs": "Registo de Metadados", + "admin.registries.metadata.breadcrumbs": "Registo de metadados", // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "O registo de metadados mantém a lista de todos os campos de metadados disponíveis no repositório. Estes campos podem ser divididos em multiplos esquemas. No entanto, o DSpace requer esquemas de Dublin Core qualificados.", // "admin.registries.metadata.form.create": "Create metadata schema", - "admin.registries.metadata.form.create": "Criar Esquema de Metadados", + "admin.registries.metadata.form.create": "Criar esquema de metadados", // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Editar esquema de metadados", @@ -408,7 +235,7 @@ "admin.registries.metadata.form.namespace": "Namespace", // "admin.registries.metadata.head": "Metadata Registry", - "admin.registries.metadata.head": "Registo de Metadados", + "admin.registries.metadata.head": "Registo de metadados", // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nenhum esquema de metadados para mostrar.", @@ -425,37 +252,38 @@ // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Namespace", - // "admin.registries.metadata.title": "DSpace Angular :: Metadata Registry", - "admin.registries.metadata.title": "DSpace :: Registo de Metadados", - + // "admin.registries.metadata.title": "Metadata Registry", + "admin.registries.metadata.title": "Registo de metadados", + // "admin.registries.schema.breadcrumbs": "Metadata schema", - "admin.registries.schema.breadcrumbs": "Esquema de Metadados", + "admin.registries.schema.breadcrumbs": "Esquema de metadados", // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Este é o esquema de metadados para \"{{namespace}}\".", // "admin.registries.schema.fields.head": "Schema metadata fields", - "admin.registries.schema.fields.head": "Campos do Esquema de Metadados", + "admin.registries.schema.fields.head": "Campos do esquema de metadados", // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nenhum campo de metadado para exibir.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Apagar selecionado(s)", // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - // TODO New key - Add a translation + + // "admin.registries.schema.fields.table.id" : "ID", "admin.registries.schema.fields.table.id" : "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", // "admin.registries.schema.form.create": "Create metadata field", - "admin.registries.schema.form.create": "Criar Elemento de Metadado", + "admin.registries.schema.form.create": "Criar elemento de metadados", // "admin.registries.schema.form.edit": "Edit metadata field", - "admin.registries.schema.form.edit": "Editar Campo de Metadados", + "admin.registries.schema.form.edit": "Editar campo de metadados", // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elemento", @@ -464,10 +292,10 @@ "admin.registries.schema.form.qualifier": "Qualificador", // "admin.registries.schema.form.scopenote": "Scope Note", - "admin.registries.schema.form.scopenote": "Nota de Âmbito", + "admin.registries.schema.form.scopenote": "Nota de âmbito", // "admin.registries.schema.head": "Metadata Schema", - "admin.registries.schema.head": "Esquema de Metadados", + "admin.registries.schema.head": "Esquema de metadados", // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Criou o esquema de metadados \"{{prefix}}\" com sucesso", @@ -494,42 +322,43 @@ "admin.registries.schema.notification.field.deleted.success": "Apagou {{amount}} campo(s) de metadados com sucesso", // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", - "admin.registries.schema.notification.field.edited": "Editou o campo de metadodo \"{{field}}\" com sucesso", + "admin.registries.schema.notification.field.edited": "Editou o campo de metadado \"{{field}}\" com sucesso", // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Sucesso", - // "admin.registries.schema.return": "Return", + // "admin.registries.schema.return": "Back", "admin.registries.schema.return": "Voltar", - // "admin.registries.schema.title": "DSpace Angular :: Metadata Schema Registry", - "admin.registries.schema.title": "DSpace :: Registo de Esquema de Metadados", - - + // "admin.registries.schema.title": "Metadata Schema Registry", + "admin.registries.schema.title": "Registo de esquemas de metadados", // "admin.access-control.epeople.actions.delete": "Delete EPerson", - "admin.access-control.epeople.actions.delete": "Apagar Utilizador", + "admin.access-control.epeople.actions.delete": "Apagar utilizador", // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", // "admin.access-control.epeople.actions.reset": "Reset password", - "admin.access-control.epeople.actions.reset": "Redefinir password", + "admin.access-control.epeople.actions.reset": "Redefinir password", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", - "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do Utilizador", + "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", - // "admin.access-control.epeople.title": "DSpace Angular :: EPeople", - "admin.access-control.epeople.title": "DSpace :: Utilizador", + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "Utilizadores", + + // "admin.access-control.epeople.title": "EPeople", + "admin.access-control.epeople.title": "Utilizadores", // "admin.access-control.epeople.head": "EPeople", - "admin.access-control.epeople.head": "Utilizador", + "admin.access-control.epeople.head": "Utilizadores", // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Pesquisar", // "admin.access-control.epeople.button.see-all": "Browse All", - "admin.access-control.epeople.button.see-all": "Pesquisar Todos", + "admin.access-control.epeople.button.see-all": "Pesquisar tudo", // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadados", @@ -540,12 +369,15 @@ // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Pesquisar", - // "admin.access-control.epeople.button.add": "Add EPerson", - "admin.access-control.epeople.button.add": "Adicionar Utilizador", + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Pesquisar utilizadores...", + + // "admin.access-control.epeople.button.add": "Add EPerson", + "admin.access-control.epeople.button.add": "Adicionar utilizador", // "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.id": "ID", - + "admin.access-control.epeople.table.id": "ID", + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Nome", @@ -558,17 +390,20 @@ // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{name}}\"", + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Não possui autorização para editar este grupo", + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Apagar \"{{name}}\"", // "admin.access-control.epeople.no-items": "No EPeople to show.", - "admin.access-control.epeople.no-items": "Sem Utilizadores para mostrar.", + "admin.access-control.epeople.no-items": "Sem utilizadores para mostrar.", // "admin.access-control.epeople.form.create": "Create EPerson", - "admin.access-control.epeople.form.create": "Criar Utilizador", + "admin.access-control.epeople.form.create": "Criar utilizador", // "admin.access-control.epeople.form.edit": "Edit EPerson", - "admin.access-control.epeople.form.edit": "Editar Utilizador", + "admin.access-control.epeople.form.edit": "Editar utilizador", // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Nome", @@ -584,9 +419,12 @@ // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Pode iniciar sessão", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Requer certificado", + + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Voltar", // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Utilizador criado com sucesso \"{{name}}\"", @@ -607,10 +445,10 @@ "admin.access-control.epeople.form.notification.edited.failure": "Falha ao editor Utilizador \"{{name}}\"", // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success": "Utilizador apagado com sucesso \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "Utilizador removido com sucesso \"{{name}}\"", // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure": "Falha ao apagar Utilizador \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Falha ao remover o utilizador \"{{name}}\"", // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dos grupos:", @@ -620,30 +458,40 @@ // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nome", + + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Coleção/Comunidade", // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", - "admin.access-control.epeople.form.memberOfNoGroups": "Este Utilizador não é membro de nenhum grupo", + "admin.access-control.epeople.form.memberOfNoGroups": "Este utilizador não é membro de nenhum grupo", // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Adicionar a grupos", // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar Utilizador: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar utilizador: \"{{name}}\"", // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "Utilizador apagado com sucesso: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "Utilizador removido com sucesso: \"{{name}}\"", + // "admin.access-control.groups.title": "Groups", + "admin.access-control.groups.title": "Grupos", + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Grupos", - // "admin.access-control.groups.title": "DSpace Angular :: Groups", - "admin.access-control.groups.title": "DSpace :: Grupos", + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", + + // "admin.access-control.groups.title.singleGroup": "Edit Group", + "admin.access-control.groups.title.singleGroup": "Editar grupo", - // "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Edit Group", - "admin.access-control.groups.title.singleGroup": "DSpace :: Editar Grupo", - - // "admin.access-control.groups.title.addGroup": "DSpace Angular :: New Group", - "admin.access-control.groups.title.addGroup": "DSpace :: Novo Grupo", + // "admin.access-control.groups.title.addGroup": "New Group", + "admin.access-control.groups.title.addGroup": "Novo grupo", + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "Novo grupo", + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Grupos", @@ -659,11 +507,17 @@ // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Pesquisar", + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Pesquisar grupos...", + // "admin.access-control.groups.table.id": "ID", "admin.access-control.groups.table.id": "ID", // "admin.access-control.groups.table.name": "Name", "admin.access-control.groups.table.name": "Nome", + + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Coleção/Comunidade", // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Membros", @@ -679,23 +533,21 @@ // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", "admin.access-control.groups.no-items": "Não foram encontrados grupos através do nome ou o UUID", - + // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.success": "Grupo apagado com sucesso \"{{name}}\"", + "admin.access-control.groups.notification.deleted.success": "Grupo removido com sucesso \"{{name}}\"", // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Falha ao apagar grupo \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Falha ao remover grupo \"{{name}}\"", // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{cause}}\"", - - // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", - "admin.access-control.groups.form.alert.permanent": "Este grupo é permanente, não pode ser editado ou apagado. Pode adicionar ou remover membros do grupo nesta página.", + "admin.access-control.groups.form.alert.permanent": "Este grupo é permanente, não pode ser editado ou apagado. Pode adicionar ou remover membros deste grupo nesta página.", // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", - "admin.access-control.groups.form.alert.workflowGroup": "Este grupo não pode ser editado ou apagado porque corresponde a um papel no workflow de submissão em \"{{name}}\" {{comcol}}. Pode apagá-lo na aba \"Atribuir Papéis\" na edição da página {{comcol}}. Pode adicionar ou remover membros nesta página.", + "admin.access-control.groups.form.alert.workflowGroup": "Este grupo não pode ser editado ou apagado porque corresponde a um papel no 'workflow' de depósito em \"{{name}}\" {{comcol}}. Pode apagá-lo na aba \"Atribuir Papéis\" na edição da página {{comcol}}. Pode adicionar ou remover membros nesta página.", // "admin.access-control.groups.form.head.create": "Create group", "admin.access-control.groups.form.head.create": "Criar grupo", @@ -706,6 +558,9 @@ // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Nome do grupo", + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Comunidade ou Coleção", + // "admin.access-control.groups.form.groupDescription": "Description", "admin.access-control.groups.form.groupDescription": "Descrição", @@ -732,7 +587,7 @@ // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", "admin.access-control.groups.form.delete-group.modal.header": "Apagar grupo \"{{ dsoName }}\"", - + // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", "admin.access-control.groups.form.delete-group.modal.info": "Pretende mesmo apagar o grupo \"{{ dsoName }}\"", @@ -755,10 +610,10 @@ "admin.access-control.groups.form.members-list.head": "Utilizador", // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", - "admin.access-control.groups.form.members-list.search.head": "Adicionar Utilizador", + "admin.access-control.groups.form.members-list.search.head": "Adicionar utilizador", // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", - "admin.access-control.groups.form.members-list.button.see-all": "Percorrer TODOS", + "admin.access-control.groups.form.members-list.button.see-all": "Percorrer todos", // "admin.access-control.groups.form.members-list.headMembers": "Current Members", "admin.access-control.groups.form.members-list.headMembers": "Membros atuais", @@ -767,7 +622,7 @@ "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadados", // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", - "admin.access-control.groups.form.members-list.search.scope.email": "Email (exato)", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (completo)", // "admin.access-control.groups.form.members-list.search.button": "Search", "admin.access-control.groups.form.members-list.search.button": "Pesquisar", @@ -777,6 +632,15 @@ // "admin.access-control.groups.form.members-list.table.name": "Name", "admin.access-control.groups.form.members-list.table.name": "Nome", + + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identidade", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "E-mail", + + // "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.netid": "NetID", // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", "admin.access-control.groups.form.members-list.table.edit": "Remover / Adicionar", @@ -791,17 +655,17 @@ "admin.access-control.groups.form.members-list.notification.failure.addMember": "Falha ao adicionar membro: \"{{name}}\"", // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro apagado com sucesso: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro removido com sucesso: \"{{name}}\"", // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Falha ao apagar membro: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Adicionar membro com o nome \"{{name}}\"", // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Sem grupos ativos, indique um nome primeiro.", - + // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", "admin.access-control.groups.form.members-list.no-members-yet": "Grupo sem membros, pesquise e adicione novos membros.", @@ -818,7 +682,7 @@ "admin.access-control.groups.form.subgroups-list.search.head": "Adicionar um subgrupo", // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", - "admin.access-control.groups.form.subgroups-list.button.see-all": "Percorrer Todos", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Percorrer todos", // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", "admin.access-control.groups.form.subgroups-list.headSubgroups": "Subgrupos atuais", @@ -832,6 +696,9 @@ // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Nome", + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Coleção/Comunidade", + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", "admin.access-control.groups.form.subgroups-list.table.edit": "Remover / Adicionar", @@ -851,10 +718,10 @@ "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Falha ao adicionar subgrupo: \"{{name}}\"", // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo apagado com sucesso: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo removido com sucesso: \"{{name}}\"", // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Falha ao apagar subgrupo: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Falha ao remover o subgrupo: \"{{name}}\"", // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Sem grupo ativo, indique um nome primeiro.", @@ -866,14 +733,21 @@ "admin.access-control.groups.form.subgroups-list.no-items": "Não foram encontrados grupos com este nome ou UUID", // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", - "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Este grupo não tem ainda subgrupos.", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Este grupo ainda não tem subgrupos.", - // "admin.access-control.groups.form.return": "Return to groups", - "admin.access-control.groups.form.return": "Retornar aos grupos", + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Voltar", + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + "admin.access-control.groups.form.tooltip.editGroupPage": "Nesta página, pode modificar as propriedades e os membros de um grupo. Na secção superior, pode editar o nome e a descrição do grupo, a menos que se trate de um grupo administrativo para uma coleção ou comunidade, em que o nome e a descrição do grupo são auto-gerados e não podem ser editados. Nas seções seguintes, pode editar o nome e a descrição do grupo. Ver [wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+ou+gerir+a+utilizador+grupo) para mais detalhes.", + + // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Para adicionar ou remover um utilizador de/para este grupo, clique no botão 'Procurar tudo' ou use a barra de pesquisa em baixo para procurar utilizadores (use o menu suspenso, à esquerda da barra de pesquisa, para escolher se pretende pesquisar por metadados ou por e-mail). Depois clique no ícone 'mais' para cada utilizador que deseja adicionar na lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", - - // "admin.search.breadcrumbs": "Administrative Search", + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Para adicionar ou remover um sub-grupo de/para grupo, clique no botão 'Procurar Tudo' ou use a barra de pesquisa em baixo para procurar utilizadores. Depois clique no ícone 'mais' para cada utilizador que deseja adicionar lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos de página no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", + + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Pesquisa administrativa", // "admin.search.collection.edit": "Edit", @@ -888,11 +762,11 @@ // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Editar", - // "admin.search.item.make-private": "Make Private", - "admin.search.item.make-private": "Tornar Privado", + // "admin.search.item.make-private": "Make non-discoverable", + "admin.search.item.make-private": "Tornar privado", - // "admin.search.item.make-public": "Make Public", - "admin.search.item.make-public": "Tornar Público", + // "admin.search.item.make-public": "Make discoverable", + "admin.search.item.make-public": "Tornar público", // "admin.search.item.move": "Move", "admin.search.item.move": "Mover", @@ -904,69 +778,215 @@ "admin.search.item.withdraw": "Retirar", // "admin.search.title": "Administrative Search", - "admin.search.title": "Pesquisa Administrativa", - + "admin.search.title": "Pesquisa administrativa", + // "administrativeView.search.results.head": "Administrative Search", - "administrativeView.search.results.head": "Pesquisa Administrativa", - - - + "administrativeView.search.results.head": "Pesquisa administrativa", // "admin.workflow.breadcrumbs": "Administer Workflow", - "admin.workflow.breadcrumbs": "Gestão do Workflow", + "admin.workflow.breadcrumbs": "Gestão do workflow", // "admin.workflow.title": "Administer Workflow", - "admin.workflow.title": "Gestão do Workflow", + "admin.workflow.title": "Gestão do workflow", // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Workflow", + // "admin.workflow.item.workspace": "Workspace", + "admin.workflow.item.workspace": "Área de trabalho", + // "admin.workflow.item.delete": "Delete", - "admin.workflow.item.delete": "Apagar", + "admin.workflow.item.delete": "Apagar", // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Devolver", + // "admin.workflow.item.policies": "Policies", + "admin.workflow.item.policies": "Políticas", - + // "admin.workflow.item.supervision": "Supervision", + "admin.workflow.item.supervision": "Supervisão", + // "admin.metadata-import.breadcrumbs": "Import Metadata", - "admin.metadata-import.breadcrumbs": "Importação de Metadados", + "admin.metadata-import.breadcrumbs": "Importação de metadados", + + // "admin.batch-import.breadcrumbs": "Import Batch", + "admin.batch-import.breadcrumbs": "Importação em lote (batch)", // "admin.metadata-import.title": "Import Metadata", - "admin.metadata-import.title": "Importação de Metadados", + "admin.metadata-import.title": "Importação de metadados", + + // "admin.batch-import.title": "Import Batch", + "admin.batch-import.title": "Importação em lote (batch)", // "admin.metadata-import.page.header": "Import Metadata", - "admin.metadata-import.page.header": "Importação de Metadados", + "admin.metadata-import.page.header": "Importação de metadados", + + // "admin.batch-import.page.header": "Import Batch", + "admin.batch-import.page.header": "Importação em lote (batch)", // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros CSV que contenham operações em lote de metadados", + + // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", - "admin.metadata-import.page.dropMsg": "Arraste um ficheiro CSV com metadados para importar", + "admin.metadata-import.page.dropMsg": "Arraste ficheiro .csv para importar metadados", + + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + "admin.batch-import.page.dropMsg": "Arraste ficheiro .zip para importação em lote", // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", - "admin.metadata-import.page.dropMsgReplace": "Arraste um ficheiro CSV para substituir o atual", + "admin.metadata-import.page.dropMsgReplace": "Arraste ficheiro .csv para substituir metadados a importar", - // "admin.metadata-import.page.button.return": "Return", + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + "admin.batch-import.page.dropMsgReplace": "Arraste ficheiro .zip para substituir importação em lote", + + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Voltar", // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Continuar", + // "admin.metadata-import.page.button.select-collection": "Select Collection", + "admin.metadata-import.page.button.select-collection": "Selecione a coleção", + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Selecione um ficheiro!", + // "admin.batch-import.page.error.addFile": "Select Zip file first!", + "admin.batch-import.page.error.addFile": "Selecione primeiro o ficheiro .zip!", + + // "admin.metadata-import.page.validateOnly": "Validate Only", + "admin.metadata-import.page.validateOnly": "Validar", + + // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.metadata-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .csv carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", + + // "advanced-workflow-action.rating.form.rating.label": "Rating", + "advanced-workflow-action.rating.form.rating.label": "Classificação", + + // "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + "advanced-workflow-action.rating.form.rating.error": "Deve classificar o item", + + // "advanced-workflow-action.rating.form.review.label": "Review", + "advanced-workflow-action.rating.form.review.label": "Rever", + + // "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + "advanced-workflow-action.rating.form.review.error": "Deve introduzir uma revisão para submeter esta classificação", + + // "advanced-workflow-action.rating.description": "Please select a rating below", + "advanced-workflow-action.rating.description": "Por favor selecione uma classificação em baixo", + + // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + "advanced-workflow-action.rating.description-requiredDescription": "Por favor, selecione em baixo uma classificação e acrescente também uma revisão", + + // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + "advanced-workflow-action.select-reviewer.description-single": "Por favor, selecione um revisor único antes de submeter", + + // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + "advanced-workflow-action.select-reviewer.description-multiple": "Por favor, selecione um ou mais revisores antes de submeter", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Adicionar utilizadores", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Procurar tudo", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Membros atuais", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadados", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (completo)", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Pesquisar", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Nome", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identidade", + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remover / Adicionar", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remover membro com o nome \"{{name}}\"", - + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Membro adicionado com sucessso: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Falha ao adicionar o membro: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Membro removido com sucesso: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Adicionar membro com nome \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Atualmente sem grupo ativo, submeter um nome primeiro.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Ainda não existem membros no grupo, pesquisar e acrescentar.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Não foi encontrado nenhuma utilizador na pesquisa", + + // "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Sem revisor selecionado.", + + // "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.batch-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .zip carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", + + // "admin.batch-import.page.remove": "remove", + "admin.batch-import.page.remove": "Remover", + // "auth.errors.invalid-user": "Invalid email address or password.", "auth.errors.invalid-user": "Endereço de email ou palavra-chave inválidos.", // "auth.messages.expired": "Your session has expired. Please log in again.", - "auth.messages.expired": "Sua sessão expirou. Por favor entre novamente.", - + "auth.messages.expired": "A sua sessão expirou. Por favor, autentique-se novamente.", + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "auth.messages.token-refresh-failed": "A atualização do token da sua sessão falhou. Por favor, autentique-se novamente.", + + // "bitstream.download.page": "Now downloading {{bitstream}}...", + "bitstream.download.page": "A descarregar {{bitstream}}...", + + // "bitstream.download.page.back": "Back", + "bitstream.download.page.back": "Voltar", + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + "bitstream.edit.authorizations.link": "Editar políticas dos bitstreams", + + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + "bitstream.edit.authorizations.title": "Editar políticas dos bitstreams", + + // "bitstream.edit.return": "Back", + "bitstream.edit.return": "Voltar", + // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Ficheiros: ", @@ -998,39 +1018,121 @@ "bitstream.edit.form.primaryBitstream.label": "Ficheiro primário", // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", - "bitstream.edit.form.selectedFormat.hint": "Se o formato não está na lista abaixo, escolha \"Formato não está na lista\" e desreva-o em \"Descreva o novo formato\".", + "bitstream.edit.form.selectedFormat.hint": "Se o formato não se encontrar listado, selecione por favor a opção \"Formato não está na lista\" e faculte detalhes em \"Descreva o novo formato\".", // "bitstream.edit.form.selectedFormat.label": "Selected Format", - "bitstream.edit.form.selectedFormat.label": "Formato Selecionado", + "bitstream.edit.form.selectedFormat.label": "Formato selecionado", // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", - "bitstream.edit.form.selectedFormat.unknown": "Formato não está na lista", + "bitstream.edit.form.selectedFormat.unknown": "O formato não está na lista", // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", - "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formto do ficheiro", + "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formato do ficheiro", + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + "bitstream.edit.form.iiifLabel.label": "IIIF Label", + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + "bitstream.edit.form.iiifLabel.hint": "Etiqueta canvas para esta imagem. Se não for fornecida será utilizada uma etiqueta padrão.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + "bitstream.edit.form.iiifToc.label": "Tabela de conteúdos IIIF", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + "bitstream.edit.form.iiifToc.hint": "Ao acrescentar texto aqui dá início a uma tabela de conteúdos.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + "bitstream.edit.form.iiifWidth.label": "Largura do canvas IIIF", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + "bitstream.edit.form.iiifWidth.hint": "A largura do canvas normalmente deve corresponder à largura da imagem.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + "bitstream.edit.form.iiifHeight.label": "Altura do canvas IIIF", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + "bitstream.edit.form.iiifHeight.hint": "A altura do canvas normalmente deve corresponder à altura da imagem.", + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.content": "As alterações aos ficheiro foram guardadas.", // "bitstream.edit.notifications.saved.title": "Bitstream saved", "bitstream.edit.notifications.saved.title": "Ficheiro guardado", - + // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Editar ficheiro", + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + "bitstream-request-a-copy.alert.canDownload1": "Já tem acesso a este ficheiro. Se quiser descarregar o ficheiro, clique ", + + // "bitstream-request-a-copy.alert.canDownload2": "here", + "bitstream-request-a-copy.alert.canDownload2": "aqui", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + "bitstream-request-a-copy.header": "Solicitar cópia ao autor", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + "bitstream-request-a-copy.intro": "Preencha a seguinte informação para solicitar uma cópia do ficheiro: ", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.one": "Solicitar o seguinte ficheiro: ", + + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + "bitstream-request-a-copy.intro.bitstream.all": "Solicitar todos os ficheiros. ", + + // "bitstream-request-a-copy.name.label": "Name *", + "bitstream-request-a-copy.name.label": "O seu nome *", + + // "bitstream-request-a-copy.name.error": "The name is required", + "bitstream-request-a-copy.name.error": "O preenchimento do nome é um elemento obrigatório!", + + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + "bitstream-request-a-copy.email.label": "O seu endereço de correio eletrónico *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + "bitstream-request-a-copy.email.hint": "Este endereço de correio eletrónico será utilizado para eventualmente proceder ao envio do ficheiro.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + "bitstream-request-a-copy.email.error": "O preenchimento de um endereço de correio electrónico válido é um elemento obrigatório!", + + // "bitstream-request-a-copy.allfiles.label": "Files", + "bitstream-request-a-copy.allfiles.label": "Ficheiro(s) pretendido(s):", + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + "bitstream-request-a-copy.files-all-false.label": "Apenas o ficheiro solicitado", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + "bitstream-request-a-copy.files-all-true.label": "Todos os ficheiros (deste registo) em acesso restrito", + + // "bitstream-request-a-copy.message.label": "Message", + "bitstream-request-a-copy.message.label": "Mensagem a enviar ao autor:", + + // "bitstream-request-a-copy.return": "Back", + "bitstream-request-a-copy.return": "Voltar", + + // "bitstream-request-a-copy.submit": "Request copy", + "bitstream-request-a-copy.submit": "Solicitar cópia ao autor", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + "bitstream-request-a-copy.submit.success": "O seu pedido de cópia foi enviado com sucesso!", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + "bitstream-request-a-copy.submit.error": "Ocorreu algum erro no envio do pedido de cópia!", + + // "browse.back.all-results": "All browse results", + "browse.back.all-results": "Todos os resultados", // "browse.comcol.by.author": "By Author", - "browse.comcol.by.author": "Por Autor", + "browse.comcol.by.author": "Por autor", // "browse.comcol.by.dateissued": "By Issue Date", - "browse.comcol.by.dateissued": "Por Data de Publicação", + "browse.comcol.by.dateissued": "Por data de publicação", // "browse.comcol.by.subject": "By Subject", - "browse.comcol.by.subject": "Por Assunto", + "browse.comcol.by.subject": "Por assunto", // "browse.comcol.by.title": "By Title", - "browse.comcol.by.title": "Por Título", + "browse.comcol.by.title": "Por título", // "browse.comcol.head": "Browse", "browse.comcol.head": "Navegar", @@ -1039,103 +1141,136 @@ "browse.empty": "Sem itens a exibir.", // "browse.metadata.author": "Author", - "browse.metadata.author": "Autor", + "browse.metadata.author": "autor", // "browse.metadata.dateissued": "Issue Date", - "browse.metadata.dateissued": "Data de Publicação", + "browse.metadata.dateissued": "data de Publicação", // "browse.metadata.subject": "Subject", - "browse.metadata.subject": "Assunto", + "browse.metadata.subject": "assunto", // "browse.metadata.title": "Title", - "browse.metadata.title": "Título", - + "browse.metadata.title": "título", + // "browse.metadata.author.breadcrumbs": "Browse by Author", - "browse.metadata.author.breadcrumbs": "Pesquisar por Autor", + "browse.metadata.author.breadcrumbs": "Percorrer por autor", // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", - "browse.metadata.dateissued.breadcrumbs": "Pesquisar por Data", + "browse.metadata.dateissued.breadcrumbs": "Percorrer por data", // "browse.metadata.subject.breadcrumbs": "Browse by Subject", - "browse.metadata.subject.breadcrumbs": "Pesquisar por Assunto", + "browse.metadata.subject.breadcrumbs": "Percorrer por assunto", // "browse.metadata.title.breadcrumbs": "Browse by Title", - "browse.metadata.title.breadcrumbs": "Pesquisar por Título", + "browse.metadata.title.breadcrumbs": "Percorrer por título", + + // "pagination.next.button": "Next", + "pagination.next.button": "Próximo", + + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Anterior", + + // "pagination.next.button.disabled.tooltip": "No more pages of results", + "pagination.next.button.disabled.tooltip": "Sem mais páginas de resultados", + + // "browse.startsWith": ", starting with {{ startsWith }}", + "browse.startsWith": ", começado por {{ startsWith }}", // "browse.startsWith.choose_start": "(Choose start)", "browse.startsWith.choose_start": "(Escolha o início)", // "browse.startsWith.choose_year": "(Choose year)", "browse.startsWith.choose_year": "(Escolha o ano)", - - // "browse.startsWith.jump": "Jump to a point in the index:", - "browse.startsWith.jump": "Pular para um ponto do índice:", + + // "browse.startsWith.choose_year.label": "Choose the issue year", + "browse.startsWith.choose_year.label": "Escolha o ano", + + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Filtrar resultados por ano ou mês", // "browse.startsWith.months.april": "April", - "browse.startsWith.months.april": "Abril", + "browse.startsWith.months.april": "abril", // "browse.startsWith.months.august": "August", - "browse.startsWith.months.august": "Agosto", + "browse.startsWith.months.august": "agosto", // "browse.startsWith.months.december": "December", - "browse.startsWith.months.december": "Dezembro", + "browse.startsWith.months.december": "dezembro", // "browse.startsWith.months.february": "February", - "browse.startsWith.months.february": "Fevereiro", + "browse.startsWith.months.february": "fevereiro", // "browse.startsWith.months.january": "January", - "browse.startsWith.months.january": "Janeiro", + "browse.startsWith.months.january": "janeiro", // "browse.startsWith.months.july": "July", - "browse.startsWith.months.july": "Julho", + "browse.startsWith.months.july": "julho", // "browse.startsWith.months.june": "June", - "browse.startsWith.months.june": "Junho", + "browse.startsWith.months.june": "junho", // "browse.startsWith.months.march": "March", - "browse.startsWith.months.march": "Março", + "browse.startsWith.months.march": "março", // "browse.startsWith.months.may": "May", - "browse.startsWith.months.may": "Maio", + "browse.startsWith.months.may": "maio", // "browse.startsWith.months.none": "(Choose month)", - "browse.startsWith.months.none": "(escolha o mês)", + "browse.startsWith.months.none": "(Escolha o mês)", + + // "browse.startsWith.months.none.label": "Choose the issue month", + "browse.startsWith.months.none.label": "Escolha o mês", // "browse.startsWith.months.november": "November", - "browse.startsWith.months.november": "Novembro", + "browse.startsWith.months.november": "novembro", // "browse.startsWith.months.october": "October", - "browse.startsWith.months.october": "Outubro", + "browse.startsWith.months.october": "outubro", // "browse.startsWith.months.september": "September", - "browse.startsWith.months.september": "Setembro", + "browse.startsWith.months.september": "setembro", - // "browse.startsWith.submit": "Go", + // "browse.startsWith.submit": "Browse", "browse.startsWith.submit": "Pesquisar", - // "browse.startsWith.type_date": "Or type in a date (year-month):", - "browse.startsWith.type_date": "Ou indique uma data (ano-mês):", + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Filtrar resultados por data", - // "browse.startsWith.type_text": "Or enter first few letters:", - "browse.startsWith.type_text": "Ou indique as primeiras letras:", + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + "browse.startsWith.type_date.label": "ou indique uma data (ano-mês):", - // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title": "Percorrer {{ collection }} por {{ field }} {{ value }}", + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Percorrer {{ collection }} por {{ field }}{{ startsWith }} {{ value }}", + + // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "Percorrer {{ collection }} por {{ field }} {{ value }}", + + // "search.browse.item-back": "Back to Results", + "search.browse.item-back": "Voltar aos resultados", // "chips.remove": "Remove chip", "chips.remove": "Remover chip", - + // "claimed-approved-search-result-list-element.title": "Approved", + "claimed-approved-search-result-list-element.title": "Aprovado", + + // "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + "claimed-declined-search-result-list-element.title": "Rejeitado, reenviado para o depositante", + + // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + "claimed-declined-task-search-result-list-element.title": "Declinado, reenviado para a área de trabalho do gestor de revisão", // "collection.create.head": "Create a Collection", "collection.create.head": "Criar uma coleção", // "collection.create.notifications.success": "Successfully created the Collection", - "collection.create.notifications.success": "Coleção criado com sucesso", + "collection.create.notifications.success": "Coleção criada com sucesso", // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", - "collection.create.sub-head": "Criar uma Coleção na Comunidade {{ parent }}", + "collection.create.sub-head": "Criar uma coleção na comunidade {{ parent }}", // "collection.curate.header": "Curate Collection: {{collection}}", "collection.curate.header": "Curadoria da coleção: {{collection}}", @@ -1146,60 +1281,59 @@ // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Confirmar", - // "collection.delete.head": "Delete Collection", - "collection.delete.head": "Apagar Coleção", + // "collection.delete.processing": "Deleting", + "collection.delete.processing": "A apagar", - // "collection.delete.notification.fail": "Collection could not be deleted", - "collection.delete.notification.fail": "Coleção não pôde ser apagada", + // "collection.delete.head": "Delete Collection", + "collection.delete.head": "Apagar coleção", + + // "collection.delete.notification.fail": "collection could not be deleted", + "collection.delete.notification.fail": "Coleção não pode ser apagada", // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Apagou a coleção com sucesso", // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", - "collection.delete.text": "Você tem certeza que deseja apagar a coleção \"{{ dso }}?\"", - - - + "collection.delete.text": "Tem certeza que deseja apagar a coleção \"{{ dso }}?\"", + // "collection.edit.delete": "Delete this collection", "collection.edit.delete": "Apagar esta coleção", // "collection.edit.head": "Edit Collection", - "collection.edit.head": "Editar Coleção", + "collection.edit.head": "Editar coleção", // "collection.edit.breadcrumbs": "Edit Collection", - "collection.edit.breadcrumbs": "Editar Coleção", - - + "collection.edit.breadcrumbs": "Editar coleção", // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeamentos", - // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", - "collection.edit.tabs.item-mapper.title": "Editar Coleção - Mapeamentos", + // "collection.edit.tabs.item-mapper.title": "collection Edit - Item Mapper", + "collection.edit.tabs.item-mapper.title": "Editar coleção - mapeamentos", // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Cancelar", - // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", + // "collection.edit.item-mapper.collection": "collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Coleção: \"{{name}}\"", // "collection.edit.item-mapper.confirm": "Map selected items", "collection.edit.item-mapper.confirm": "Mapear itens selecionados", - + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", - "collection.edit.item-mapper.description": "Esta é a ferramenta de mapeamento de itens que permite aos administradores de coleções mapear itens de outras coleções nesta. Pode pesquisá-los noutras coleções para mapeá-los, ou navegar na lista dos itens atualmente mapeados.", + "collection.edit.item-mapper.description": "Esta é a ferramenta de mapeamento de itens que permite aos administradores de coleções mapear itens de outras coleções para esta. Pode pesquisá-los noutras coleções para os mapear ou navegar na lista dos itens atualmente mapeados.", // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", - "collection.edit.item-mapper.head": "Mapeador de Itens - Mapear itens noutras Coleções", + "collection.edit.item-mapper.head": "Mapeador de Itens - Mapear itens noutras coleções", // "collection.edit.item-mapper.no-search": "Please enter a query to search", - "collection.edit.item-mapper.no-search": "Por favor introduza um termo para pesquisar", + "collection.edit.item-mapper.no-search": "Por favor introduza um termo para pesquisar!", // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", "collection.edit.item-mapper.notifications.map.error.content": "Ocorreu erros ao mapear {{amount}} itens.", // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", - "collection.edit.item-mapper.notifications.map.error.head": "Erros de mapeamento", + "collection.edit.item-mapper.notifications.map.error.head": "Erros de mapeamento!", // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", "collection.edit.item-mapper.notifications.map.success.content": "Mapeou {{amount}} itens com sucesso.", @@ -1214,7 +1348,7 @@ "collection.edit.item-mapper.notifications.unmap.error.head": "Erros de remoção de mapeamento", // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", - "collection.edit.item-mapper.notifications.unmap.success.content": "Removeu os mapeamentps de {{amount}} item(ns) com sucesso.", + "collection.edit.item-mapper.notifications.unmap.success.content": "Removeu os mapeamentos de {{amount}} item(ns) com sucesso.", // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", "collection.edit.item-mapper.notifications.unmap.success.head": "Remoção de mapeamentos completa", @@ -1222,16 +1356,23 @@ // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Remover mapeamentos selecionados", + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + "collection.edit.item-mapper.search-form.placeholder": "Pesquisar items...", + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Navegar por itens mapeados", // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Mapear novos itens", + // "collection.edit.logo.delete.title": "Delete logo", + "collection.edit.logo.delete.title": "Apagar logótipo", - + // "collection.edit.logo.delete-undo.title": "Undo delete", + "collection.edit.logo.delete-undo.title": "Não apagar", + // "collection.edit.logo.label": "Collection logo", - "collection.edit.logo.label": "Logotipo da Coleção", + "collection.edit.logo.label": "Logótipo da coleção", // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", "collection.edit.logo.notifications.add.error": "Falha ao carregar o logotipo da coleção. Verifique o ficheiro antes de tentar de novo.", @@ -1240,7 +1381,7 @@ "collection.edit.logo.notifications.add.success": "O logotipo da coleção foi carregado com sucesso.", // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", - "collection.edit.logo.notifications.delete.success.title": "Logo removido", + "collection.edit.logo.notifications.delete.success.title": "Logótipo apagado", // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", "collection.edit.logo.notifications.delete.success.content": "O logotipo da coleção foi apagado com sucesso", @@ -1249,41 +1390,46 @@ "collection.edit.logo.notifications.delete.error.title": "Erro ao apagar o logotipo", // "collection.edit.logo.upload": "Drop a Collection Logo to upload", - "collection.edit.logo.upload": "Arraste um logotipo da coleção para carregar", - - + "collection.edit.logo.upload": "Arraste um logótipo da coleção para carregar", // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Coleção editada com sucesso", - // "collection.edit.return": "Return", + // "collection.edit.return": "Back", "collection.edit.return": "Voltar", - - // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Curadoria", - // "collection.edit.tabs.curate.title": "Collection Edit - Curate", - "collection.edit.tabs.curate.title": "Editar Coleção - Curadoria", + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + "collection.edit.tabs.curate.title": "Editar coleção - Curadoria", // "collection.edit.tabs.authorizations.head": "Authorizations", "collection.edit.tabs.authorizations.head": "Autorizações", // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", - "collection.edit.tabs.authorizations.title": "Editar Coleção - Autorizações", + "collection.edit.tabs.authorizations.title": "Editar coleção - autorizações", + + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "Carregar mais pacotes", + + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Carregar mais", + + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + "collection.edit.item.authorizations.show-bitstreams-button": "Mostrar as políticas do bitstream para o pacote", // "collection.edit.tabs.metadata.head": "Edit Metadata", - "collection.edit.tabs.metadata.head": "Editar Metadados", + "collection.edit.tabs.metadata.head": "Editar metadados", // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", - "collection.edit.tabs.metadata.title": "Editar Coleção - Metadados", + "collection.edit.tabs.metadata.title": "Editar coleção - metadados", // "collection.edit.tabs.roles.head": "Assign Roles", - "collection.edit.tabs.roles.head": "Atribuir Papéis", + "collection.edit.tabs.roles.head": "Atribuir perfis", // "collection.edit.tabs.roles.title": "Collection Edit - Roles", - "collection.edit.tabs.roles.title": "Editar Coleção - Papéis", + "collection.edit.tabs.roles.title": "Editar coleção - perfis", // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", "collection.edit.tabs.source.external": "Esta coleção agrega conteúdo de uma fonte externa", @@ -1298,7 +1444,7 @@ "collection.edit.tabs.source.form.head": "Configure uma fonte externa", // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", - "collection.edit.tabs.source.form.metadataConfigId": "Formato de Metadados", + "collection.edit.tabs.source.form.metadataConfigId": "Formato de metadados", // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", "collection.edit.tabs.source.form.oaiSetId": "ID do set OAI-PMH", @@ -1316,12 +1462,12 @@ "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Agregar apenas metadados", // "collection.edit.tabs.source.head": "Content Source", - "collection.edit.tabs.source.head": "Conteúdo fonte", + "collection.edit.tabs.source.head": "Fonte externa", // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "collection.edit.tabs.source.notifications.discarded.content": "As alterações foram ignoradas. Para regravar as alterações clique no botão ´Voltar'", - // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", "collection.edit.tabs.source.notifications.discarded.title": "Alterações descartadas", // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", @@ -1337,16 +1483,14 @@ "collection.edit.tabs.source.notifications.saved.title": "Conteúdo fonte guardado", // "collection.edit.tabs.source.title": "Collection Edit - Content Source", - "collection.edit.tabs.source.title": "Editar Coleção - Conteúdo fonte", - - + "collection.edit.tabs.source.title": "Editar coleção - conteúdo fonte", // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Adicionar", // "collection.edit.template.breadcrumbs": "Item template", - "collection.edit.template.breadcrumbs": "Template do Item", - + "collection.edit.template.breadcrumbs": "Template do item", + // "collection.edit.template.cancel": "Cancel", "collection.edit.template.cancel": "Cancelar", @@ -1356,22 +1500,26 @@ // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Editar", + // "collection.edit.template.error": "An error occurred retrieving the template item", + "collection.edit.template.error": "Ocorreu um erro na recuperação do template do item", + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", - "collection.edit.template.head": "Editar Modelo do Item para a Coleção \"{{ collection }}\"", + "collection.edit.template.head": "Editar template do item para a coleção \"{{ collection }}\"", // "collection.edit.template.label": "Template item", - "collection.edit.template.label": "Modelo do item", + "collection.edit.template.label": "Template do item", + + // "collection.edit.template.loading": "Loading template item...", + "collection.edit.template.loading": "A carregar o template do item...", // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Erro ao apagar o template do item", // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", - "collection.edit.template.notifications.delete.success": "Template do Item apagado com sucesso", + "collection.edit.template.notifications.delete.success": "Template do item apagado com sucesso", // "collection.edit.template.title": "Edit Template Item", - "collection.edit.template.title": "Editar Modelo do Item", - - + "collection.edit.template.title": "Editar template do item", // "collection.form.abstract": "Short Description", "collection.form.abstract": "Descrição curta", @@ -1397,15 +1545,14 @@ // "collection.form.title": "Name", "collection.form.title": "Nome", - - - // "collection.listelement.badge": "Collection", - "collection.listelement.badge": "Coleção", - - - + // "collection.form.entityType": "Entity Type", + "collection.form.entityType": "Tipo de entidade", + + // "collection.listelement.badge": "collection", + "collection.listelement.badge": "coleção", + // "collection.page.browse.recent.head": "Recent Submissions", - "collection.page.browse.recent.head": "Submissões Recentes", + "collection.page.browse.recent.head": "Entradas recentes", // "collection.page.browse.recent.empty": "No items to show", "collection.page.browse.recent.empty": "Nenhum item a exibir", @@ -1413,8 +1560,8 @@ // "collection.page.edit": "Edit this collection", "collection.page.edit": "Editar esta coleção", - // "collection.page.handle": "Permanent URI for this collection", - "collection.page.handle": "URI Permanente para esta coleção", + // "collection.page.handle": "Permanent URI for this collection:", + "collection.page.handle": "URI permanente para esta coleção:", // "collection.page.license": "License", "collection.page.license": "Licença", @@ -1422,8 +1569,6 @@ // "collection.page.news": "News", "collection.page.news": "Notícias", - - // "collection.select.confirm": "Confirm selected", "collection.select.confirm": "Confirmar seleção", @@ -1433,26 +1578,92 @@ // "collection.select.table.title": "Title", "collection.select.table.title": "Título", + // "collection.source.controls.head": "Harvest Controls", + "collection.source.controls.head": "Controlos de importação", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + "collection.source.controls.test.submit.error": "Algo correu mal ao inicar os testes das configurações", + + // "collection.source.controls.test.failed": "The script to test the settings has failed", + "collection.source.controls.test.failed": "O script para testar as configurações falhou!", + + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + "collection.source.controls.test.completed": "O script para testar as configurações terminou com sucesso!", + + // "collection.source.controls.test.submit": "Test configuration", + "collection.source.controls.test.submit": "Configuração de teste", + + // "collection.source.controls.test.running": "Testing configuration...", + "collection.source.controls.test.running": "A testar as configurações...", + + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + "collection.source.controls.import.submit.success": "A importação iniciou com sucesso.", + + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + "collection.source.controls.import.submit.error": "Algo correu mal ao iniciar a importação", + + // "collection.source.controls.import.submit": "Import now", + "collection.source.controls.import.submit": "Importar agora", + + // "collection.source.controls.import.running": "Importing...", + "collection.source.controls.import.running": "Importar...", + + // "collection.source.controls.import.failed": "An error occurred during the import", + "collection.source.controls.import.failed": "Ocorreu um erro durante a importação", + + // "collection.source.controls.import.completed": "The import completed", + "collection.source.controls.import.completed": "A importação encontra-se completa", + + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + "collection.source.controls.reset.submit.success": "A reposição e re-importação iniciou-se com sucesso", + + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + "collection.source.controls.reset.submit.error": "Algo correu mal com a reposição e re-importação", + + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + "collection.source.controls.reset.failed": "Ocorreu um erro durante a reposição e a re-importação", + + // "collection.source.controls.reset.completed": "The reset and reimport completed", + "collection.source.controls.reset.completed": "A reposição e a re-importação encontram-se completas", + + // "collection.source.controls.reset.submit": "Reset and reimport", + "collection.source.controls.reset.submit": "Repor e re-importar", + + // "collection.source.controls.reset.running": "Resetting and reimporting...", + "collection.source.controls.reset.running": "Repor e re-importar...", + + // "collection.source.controls.harvest.status": "Harvest status:", + "collection.source.controls.harvest.status": "Estado da importação:", + + // "collection.source.controls.harvest.start": "Harvest start time:", + "collection.source.controls.harvest.start": "Hora de início da importação:", + + // "collection.source.controls.harvest.last": "Last time harvested:", + "collection.source.controls.harvest.start": "Hora de fim da importação:", + + // "collection.source.controls.harvest.message": "Harvest info:", + "collection.source.controls.harvest.message": "Informação sobre a importação:", + + // "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.harvest.no-information": "N/A", // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "As configurações providenciadas foram testadas mas não funcionam.", // "collection.source.update.notifications.error.title": "Server Error", - "collection.source.update.notifications.error.title": "Erro no Servidor", + "collection.source.update.notifications.error.title": "Erro no servidor", - - - // "communityList.tabTitle": "DSpace - Community List", - "communityList.tabTitle": "DSpace - Lista de Comunidades", + // "communityList.breadcrumbs": "Community List", + "communityList.breadcrumbs": "Lista de comunidades", + + // "communityList.tabTitle": "Community List", + "communityList.tabTitle": "Lista de comunidades", // "communityList.title": "List of Communities", - "communityList.title": "Lista de Comunidades", + "communityList.title": "Lista de comunidades", // "communityList.showMore": "Show More", - "communityList.showMore": "Mostrar Mais", - - + "communityList.showMore": "Mostrar mais", // "community.create.head": "Create a Community", "community.create.head": "Criar uma comunidade", @@ -1464,7 +1675,7 @@ "community.create.sub-head": "Criar uma Sub-Comunidade para Comunidade {{ parent }}", // "community.curate.header": "Curate Community: {{community}}", - "community.curate.header": "Curar Comunidade: {{community}}", + "community.curate.header": "Curar comunidade: {{community}}", // "community.delete.cancel": "Cancel", "community.delete.cancel": "Cancelar", @@ -1472,11 +1683,14 @@ // "community.delete.confirm": "Confirm", "community.delete.confirm": "Confirmar", + // "community.delete.processing": "Deleting...", + "community.delete.processing": "A apagar...", + // "community.delete.head": "Delete Community", - "community.delete.head": "Apagar Comunidade", + "community.delete.head": "Apagar comunidade", // "community.delete.notification.fail": "Community could not be deleted", - "community.delete.notification.fail": "Não foi possível apagar a Comunidade", + "community.delete.notification.fail": "Não foi possível apagar a comunidade", // "community.delete.notification.success": "Successfully deleted community", "community.delete.notification.success": "Comunidade apagada com sucesso", @@ -1488,34 +1702,37 @@ "community.edit.delete": "Apagar esta comunidade", // "community.edit.head": "Edit Community", - "community.edit.head": "Editar Comunidade", + "community.edit.head": "Editar comunidade", // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Editar Comunidade", - + // "community.edit.logo.delete.title": "Delete logo", + "community.edit.logo.delete.title": "Apagar logótipo", + + // "community.edit.logo.delete-undo.title": "Undo delete", + "community.edit.logo.delete-undo.title": "Não apagar logótipo", + // "community.edit.logo.label": "Community logo", - "community.edit.logo.label": "Logo da Comunidade", + "community.edit.logo.label": "Logótipo da comunidade", // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", - "community.edit.logo.notifications.add.error": "Falha ao carregar o logotipo da comunidade. Verifique o conteúdo antes de tentar de novo.", + "community.edit.logo.notifications.add.error": "Falha ao carregar o logótipo da comunidade. Verifique o conteúdo antes de tentar de novo.", // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", - "community.edit.logo.notifications.add.success": "Logotipo da comunindade carregado com sucesso.", + "community.edit.logo.notifications.add.success": "Logótipo da comunindade carregado com sucesso.", // "community.edit.logo.notifications.delete.success.title": "Logo deleted", - "community.edit.logo.notifications.delete.success.title": "Logotipo apagado", + "community.edit.logo.notifications.delete.success.title": "Logótipo apagado", // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", - "community.edit.logo.notifications.delete.success.content": "O logotipo da comuindade foi apagado com sucesso", + "community.edit.logo.notifications.delete.success.content": "O logótipo da comuindade foi apagado com sucesso", // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", - "community.edit.logo.notifications.delete.error.title": "Erro ao apagar o logotipo", + "community.edit.logo.notifications.delete.error.title": "Erro ao apagar o logótipo", // "community.edit.logo.upload": "Drop a Community Logo to upload", - "community.edit.logo.upload": "Arraste um logotipo da comunidade para carregar", - - + "community.edit.logo.upload": "Arraste um logótipo da comunidade para carregar", // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Comunidade editada com sucesso", @@ -1526,54 +1743,53 @@ // "community.edit.notifications.error": "An error occured while editing the Community", "community.edit.notifications.error": "Ocorreu um erro ao editar a comunidade", - // "community.edit.return": "Return", + // "community.edit.return": "Back", "community.edit.return": "Voltar", - - // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Curadoria", // "community.edit.tabs.curate.title": "Community Edit - Curate", - "community.edit.tabs.curate.title": "Editar Comunidade - Curadoria", + "community.edit.tabs.curate.title": "Editar comunidade - curadoria", // "community.edit.tabs.metadata.head": "Edit Metadata", - "community.edit.tabs.metadata.head": "Editar Metadados", + "community.edit.tabs.metadata.head": "Editar metadados", // "community.edit.tabs.metadata.title": "Community Edit - Metadata", - "community.edit.tabs.metadata.title": "Editar Comunidade - Metadados", + "community.edit.tabs.metadata.title": "Editar comunidade - metadados", // "community.edit.tabs.roles.head": "Assign Roles", - "community.edit.tabs.roles.head": "Atribuir Papéis", + "community.edit.tabs.roles.head": "Atribuir perfis", // "community.edit.tabs.roles.title": "Community Edit - Roles", - "community.edit.tabs.roles.title": "Editar Comunidade - Papéis", + "community.edit.tabs.roles.title": "Editar comunidade - perfis", // "community.edit.tabs.authorizations.head": "Authorizations", "community.edit.tabs.authorizations.head": "Autorizações", - + // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", - "community.edit.tabs.authorizations.title": "Editar Comunidade - Autorizações", - - + "community.edit.tabs.authorizations.title": "Editar comunidade - autorizações", // "community.listelement.badge": "Community", "community.listelement.badge": "Comunidade", - - // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Nenhum", // "comcol-role.edit.create": "Create", "comcol-role.edit.create": "Criar", + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + "comcol-role.edit.create.error.title": "Falha na criação de um grupo para o perfil '{{ role }}'", + // "comcol-role.edit.restrict": "Restrict", "comcol-role.edit.restrict": "Restrito", // "comcol-role.edit.delete": "Delete", "comcol-role.edit.delete": "Apagar", + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + "comcol-role.edit.delete.error.title": "Falha na remoção do '{{ role }}' nos perfis do grupo", // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Administradores", @@ -1581,63 +1797,60 @@ // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administradores", - // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.community-admin.description": "Os administradores de Comunidade podem criar sub-comunidades e coleções, assim como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Além disso, decidem quem pode submeter itens em qualquer coleção, editar metadados (após submissão), e mapear itens de outras coleções (sujeito a autorização).", + "comcol-role.edit.community-admin.description": "Os 'Administradores de comunidades' podem criar 'sub-comunidades' e/ou 'coleções', podem também gerir ou delegar a gestão dessas 'sub-comunidade' ou 'coleções'. Adicionalmente, decidem quem pode depositar itens em coleções, editar metadados (após o depósito) e mapear itens de outras coleções (sujeito a autorização).", // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", - "comcol-role.edit.collection-admin.description": "Os administradores de coleção decidem quem pode submeter itens a uma coleção, editar metadados (após submissão), e mapear itens de outras coleções (sujeito a autorização para essa coleção).", - + "comcol-role.edit.collection-admin.description": "Os 'Administradores de coleção' decidem quem pode depositar itens a uma coleção, editar metadados (após o depósito), e mapear itens de outras coleções (sujeito a autorização para essa coleção).", // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Depositantes", // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", - "comcol-role.edit.submitters.description": "Os Utilizadores e Grupos que possuem permissões de depósito nesta coleção.", - + "comcol-role.edit.submitters.description": "Os 'Utilizadores' e 'Grupos' que possuem permissões de depósito nesta coleção.", // "comcol-role.edit.item_read.name": "Default item read access", - "comcol-role.edit.item_read.name": "acesso de Leitura Padrão ao item", + "comcol-role.edit.item_read.name": "Acesso de leitura ao item predefinido (DEFAULT_ITEM_READ)", // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", - "comcol-role.edit.item_read.description": "Utilizadores e Grupos que podem ver itens submetidos nesta coleção. As alterações a este papel não são retroativas. Os itens existentes no sistema ainda poderão ser vistos por aqueles que tiveram acesso de leitura no momento de sua adição.", + "comcol-role.edit.item_read.description": "'Utilizadores' e 'Grupos' que podem ver itens depositados nesta coleção. As alterações feitas a este papel não são retroativas. Os itens existentes no sistema ainda poderão ser vistos por aqueles que tiveram acesso de leitura no momento da sua adição.", // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", - "comcol-role.edit.item_read.anonymous-group": "A definição de Leitura padrão de novos itens está definida para Utilizadores Anónimos.", - + "comcol-role.edit.item_read.anonymous-group": "A leitura de novos itens (Item Read) está predefinida para utilizadores anónimos.", // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", - "comcol-role.edit.bitstream_read.name": "Leitura padrão de ficheiros", + "comcol-role.edit.bitstream_read.name": "Leitura predefinida de ficheiros (DEFAULT_BITSTREAM_READ)", // "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.bitstream_read.description": "Os administradores de Comunidade podem criar sub-comunidades e coleções, assim como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Além disso, decidem quem pode submeter itens em qualquer coleção, editar metadados (após submissão), e mapear itens de outras coleções (sujeito a autorização).", + "comcol-role.edit.bitstream_read.description": "Os 'Administradores de comunidades' podem criar sub-comunidades e coleções, bem como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Adicionalmente, decidem quem pode depositar itens em qualquer coleção, editar metadados (após depósito) e mapear itens de outras coleções (sujeito a autorização).", // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", - "comcol-role.edit.bitstream_read.anonymous-group": "A definição de Leitura padrão de novos ficheiros está definida para Utilizadores Anónimos.", - + "comcol-role.edit.bitstream_read.anonymous-group": "A leitura de novos ficheiros (Bitstream Read) está predefinida para utilizadores anónimos.", // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Editores", // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.editor.description": "Os Editores podem editar os metadados, e depois aceitar ou rejeitar as submissões.", - - + "comcol-role.edit.editor.description": "Os 'Editores' podem aceitar ou rejeitar os depósitos e podem editar os seus metadados.", + // "comcol-role.edit.finaleditor.name": "Final editors", - "comcol-role.edit.finaleditor.name": "Editores Finais", + "comcol-role.edit.finaleditor.name": "Validadores finais", // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", - "comcol-role.edit.finaleditor.description": "Os Editores Finais podem editar os metadados de uma submissão, mas não os podem rejeitar.", - + "comcol-role.edit.finaleditor.description": "Os 'Validadores finais' podem editar os metadados de um depósito, mas não os podem rejeitar.", // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Revisores", // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", - "comcol-role.edit.reviewer.description": "Os Revisores podem aceitar ou rejeitar as submissões enviadas. Contudo, não podem editar os metadados das submissões.", - - + "comcol-role.edit.reviewer.description": "Os 'Revisores' podem aceitar ou rejeitar os depósitos, mas não podem editar os seus metadados.", + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", + "comcol-role.edit.scorereviewers.name": "Pontuar revisores", + + // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + "comcol-role.edit.scorereviewers.description": "Os 'Revisores' podem dar uma pontuação aos depósitos recebidos, isto irá determinar se o depósito será rejeitado ou não.", + // "community.form.abstract": "Short Description", "community.form.abstract": "Descrição curta", @@ -1648,7 +1861,7 @@ "community.form.errors.title.required": "Por favor indique um nome para a comunidade", // "community.form.rights": "Copyright text (HTML)", - "community.form.rights": "Texto de direito de cópia (HTML)", + "community.form.rights": "Texto de Copyright (HTML)", // "community.form.tableofcontents": "News (HTML)", "community.form.tableofcontents": "Notícias (HTML)", @@ -1660,7 +1873,7 @@ "community.page.edit": "Editar esta comunidade", // "community.page.handle": "Permanent URI for this community", - "community.page.handle": "URI Permanente desta comunidade", + "community.page.handle": "URI permanente desta comunidade:", // "community.page.license": "License", "community.page.license": "Licença", @@ -1669,15 +1882,13 @@ "community.page.news": "Notícias", // "community.all-lists.head": "Subcommunities and Collections", - "community.all-lists.head": "Sub-Comunidade e Coleções", + "community.all-lists.head": "Sub-comunidade e coleções", // "community.sub-collection-list.head": "Collections of this Community", - "community.sub-collection-list.head": "Coleções desta Comunidade", + "community.sub-collection-list.head": "Coleções desta comunidade", // "community.sub-community-list.head": "Communities of this Community", - "community.sub-community-list.head": "Comunidades desta Comunidade", - - + "community.sub-community-list.head": "Comunidades desta comunidade", // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Aceitar todos", @@ -1700,6 +1911,12 @@ // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(sempre necessária)", + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + "cookies.consent.app.disable-all.description": "Utilize este interruptor para ativar ou desativar todos os serviços.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + "cookies.consent.app.disable-all.title": "Ativar ou desativar todos os serviços", + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Existem alterações desde a sua última visita, atualize o seu consentimento.", @@ -1708,26 +1925,42 @@ // "cookies.consent.decline": "Decline", "cookies.consent.decline": "Rejeitar", + + // "cookies.consent.ok": "That's ok", + "cookies.consent.ok": "Concordo", + + // "cookies.consent.save": "Save", + "cookies.consent.save": "Guardar", + + // "cookies.consent.content-notice.title": "Cookie Consent", + "cookies.consent.content-notice.title": "Consentir cookies", // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", - "cookies.consent.content-notice.description": "Coletamos e processamos informação pessoal para os seguintes propósitos: Autenticação, Guardar Preferências, Termos de Uso e Estatísticas.
    To learn more, please read our {privacyPolicy}.", + "cookies.consent.content-notice.description": "Recolhemos e processamos informação pessoal para os seguintes propósitos: Autenticação, Guardar Preferências, Termos de Uso e Estatísticas.
    Para saber mais, por favor leia a nossa {privacyPolicy}.", + + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + "cookies.consent.content-notice.description.no-privacy": "Recolhemos e processamos as suas informações pessoais para os seguintes fins: Autenticação, Preferências, Reconhecimento e Estatísticas.", // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Pesonalizar", // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", - "cookies.consent.content-modal.description": "Aqui pode ver e personalizar a informação pessoal que coletamos sobre si.", + "cookies.consent.content-modal.description": "Aqui pode ver e personalizar a informação pessoal que recolhemos sobre si.", // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", "cookies.consent.content-modal.privacy-policy.name": "política de privacidade", // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", "cookies.consent.content-modal.privacy-policy.text": "Para saber mais, leia a {privacyPolicy}.", - + // "cookies.consent.content-modal.title": "Information that we collect", - "cookies.consent.content-modal.title": "Informação que coletamos", - + "cookies.consent.content-modal.title": "Informação que recolhemos", + // "cookies.consent.content-modal.services": "Services", + "cookies.consent.content-modal.services": "Serviços", + + // "cookies.consent.content-modal.service": "Service", + "cookies.consent.content-modal.service": "Serviço", // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Autenticação", @@ -1735,22 +1968,17 @@ // "cookies.consent.app.description.authentication": "Required for signing you in", "cookies.consent.app.description.authentication": "Obrigatório para iniciar sessão", - // "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.title.preferences": "Preferências", // "cookies.consent.app.description.preferences": "Required for saving your preferences", "cookies.consent.app.description.preferences": "Obrigatório para guardar as suas preferências", - - // "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.title.acknowledgement": "Termos de Uso", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - "cookies.consent.app.description.acknowledgement": "Requerido para guardar os Termos de uso e Consentimento", - - + "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os nossos 'Termos de Uso' e 'Consentimentos'", // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", @@ -1758,7 +1986,11 @@ // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Permite-nos rastrear dados estatísticos", - + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + + // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + "cookies.consent.app.description.google-recaptcha": "Utilizamos o serviço Google reCAPTCHA durante o registo e recuperação de palavra-passe", // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funcional", @@ -1766,15 +1998,23 @@ // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Estatísticos", + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + "cookies.consent.purpose.registration-password-recovery": "Registo e recuperação de senha", - // "curation-task.task.checklinks.label": "Check Links in Metadata", - "curation-task.task.checklinks.label": "Verifica ligações nos metadados", + // "cookies.consent.purpose.sharing": "Sharing", + "cookies.consent.purpose.sharing": "Partilha", + + // "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Gerar página de citações", + + // "curation-task.task.checklinks.label": "Check Links in Metadata", + "curation-task.task.checklinks.label": "Verifica ligações nos metadados", // "curation-task.task.noop.label": "NOOP", "curation-task.task.noop.label": "NOOP", // "curation-task.task.profileformats.label": "Profile Bitstream Formats", - "curation-task.task.profileformats.label": "Perfil dos Formatos de Ficheiro", + "curation-task.task.profileformats.label": "Perfil dos formatos de ficheiro", // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", "curation-task.task.requiredmetadata.label": "Verifica metadados obrigatórios", @@ -1783,15 +2023,16 @@ "curation-task.task.translate.label": "Tradutor Microsoft", // "curation-task.task.vscan.label": "Virus Scan", - "curation-task.task.vscan.label": "Scan de Vírus", - - + "curation-task.task.vscan.label": "Scan de vírus", + + // "curation-task.task.register-doi.label": "Register DOI", + "curation-task.task.register-doi.label": "Registo DOI", // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Tarefa:", // "curation.form.submit": "Start", - "curation.form.submit": "Início", + "curation.form.submit": "Iniciar", // "curation.form.submit.success.head": "The curation task has been started successfully", "curation.form.submit.success.head": "A tarefa de curadoria iniciou com sucesso", @@ -1805,13 +2046,35 @@ // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Ocorreu um erro ao tentar iniciar a tarefa de curadoria.", + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + "curation.form.submit.error.invalid-handle": "Não foi possível determinar o handle para este objecto", + // "curation.form.handle.label": "Handle:", "curation.form.handle.label": "Handle:", // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Dica: Introduza [o-seu-prefixo-handle]/0 para executar a tarefa em todo o repositório (nem todas as tarefas são compatíveis com esta opção)", + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Caro {{ recipientName }},\ em resposta ao seu pedido, lamento informá-lo que não me é possível enviar-lhe uma cópia do(s) Ficheiro(s) que solicitou, relativamente ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\n Com os melhores cumprimentos,\n {{ authorName }} <{{ authorEmail }}>", + + // "deny-request-copy.email.subject": "Request copy of document", + "deny-request-copy.email.subject": "Solicitar cópia ao autor", + + // "deny-request-copy.error": "An error occurred", + "deny-request-copy.error": "Ocorreu um erro!", + // "deny-request-copy.header": "Deny document copy request", + "deny-request-copy.header": "Declinar o pedido de cópia", + + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + "deny-request-copy.intro": "Esta será a mensagem enviada ao requerente do pediodo de cópia:", + + // "deny-request-copy.success": "Successfully denied item request", + "deny-request-copy.success": "Pedido de cópia recusado com sucesso!", + + // "dso.name.untitled": "Untitled", + "dso.name.untitled": "Sem título", // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nova coleção", @@ -1822,6 +2085,9 @@ // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Nova comunidade", + // "dso-selector.create.community.or-divider": "or", + "dso-selector.create.community.or-divider": "ou", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Criar uma nova coleção em", @@ -1835,7 +2101,7 @@ "dso-selector.create.item.sub-level": "Criar um novo item em", // "dso-selector.create.submission.head": "New submission", - "dso-selector.create.submission.head": "Nova submissão", + "dso-selector.create.submission.head": "Novo depósito", // "dso-selector.edit.collection.head": "Edit collection", "dso-selector.edit.collection.head": "Editar coleção", @@ -1846,8 +2112,17 @@ // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Editar item", + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + "dso-selector.error.title": "Ocorreu um erro ao procurar por um(a) {{ type }}", + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", - "dso-selector.export-metadata.dspaceobject.head": "Exportar metadados de ", + "dso-selector.export-metadata.dspaceobject.head": "Exportar metadados de", + + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + "dso-selector.export-batch.dspaceobject.head": "Exportar lote (ZIP) de", + + // "dso-selector.import-batch.dspaceobject.head": "Import batch from", + "dso-selector.import-batch.dspaceobject.head": "Importar lote de", // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Nenhum(a) {{ type }} encontrado(a)", @@ -1855,8 +2130,75 @@ // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Pesquisar por um(a) {{ type }}", + // "dso-selector.select.collection.head": "Select a collection", + "dso-selector.select.collection.head": "Selecione uma coleção", + + // "dso-selector.set-scope.community.head": "Select a search scope", + "dso-selector.set-scope.community.head": "Selecione uma pesquisa", + + // "dso-selector.set-scope.community.button": "Search all of DSpace", + "dso-selector.set-scope.community.button": "Pesquisar todo o repositório", + + // "dso-selector.set-scope.community.or-divider": "or", + "dso-selector.set-scope.community.or-divider": "ou", + + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + "dso-selector.set-scope.community.input-header": "Pesquisar por uma comunidade ou coleção", + // "dso-selector.claim.item.head": "Profile tips", + "dso-selector.claim.item.head": "Dicas de Perfil", + + // "dso-selector.claim.item.body": "These are existing profiles that may be related to you. If you recognize yourself in one of these profiles, select it and on the detail page, among the options, choose to claim it. Otherwise you can create a new profile from scratch using the button below.", + "dso-selector.claim.item.body": "Estes são os perfis existentes que poderão estar relacionados consigo. Se se identificar num destes perfis, selecione-o e na página de detalhes, entre as opções, pode reivindicá-lo. Caso contrário, pode criar um novo perfil de raiz, selecionando o botão em baixo.", + + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + "dso-selector.claim.item.not-mine-label": "Nenhum destes é meu", + + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + "dso-selector.claim.item.create-from-scratch": "Criar novo", + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again", + "dso-selector.results-could-not-be-retrieved": "Algo correu mal, por favor repita", + + // "supervision-group-selector.header": "supervision Group Selector", + "supervision-group-selector.header": "Seletor de grupos de supervisão", + + // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + "supervision-group-selector.select.type-of-order.label": "Selecione um tipo de ordem", + + // "supervision-group-selector.select.type-of-order.option.none": "NONE", + "supervision-group-selector.select.type-of-order.option.none": "NENHUM", + + // "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + + // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + "supervision-group-selector.select.type-of-order.option.observer": "OBSERVADOR", + + // "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.select.group.label": "Selecionar um grupo", + + // "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.cancel": "Cancelar", + + // "supervision-group-selector.button.save": "Save", + "supervision-group-selector.button.save": "Guardar", + + // "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + "supervision-group-selector.select.type-of-order.error": "Por favor, selecione um tipo de ordem", + + // "supervision-group-selector.select.group.error": "Please select a group", + "supervision-group-selector.select.group.error": "Por favor selecione um grupo", + + // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + "supervision-group-selector.notification.create.success.title": "Criada com sucesso ordem de supervisão para o grupo {{ name }}", + + // "supervision-group-selector.notification.create.failure.title": "error", + "supervision-group-selector.notification.create.failure.title": "erro", + + // "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + "supervision-group-selector.notification.create.already-existing" : "Já existe uma ordem de supervisão sobre este item para grupo selecionado", + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Exportar metadados para {{ dsoName }}", @@ -1869,6 +2211,18 @@ // "confirmation-modal.export-metadata.confirm": "Export", "confirmation-modal.export-metadata.confirm": "Exportar", + // "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.header": "Exportar lote (ZIP) para {{ dsoName }}", + + // "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + "confirmation-modal.export-batch.info": "Tem a certeza que quer exportar lote (ZIP) para {{ dsoName }}", + + // "confirmation-modal.export-batch.cancel": "Cancel", + "confirmation-modal.export-batch.cancel": "Cancelar", + + // "confirmation-modal.export-batch.confirm": "Export", + "confirmation-modal.export-batch.confirm": "Exportar", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "Apagar Utilizador \"{{ dsoName }}\"", @@ -1881,79 +2235,116 @@ // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Apagar", + // "confirmation-modal.delete-profile.header": "Delete Profile", + "confirmation-modal.delete-profile.header": "Apagar perfil", + + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + "confirmation-modal.delete-profile.info": "Tem certeza que pretende apagar o seu perfil", + + // "confirmation-modal.delete-profile.cancel": "Cancel", + "confirmation-modal.delete-profile.cancel": "Cancelar", + + // "confirmation-modal.delete-profile.confirm": "Delete", + "confirmation-modal.delete-profile.confirm": "Apagar", + + // "confirmation-modal.delete-subscription.header": "Delete Subscription", + "confirmation-modal.delete-subscription.header": "Apagar subscrição", + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.info": "Tem a certeza de que pretende apagar a subscrição de \"{{ dsoName }}\"", + + // "confirmation-modal.delete-subscription.cancel": "Cancel", + "confirmation-modal.delete-subscription.cancel": "Cancelar", + + // "confirmation-modal.delete-subscription.confirm": "Delete", + "confirmation-modal.delete-subscription.confirm": "Apagar", + // "error.bitstream": "Error fetching bitstream", - "error.bitstream": "Erro ao aceder ao ficheiro", + "error.bitstream": "Erro ao aceder ao ficheiro!", // "error.browse-by": "Error fetching items", - "error.browse-by": "Erro ao carregar itens", + "error.browse-by": "Erro ao carregar itens!", // "error.collection": "Error fetching collection", - "error.collection": "Erro ao carregar coleção", + "error.collection": "Erro ao carregar coleção!", // "error.collections": "Error fetching collections", - "error.collections": "Erro ao carregar coleções", + "error.collections": "Erro ao carregar coleções!", // "error.community": "Error fetching community", - "error.community": "Erro ao carregar comunidade", + "error.community": "Erro ao carregar comunidade!", // "error.identifier": "No item found for the identifier", - "error.identifier": "Nenhum item encontrado para o identificador", + "error.identifier": "Nenhum item encontrado para o identificador!", // "error.default": "Error", - "error.default": "Erro", + "error.default": "Erro!", // "error.item": "Error fetching item", - "error.item": "Erro ao carregar item", + "error.item": "Erro ao carregar item!", // "error.items": "Error fetching items", - "error.items": "Erro ao carregar itens", + "error.items": "Erro ao carregar itens!", // "error.objects": "Error fetching objects", - "error.objects": "Erro ao carregar objetos", + "error.objects": "Erro ao carregar objetos!", // "error.recent-submissions": "Error fetching recent submissions", - "error.recent-submissions": "Erro ao carregar as submissões recentes", + "error.recent-submissions": "Erro ao carregar depósitos recentes!", // "error.search-results": "Error fetching search results", - "error.search-results": "Erro ao carregar os resultados da pesquisa", + "error.search-results": "Erro ao carregar os resultados da pesquisa!", + + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + "error.invalid-search-query": "A query da pesquisa não é válida! Por favor verifique Solr query syntax best practices for further information about this error.", // "error.sub-collections": "Error fetching sub-collections", - "error.sub-collections": "Erro ao carregar sub-coleções", + "error.sub-collections": "Erro ao carregar sub-coleções!", // "error.sub-communities": "Error fetching sub-communities", - "error.sub-communities": "Erro ao carregar sub-comunidade", + "error.sub-communities": "Erro ao carregar sub-comunidade!", // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", - "error.submission.sections.init-form-error": "Ocorreu um erro durante a Secção de inicialização, por favor verifique sua configuração de input-form. Detalhes estão abaixo :

    ", + "error.submission.sections.init-form-error": "Ocorreu um erro durante a seção de inicialização, por favor verifique sua configuração de 'input-form'. Detalhes estão abaixo :

    ", // "error.top-level-communities": "Error fetching top-level communities", - "error.top-level-communities": "Erro ao carregar as comunidade de nível superior", + "error.top-level-communities": "Erro ao carregar as comunidade de nível superior!", // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", - "error.validation.license.notgranted": "Você deve concordar com esta licença para completar sua submissão. Se vocẽ não estiver de acordo com esta licença neste momento você pode salvar seu trabalho para continuar depois ou remover a submissão.", + "error.validation.license.notgranted": "Deve concordar com esta licença para completar o depósito. Se não estiver de acordo com a licença ou pretende ponderar, pode guardar este trabalho e retomar posteriormente, ou remover definitivamente este depósito.", // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", "error.validation.pattern": "Este campo está restrito ao seguinte padrão: {{ pattern }}.", // "error.validation.filerequired": "The file upload is mandatory", - "error.validation.filerequired": "O carregamento de ficheiros é obrigatório", + "error.validation.filerequired": "O carregamento de ficheiros é obrigatório!", + // "error.validation.required": "This field is required", + "error.validation.required": "Este campo é de preenchimento obrigatório!", + + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + "error.validation.NotValidEmail": "Este endereço de correio electrónico não é válido!", + + // "error.validation.emailTaken": "This E-mail is already taken", + "error.validation.emailTaken": "Este endereço de correio electrónico já se encontra atribuido!", + + // "error.validation.groupExists": "This group already exists", + "error.validation.groupExists": "Este grupo já existe!", + // "feed.description": "Syndication feed", + "feed.description": "Feed", // "file-section.error.header": "Error obtaining files for this item", - "file-section.error.header": "Erro ao obter ficheiros para este item", - - + "file-section.error.header": "Erro na obteção de ficheiros para este item!", // "footer.copyright": "copyright © 2002-{{ year }}", - "footer.copyright": "copyright © 2002-{{ year }}", + "footer.copyright": "Copyright © 2003-{{ year }}", // "footer.link.dspace": "DSpace software", "footer.link.dspace": "Software DSpace", // "footer.link.lyrasis": "LYRASIS", - "footer.link.lyrasis": "LYRASIS", + "footer.link.lyrasis": "LYRASIS", // "footer.link.cookies": "Cookie settings", "footer.link.cookies": "Configurações de Cookies", @@ -1962,94 +2353,88 @@ "footer.link.privacy-policy": "Política de Privacidade", // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement":"Termos de uso", - + "footer.link.end-user-agreement":"Termos de Uso", + // "footer.link.feedback":"Send Feedback", + "footer.link.feedback":"Contacte-nos", // "forgot-email.form.header": "Forgot Password", - "forgot-email.form.header": "Esqueci a palavra-chave", - - // "forgot-email.form.info": "Enter Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "forgot-email.form.info": "Registe-se para subscrever notificações de novos itens nas coleções por email assim como submeter itens no repositório.", + "forgot-email.form.header": "Esqueci a senha", + + // "forgot-email.form.info": "Enter the email address associated with the account.", + "forgot-email.form.info": "Caso tenha esquecido a sua senha de acesso poderá recuperá-la, para o efeito basta introduzir em baixo o seu endereço de correio electrónico associado.", // "forgot-email.form.email": "Email Address *", - "forgot-email.form.email": "Endereço Eletrónico *", + "forgot-email.form.email": "Endereço de correio eletrónico *", // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Indique um endereço de correio eletrónico", - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Indique um endereço de correio eletrónico válido", + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + "forgot-email.form.email.error.not-email-form": "Indique um endereço de correio eletrónico válido", - // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", - "forgot-email.form.email.hint": "Este endereço de correio eletrónico será validado e usado como o seu nome de Utilizador para autenticação.", + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + "forgot-email.form.email.hint": "Será enviada uma mensagem para este endereço de correio electrónico com mais instruções", - // "forgot-email.form.submit": "Submit", - "forgot-email.form.submit": "Guardar", - - // "forgot-email.form.success.head": "Verification email sent", - "forgot-email.form.success.head": "Email de Confirmação enviado", + // "forgot-email.form.submit": "Reset password", + "forgot-email.form.submit": "Repor senha de acesso", + // "forgot-email.form.success.head": "Password reset email sent", + "forgot-email.form.success.head": "Foi enviada mensagem para redefinição da senha de acesso", + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", - "forgot-email.form.success.content": "Foi enviado uma mensagem para {{ email }} com instruções e um endereço de validação da sua conta de Utilizador.", - - // "forgot-email.form.error.head": "Error when trying to register email", - "forgot-email.form.error.head": "Erro ao tentar registar este email", - - // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", - "forgot-email.form.error.content": "Ocorreu um erro ao tentar registar o seguinte endereço de correio eletrónico: {{ email }}", - - + "forgot-email.form.success.content": "Foi enviado uma mensagem para {{ email }} com instruções e um endereço para validação da sua conta de utilizador.", + // "forgot-email.form.error.head": "Error when trying to reset password", + "forgot-email.form.error.head": "Ocorreu um erro ao tentar redefinir a senha de acesso", + + // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + "forgot-email.form.error.content": "Ocorreu um erro ao tentar redefinir a senha de acesso da conta associada com o seguinte endereço de email: {{ email }}", + // "forgot-password.title": "Forgot Password", - "forgot-password.title": "Esqueci a palavra-chave", + "forgot-password.title": "Esqueci a senha de acesso", // "forgot-password.form.head": "Forgot Password", - "forgot-password.form.head": "Esqueci a palavra-chave", + "forgot-password.form.head": "Esqueci a Senha de acesso", - // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "forgot-password.form.info": "Introduza uma nova palavra-chave na caixa abaixo, e depois confirme introduzindo de novo na segunda caixa. Deverá ter pelo menos 6 caracteres.", + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", + "forgot-password.form.info": "Introduza uma nova senha na caixa em baixo, e depois confirme introduzindo de novo na segunda caixa. Deverá ter pelo menos 6 caracteres.", // "forgot-password.form.card.security": "Security", - "forgot-password.form.card.security": "Segurança", + "forgot-password.form.card.security": "Senha de acesso", // "forgot-password.form.identification.header": "Identify", "forgot-password.form.identification.header": "Identificação", // "forgot-password.form.identification.email": "Email address: ", - "forgot-password.form.identification.email": "Endereço eletrónico: ", + "forgot-password.form.identification.email": "Endereço de correio eletrónico: ", // "forgot-password.form.label.password": "Password", "forgot-password.form.label.password": "Palavra-chave", // "forgot-password.form.label.passwordrepeat": "Retype to confirm", - "forgot-password.form.label.passwordrepeat": "Digite novamente para confirmar", + "forgot-password.form.label.passwordrepeat": "Insira a senha novamente para confirmar", // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", - "forgot-password.form.error.empty-password": "Indique uma palavra-chave na caixa abaixo.", + "forgot-password.form.error.empty-password": "Indique uma senha na caixa abaixo.", // "forgot-password.form.error.matching-passwords": "The passwords do not match.", - "forgot-password.form.error.matching-passwords": "As palavras-chave não coincidem.", - - // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", - "forgot-password.form.error.password-length": "A palavra-chave deve ter pelo menos 6 caracteres.", + "forgot-password.form.error.matching-passwords": "As palavras de acesso não coincidem.", // "forgot-password.form.notification.error.title": "Error when trying to submit new password", - "forgot-password.form.notification.error.title": "Erro ao submeter nova palavra-chave", + "forgot-password.form.notification.error.title": "Erro ao submeter nova senha de acesso", // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", - "forgot-password.form.notification.success.content": "A recuperação da palavra-chave foi efetuada com sucesso. Foi iniciada sessão com o Utilizador criado.", + "forgot-password.form.notification.success.content": "A recuperação da senha foi efetuada com sucesso. Foi iniciada sessão com o utilizador criado.", // "forgot-password.form.notification.success.title": "Password reset completed", - "forgot-password.form.notification.success.title": "recuperação da palavra-chave efetuada com sucesso", + "forgot-password.form.notification.success.title": "Recuperação da senha efetuada com sucesso", // "forgot-password.form.submit": "Submit password", - "forgot-password.form.submit": "Enviar palavra-chave", + "forgot-password.form.submit": "Enviar senha", - - - // "form.add": "Add", - "form.add": "Adicionar", + // "form.add": "Add more", + "form.add": "Adicionar mais", // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Clique aqui para submeter esta entrada e adicionar uma nova", @@ -2063,6 +2448,12 @@ // "form.clear-help": "Click here to remove the selected value", "form.clear-help": "Clique aqui para apagar o valor selecionado", + // "form.discard": "Discard", + "form.discard": "Cancelar", + + // "form.drag": "Drag", + "form.drag": "Arrastar", + // "form.edit": "Edit", "form.edit": "Editar", @@ -2088,13 +2479,13 @@ "form.last-name": "Último nome", // "form.loading": "Loading...", - "form.loading": "Carregando...", + "form.loading": "carregando...", // "form.lookup": "Lookup", "form.lookup": "Consulta", // "form.lookup-help": "Click here to look up an existing relation", - "form.lookup-help": "Clique para consultar as relações existentes", + "form.lookup-help": "Clique para consultar relações existentes", // "form.no-results": "No results found", "form.no-results": "Nenhum resultado encontrado", @@ -2109,45 +2500,172 @@ "form.remove": "Apagar", // "form.save": "Save", - "form.save": "Salvar", + "form.save": "Guardar", // "form.save-help": "Save changes", - "form.save-help": "Salvar alterações", + "form.save-help": "Guardar alterações", // "form.search": "Search", "form.search": "Pesquisar", // "form.search-help": "Click here to look for an existing correspondence", "form.search-help": "Clique aqui para procurar por uma correspondência", + + // "form.submit": "Save", + // "form.submit": "Guardar", + + // "form.repeatable.sort.tip": "Drop the item in the new position", + "form.repeatable.sort.tip": "Largue o item na nova posição", + + // "grant-deny-request-copy.deny": "Don't send copy", + "grant-deny-request-copy.deny": "Não enviar cópia", + + // "grant-deny-request-copy.email.back": "Back", + "grant-deny-request-copy.email.back": "Voltar", + + // "grant-deny-request-copy.email.message": "Message", + "grant-deny-request-copy.email.message": "Mensagem", + + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + "grant-deny-request-copy.email.message.empty": "Por favor insira uma mensagem", + + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + "grant-deny-request-copy.email.permissions.info": "Pode aproveitar esta ocasião para reconsiderar o tipo acesso atualmente associado ao documento, para evitar ter que responder a este tipo de pedidos. Se quiser retirar a restrição de acesso/embargo do documento, por favor preencha a seguinte caixa.", + + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + "grant-deny-request-copy.email.permissions.label": "Mudar para acesso aberto", + + // "grant-deny-request-copy.email.send": "Send", + "grant-deny-request-copy.email.send": "Enviar", + + // "grant-deny-request-copy.email.subject": "Subject", + "grant-deny-request-copy.email.subject": "Assunto:", + + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + "grant-deny-request-copy.email.subject.empty": "Por favor, introduza o assunto", + + // "grant-deny-request-copy.grant": "Send copy", + "grant-deny-request-copy.grant": "Enviar cópia", + + // "grant-deny-request-copy.header": "Document copy request", + "grant-deny-request-copy.header": "Pedido de cópia", + + // "grant-deny-request-copy.home-page": "Take me to the home page", + "grant-deny-request-copy.home-page": "Voltar para página inicial", + + // "grant-deny-request-copy.intro1": "If you are one of the authors of the document {{ name }}, then please use one of the options below to respond to the user's request.", + "grant-deny-request-copy.intro1": "Se não é um dos autores do documento {{ name }}, por favor use uma seguintes opções para responder ao pedido do utilizador.", + + // "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + "grant-deny-request-copy.intro2": "Depois de escolher uma opção, ser-lhe-á apresentado um um texto de resposta padrão que poderá editar.", + + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + "grant-deny-request-copy.processed": "Este pedido já foi processado. Pode utilizar o botão em baixo para voltar para a página principal.", + + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.message": "Caro {{ recipientName }},\nEm resposta ao seu pedido de cópia, tenho o prazer de lhe enviar em anexo uma cópia do(s) ficheiro(s) relativo(s) ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\nCom os melhores cumprimentos,\n{{ authorName }} <{{ authorEmail }}>", + + // "grant-request-copy.email.subject": "Request copy of document", + "grant-request-copy.email.subject": "Pedido de cópia de documento", + + // "grant-request-copy.error": "An error occurred", + "grant-request-copy.error": "Ocorreu um erro", + + // "grant-request-copy.header": "Grant document copy request", + "grant-request-copy.header": "Conceder cópia de documento", + + // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "Esta mensagem será enviada ao requerente do pedido de cópia. Os ficheiros solicitado(s) serão anexado(s) à mensagem.", + + // "grant-request-copy.success": "Successfully granted item request", + "grant-request-copy.success": "Pedido de cópia concedido com sucesso!", - // "form.submit": "Submit", - "form.submit": "Guardar", - + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Diagnóstico do sistema", + + // "health-page.heading": "Health", + "health-page.heading": "Diagnóstico do sistema", + + // "health-page.info-tab": "Info", + "health-page.info-tab": "Info", + + // "health-page.status-tab": "Status", + "health-page.status-tab": "Estado", + + // "health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "O serviço de diagnóstico está temporariamente indisponível", + // "health-page.property.status": "Status code", + "health-page.property.status": "Código Estado", + + // "health-page.section.db.title": "Database", + "health-page.section.db.title": "Base Dados", + + // "health-page.section.geoIp.title": "GeoIp", + "health-page.section.geoIp.title": "GeoIp", + + // "health-page.section.solrAuthorityCore.title": "Solr: authority core", + "health-page.section.solrAuthorityCore.title": "Solr: authority core", + + // "health-page.section.solrOaiCore.title": "Solr: oai core", + "health-page.section.solrOaiCore.title": "Solr: OAI core", + + // "health-page.section.solrSearchCore.title": "Solr: search core", + "health-page.section.solrSearchCore.title": "Solr: Search core", + + // "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + + // "health-page.section-info.app.title": "Application Backend", + "health-page.section-info.app.title": "Aplicação Backend", + + // "health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", + + // "health-page.status": "Status", + "health-page.status": "Estado", + + // "health-page.status.ok.info": "Operational", + "health-page.status.ok.info": "Operacional", + + // "health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Problemas detetados", + + // "health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Possíveis problemas detetados", + + // "health-page.title": "Health", + "health-page.title": "Diagnóstico do sistema", + + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "Nenhum problema detetado", // "home.description": "", "home.description": "", // "home.breadcrumbs": "Home", - "home.breadcrumbs": "Principal", + "home.breadcrumbs": "Página inicial", - // "home.title": "DSpace Angular :: Home", - "home.title": "DSpace :: Início", + //"home.search-form.placeholder": "Search the repository...", + "home.search-form.placeholder": "pesquisar no repositório...", + + // "home.title": "Home", + "home.title": "Página inicial", - // "home.top-level-communities.head": "Communities in DSpace", + // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Comunidades", // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Selecione uma comunidade para navegar nas suas coleções", // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", - "info.end-user-agreement.accept": "Li e aceito os Termos de Uso", + "info.end-user-agreement.accept": "Li e aceito os 'Termos de Uso'", // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", - "info.end-user-agreement.accept.error": "Ocorreu um erro ao aceitar os Termos de Uso", + "info.end-user-agreement.accept.error": "Ocorreu um erro ao aceitar os 'Termos de Uso'", // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", - "info.end-user-agreement.accept.success": "Termos de Uso atualizados com sucesso", + "info.end-user-agreement.accept.success": "'Termos de Uso' atualizados com sucesso", // "info.end-user-agreement.breadcrumbs": "End User Agreement", "info.end-user-agreement.breadcrumbs": "Termos de Uso", @@ -2159,7 +2677,7 @@ "info.end-user-agreement.buttons.save": "Guardar", // "info.end-user-agreement.head": "End User Agreement", - "info.end-user-agreement.head": "Termos de Uso", + "info.end-user-agreement.head": "Termos de Uso", // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Termos de Uso", @@ -2173,36 +2691,67 @@ // "info.privacy.title": "Privacy Statement", "info.privacy.title": "Política de Privacidade", - - - // "item.alerts.private": "This item is private", + // "info.feedback.breadcrumbs": "Feedback", + "info.feedback.breadcrumbs": "Contacte-nos", + + // "info.feedback.head": "Feedback", + "info.feedback.head": "Contacte-nos", + + // "info.feedback.title": "Feedback", + "info.feedback.title": "Contacte-nos", + + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + "info.feedback.info": "Agradecemos de antemão pelo seu contacto e interesse, as suas mensagens, comentários ou sugestões são sempre bem-vindas!", + + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + "info.feedback.email_help": "Este endereço de correio eletrónico será utilizado para dar seguimento à sua mensagem.", + + // "info.feedback.send": "Send Feedback", + "info.feedback.send": "Enviar mensagem", + + // "info.feedback.comments": "Comments", + "info.feedback.comments": "A sua mensagem", + + // "info.feedback.email-label": "Your Email", + "info.feedback.email-label": "O seu endereço de correio electrónico:", + + // "info.feedback.create.success" : "Feedback Sent Successfully!", + "info.feedback.create.success" : "Mensagem enviada com sucesso!", + + // "info.feedback.error.email.required" : "A valid email address is required", + "info.feedback.error.email.required" : "Deve inserir um endereço de correio electrónico válido", + + // "info.feedback.error.message.required" : "A comment is required", + "info.feedback.error.message.required" : "Deve inserir uma mensagem", + + // "info.feedback.page-label" : "Page", + "info.feedback.page-label" : "Página/URL de contexo:", + + // "info.feedback.page_help" : "The page related to your feedback", + "info.feedback.page_help" : "Esta é a página/URL que contextualiza o seu contacto.", + + // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este item é privado", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Este item foi retirado", - - // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", - "item.edit.authorizations.heading": "Com este editor pode ver e alterar as políticas de um item, assim como alterar políticas de componentes individuais do item: pacotes e ficheiros. Em resumo, um item contém pacotes, e os pacotes contêm de ficheiros. Os pacotes possuem usualmente políticas de ADICIONAR/REMOVER/LER/ESCREVER enquanto que os ficheiros apenas políticas de LER/ESCREVER.", + "item.edit.authorizations.heading": "Com este editor pode ver e alterar as políticas de um item, bem como alterar políticas de componentes individuais do item: 'pacotes' (bundles) e 'ficheiros' (bitstreams). Em resumo, um item contém 'pacotes' e os pacotes contêm 'ficheiros'. Os pacotes usualmente possuem políticas de ADICIONAR/REMOVER/LER/ESCREVER, por outro lado, os ficheiros apenas possuem políticas de LER/ESCREVER.", // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar políticas dos itens", - - - // "item.badge.private": "Private", + // "item.badge.private": "Non-discoverable", "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", - "item.badge.withdrawn": "Retirado", - - - + "item.badge.withdrawn": "Retirado", + // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Pacote", - // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", "item.bitstreams.upload.bundle.placeholder": "Selecione um pacote", // "item.bitstreams.upload.bundle.new": "Create bundle", @@ -2225,20 +2774,18 @@ // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", "item.bitstreams.upload.notifications.bundle.created.title": "Pacote criado", - + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", - "item.bitstreams.upload.notifications.upload.failed": "O carregamento falhou. Verifique o ficheiro antes de tentar carregar de novo.", + "item.bitstreams.upload.notifications.upload.failed": "O carregamento falhou. Verifique os ficheiro antes de tentar carregar de novo.", // "item.bitstreams.upload.title": "Upload bitstream", - "item.bitstreams.upload.title": "Carregar ficheiro", - - + "item.bitstreams.upload.title": "Carregar ficheiro(s)", // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Carregar", // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", - "item.edit.bitstreams.bundle.displaying": "A apresentar atualmente {{ amount }} ficheiros de {{ total }}.", + "item.edit.bitstreams.bundle.displaying": "Atualmente a mostrar {{ amount }} ficheiros de {{ total }}.", // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", "item.edit.bitstreams.bundle.load.all": "Carregar todos ({{ total }})", @@ -2250,7 +2797,7 @@ "item.edit.bitstreams.bundle.name": "PACOTE: {{ name }}", // "item.edit.bitstreams.discard-button": "Discard", - "item.edit.bitstreams.discard-button": "Descartar", + "item.edit.bitstreams.discard-button": "Cancelar", // "item.edit.bitstreams.edit.buttons.download": "Download", "item.edit.bitstreams.edit.buttons.download": "Descarregar", @@ -2265,7 +2812,7 @@ "item.edit.bitstreams.edit.buttons.remove": "Remover", // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", - "item.edit.bitstreams.edit.buttons.undo": "Descartar alterações", + "item.edit.bitstreams.edit.buttons.undo": "Cancelar alterações", // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", "item.edit.bitstreams.empty": "Este item não possui ficheiros. Carregue um novo ficheiro.", @@ -2316,7 +2863,7 @@ "item.edit.bitstreams.notifications.remove.saved.title": "Alterações de remoção guardadas", // "item.edit.bitstreams.reinstate-button": "Undo", - "item.edit.bitstreams.reinstate-button": "Descartar", + "item.edit.bitstreams.reinstate-button": "Cancelar", // "item.edit.bitstreams.save-button": "Save", "item.edit.bitstreams.save-button": "Guardar", @@ -2324,8 +2871,6 @@ // "item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Carregar", - - // "item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Cancelar", @@ -2345,32 +2890,97 @@ "item.edit.delete.success": "O item foi apagado", // "item.edit.head": "Edit Item", - "item.edit.head": "Editar Item", + "item.edit.head": "Editar item", // "item.edit.breadcrumbs": "Edit Item", - "item.edit.breadcrumbs": "Editar Item", + "item.edit.breadcrumbs": "Editar item", + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + "item.edit.tabs.disabled.tooltip": "Não está autorizado a aceder a esta área!", // "item.edit.tabs.mapper.head": "Collection Mapper", - "item.edit.tabs.mapper.head": "Mapeamento de Coleção", + "item.edit.tabs.mapper.head": "Mapeamento de coleção", // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", - "item.edit.tabs.item-mapper.title": "Editar Item - Mapeamento de Coleção", + "item.edit.tabs.item-mapper.title": "Editar item - Mapeamento de coleção", + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + "item.edit.identifiers.doi.status.UNKNOWN": "Desconhecido", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Em fila de espera para registo", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Em fila de espera para reserva", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Registado", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + "item.edit.identifiers.doi.status.IS_RESERVED": "Reservado", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reservado (fila de espera atualizada)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registado (fila de espera atualizada)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Em fila de espera para atualização e registo", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Em fila de espera para remoção", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + "item.edit.identifiers.doi.status.DELETED": "Removido", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + "item.edit.identifiers.doi.status.PENDING": "Pendente (não registado)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + "item.edit.identifiers.doi.status.MINTED": "Criado (não registado)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + "item.edit.tabs.status.buttons.register-doi.label": "Registar um novo DOI ou pendente", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + "item.edit.tabs.status.buttons.register-doi.button": "Registar DOI...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + "item.edit.register-doi.header": "Registar um DOI novo ou pendente", + + // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + "item.edit.register-doi.description": "Rever em baixo quaisquer identificadores e metadados pendentes e clicar em 'Confirmar' para prosseguir com o registo DOI ou 'Cancelar' para retroceder", + + // "item.edit.register-doi.confirm": "Confirm", + "item.edit.register-doi.confirm": "Confirmar", + + // "item.edit.register-doi.cancel": "Cancel", + "item.edit.register-doi.cancel": "Cancelar", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + "item.edit.register-doi.success": "DOI colocado em fila de espera para o registo com sucesso.", + + // "item.edit.register-doi.error": "error registering DOI", + "item.edit.register-doi.error": "erro ao registar DOI", + + // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + "item.edit.register-doi.to-update": "O seguinte DOI já foi criado e será colocado em fila de espera para registo online", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", - "item.edit.item-mapper.buttons.add": "Mapear item na(s) coleção(ões) seleciona(s)", + "item.edit.item-mapper.buttons.add": "Mapear item para coleção(ões) selecionada(s)", // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", - "item.edit.item-mapper.buttons.remove": "Remover mapeamento(s) do item da(s) coleção(ões) seleciona(s)", + "item.edit.item-mapper.buttons.remove": "Remover mapeamento(s) na(s) coleção(ões) selecionada(s)", // "item.edit.item-mapper.cancel": "Cancel", "item.edit.item-mapper.cancel": "Cancelar", // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", - "item.edit.item-mapper.description": "Essa é a ferramenta de mapeamento de itens que permite que os administradores mapeiem esse item para outras coleções. Você pode procurar coleções e mapeá-las ou navegar na lista de coleções para as quais o item está atualmente mapeado.", + "item.edit.item-mapper.description": "Esta ferramenta permite mapear itens para outras coleções. Pode procurar coleções e mapeá-las ou navegar na lista de coleções nas quais o item está atualmente mapeado.", // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", - "item.edit.item-mapper.head": "Mapeador de Item - Mapear Itens em Coleções", + "item.edit.item-mapper.head": "Mapeador de item - Mapear itens em coleções", // "item.edit.item-mapper.item": "Item: \"{{name}}\"", "item.edit.item-mapper.item": "Item: \"{{name}}\"", @@ -2402,19 +3012,26 @@ // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Completou a remoção de mapeamento", + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + "item.edit.item-mapper.search-form.placeholder": "Pesquisar coleções...", + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Navegar nas coleções mapeadas", // "item.edit.item-mapper.tabs.map": "Map new collections", "item.edit.item-mapper.tabs.map": "Mapear novas coleções", - - // "item.edit.metadata.add-button": "Add", "item.edit.metadata.add-button": "Adicionar", // "item.edit.metadata.discard-button": "Discard", - "item.edit.metadata.discard-button": "Descartar", + "item.edit.metadata.discard-button": "Cancelar", + + // "item.edit.metadata.edit.buttons.confirm": "Confirm", + "item.edit.metadata.edit.buttons.confirm": "Confirmar", + + // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + "item.edit.metadata.edit.buttons.drag": "Arrastar para reordenar", // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Editar", @@ -2428,6 +3045,9 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Parar edição", + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + "item.edit.metadata.edit.buttons.virtual": "Este é um valor de metadados virtual, ou seja, um valor herdado de uma entidade relacionada. Não pode ser modificado diretamente. Adicionar ou remover a relação correspondente no separador 'Relacionamentos'", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", "item.edit.metadata.empty": "O item não possui metadados. Clique 'Adicionar' para adicionar metadados.", @@ -2435,7 +3055,7 @@ "item.edit.metadata.headers.edit": "Editar", // "item.edit.metadata.headers.field": "Field", - "item.edit.metadata.headers.field": "Campo", + "item.edit.metadata.headers.field": "Campo (metadado)", // "item.edit.metadata.headers.language": "Lang", "item.edit.metadata.headers.language": "Idioma", @@ -2443,32 +3063,35 @@ // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Valor", + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "item.edit.metadata.metadatafield.error": "Ocorreu um erro ao validar o campo de metadados", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", "item.edit.metadata.metadatafield.invalid": "Por favor escolha um campo de metadados válido", // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.metadata.notifications.discarded.content": "Suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", + "item.edit.metadata.notifications.discarded.content": "As suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", - // "item.edit.metadata.notifications.discarded.title": "Changed discarded", + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", "item.edit.metadata.notifications.discarded.title": "Mudança descartada", - + // "item.edit.metadata.notifications.error.title": "An error occurred", - "item.edit.metadata.notifications.error.title": "Ocorreu um erro", + "item.edit.metadata.notifications.error.title": "Ocorreu um erro!", // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", - "item.edit.metadata.notifications.invalid.content": "Suas alterações não foram salvas. Verifique se todos os campos são válidos antes de salvar.", + "item.edit.metadata.notifications.invalid.content": "As suas alterações não foram guardadas! Verifique se todos os campos são válidos antes de guardar.", // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", "item.edit.metadata.notifications.invalid.title": "Metadado inválido", // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", - "item.edit.metadata.notifications.outdated.content": "O item em que você está trabalhando foi alterado por outro usuário. Suas alterações atuais são descartadas para evitar conflitos", + "item.edit.metadata.notifications.outdated.content": "O registo em que está a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", - // "item.edit.metadata.notifications.outdated.title": "Changed outdated", + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", "item.edit.metadata.notifications.outdated.title": "Alteração desatualizada", // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", - "item.edit.metadata.notifications.saved.content": "Suas alterações nos metadados deste item foram salvas.", + "item.edit.metadata.notifications.saved.content": "As alterações que realizou nos metadados deste registo foram salvas.", // "item.edit.metadata.notifications.saved.title": "Metadata saved", "item.edit.metadata.notifications.saved.title": "Metadados salvos", @@ -2476,10 +3099,11 @@ // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Desfazer", + // "item.edit.metadata.reset-order-button": "Undo reorder", + "item.edit.metadata.reset-order-button": "Desfazer reordenamento", + // "item.edit.metadata.save-button": "Save", - "item.edit.metadata.save-button": "Salvar", - - + "item.edit.metadata.save-button": "Guardar", // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Campo", @@ -2490,11 +3114,15 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Valor", - - - // "item.edit.move.cancel": "Cancel", + // "item.edit.move.cancel": "Back", "item.edit.move.cancel": "Cancelar", + // "item.edit.move.save-button": "Save", + "item.edit.move.save-button": "Guardar", + + // "item.edit.move.discard-button": "Discard", + "item.edit.move.discard-button": "Cancelar", + // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", "item.edit.move.description": "Selecione a coleção para a qual você deseja mover este item. Para restringir a lista de coleções exibidas, você pode inserir uma consulta de pesquisa na caixa.", @@ -2525,47 +3153,41 @@ // "item.edit.move.title": "Move item", "item.edit.move.title": "Mover item", - - // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Cancelar", - // "item.edit.private.confirm": "Make it Private", + // "item.edit.private.confirm": "Make it non-discoverable", "item.edit.private.confirm": "Tornar Privado", - // "item.edit.private.description": "Are you sure this item should be made private in the archive?", + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", "item.edit.private.description": "Tem certeza de que este item deve ser tornado privado?", - // "item.edit.private.error": "An error occurred while making the item private", + // "item.edit.private.error": "An error occurred while making the item non-discoverable", "item.edit.private.error": "Ocorreu um erro ao tornar o item privado", - // "item.edit.private.header": "Make item private: {{ id }}", + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", "item.edit.private.header": "Tornar privado o item: {{ id }}", - // "item.edit.private.success": "The item is now private", + // "item.edit.private.success": "The item is now non-discoverable", "item.edit.private.success": "O item agora é privado", - - // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Cancelar", - // "item.edit.public.confirm": "Make it Public", + // "item.edit.public.confirm": "Make it discoverable", "item.edit.public.confirm": "Tornar público", - // "item.edit.public.description": "Are you sure this item should be made public in the archive?", + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", "item.edit.public.description": "Você tem certeza que deseja tornar este item público?", - // "item.edit.public.error": "An error occurred while making the item public", + // "item.edit.public.error": "An error occurred while making the item discoverable", "item.edit.public.error": "Ocorreu um erro ao tornar o item público", - // "item.edit.public.header": "Make item public: {{ id }}", + // "item.edit.public.header": "Make item discoverable: {{ id }}", "item.edit.public.header": "Tornar público o item: {{ id }}", - // "item.edit.public.success": "The item is now public", - "item.edit.public.success": "O item agora é público", - - + // "item.edit.public.success": "The item is now discoverable", + "item.edit.public.success": "O item agora é público!", // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Cancelar", @@ -2585,10 +3207,8 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "O item foi restabelecido com sucesso", - - // "item.edit.relationships.discard-button": "Discard", - "item.edit.relationships.discard-button": "Descartar", + "item.edit.relationships.discard-button": "Cancelar", // "item.edit.relationships.edit.buttons.add": "Add", "item.edit.relationships.edit.buttons.add": "Adicionar", @@ -2597,16 +3217,16 @@ "item.edit.relationships.edit.buttons.remove": "Apagar", // "item.edit.relationships.edit.buttons.undo": "Undo changes", - "item.edit.relationships.edit.buttons.undo": "Desfazer alterações", + "item.edit.relationships.edit.buttons.undo": "Cancelar alterações", // "item.edit.relationships.no-relationships": "No relationships", "item.edit.relationships.no-relationships": "Sem relações", // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "item.edit.relationships.notifications.discarded.content": "Suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", + "item.edit.relationships.notifications.discarded.content": "Suas alterações foram canceladas. Para restabelecer suas alterações, clique no botão 'Cancelar'", // "item.edit.relationships.notifications.discarded.title": "Changes discarded", - "item.edit.relationships.notifications.discarded.title": "Alterações descartadas", + "item.edit.relationships.notifications.discarded.title": "Alterações canceladas", // "item.edit.relationships.notifications.failed.title": "Error editing relationships", "item.edit.relationships.notifications.failed.title": "Erro ao apagar relação", @@ -2627,15 +3247,16 @@ "item.edit.relationships.reinstate-button": "Desfazer", // "item.edit.relationships.save-button": "Save", - "item.edit.relationships.save-button": "Salvar", + "item.edit.relationships.save-button": "Guardar", // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", - "item.edit.relationships.no-entity-type": "Adicione o metadado 'dspace.entity.type' para ativar relações neste item", - + "item.edit.relationships.no-entity-type": "Adicione o metadado 'dspace.entity.type' para ativar relações neste item!", + // "item.edit.return": "Back", + "item.edit.return": "Voltar", // "item.edit.tabs.bitstreams.head": "Bitstreams", - "item.edit.tabs.bitstreams.head": "Ficheiros do Item", + "item.edit.tabs.bitstreams.head": "Ficheiros do item", // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", "item.edit.tabs.bitstreams.title": "Editar Item - Ficheiros", @@ -2644,28 +3265,28 @@ "item.edit.tabs.curate.head": "Curadoria", // "item.edit.tabs.curate.title": "Item Edit - Curate", - "item.edit.tabs.curate.title": "Editar Item - Curadoria", + "item.edit.tabs.curate.title": "Editar item - Curadoria", // "item.edit.tabs.metadata.head": "Metadata", - "item.edit.tabs.metadata.head": "Metadados do Item", + "item.edit.tabs.metadata.head": "Metadados do item", // "item.edit.tabs.metadata.title": "Item Edit - Metadata", "item.edit.tabs.metadata.title": "Editar Item - Metadados", // "item.edit.tabs.relationships.head": "Relationships", - "item.edit.tabs.relationships.head": "Relações do Item", + "item.edit.tabs.relationships.head": "Relações do item", // "item.edit.tabs.relationships.title": "Item Edit - Relationships", "item.edit.tabs.relationships.title": "Editar Item - Relacionamentos", // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", - "item.edit.tabs.status.buttons.authorizations.button": "Autorizações...", + "item.edit.tabs.status.buttons.authorizations.button": "Permissões...", // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", - "item.edit.tabs.status.buttons.authorizations.label": "Editar politicas de autorizações de item", + "item.edit.tabs.status.buttons.authorizations.label": "Editar políticas de permissões de item", // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", - "item.edit.tabs.status.buttons.delete.button": "Apagar permanentemente", + "item.edit.tabs.status.buttons.delete.button": "Apagar definitivamente", // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", "item.edit.tabs.status.buttons.delete.label": "Eliminar completamente o item", @@ -2674,24 +3295,24 @@ "item.edit.tabs.status.buttons.mappedCollections.button": "Coleções mapeadas", // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", - "item.edit.tabs.status.buttons.mappedCollections.label": "Gerenciar coleções mapeadas", + "item.edit.tabs.status.buttons.mappedCollections.label": "Gerir coleções mapeadas", - // "item.edit.tabs.status.buttons.move.button": "Move...", - "item.edit.tabs.status.buttons.move.button": "Mover...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + "item.edit.tabs.status.buttons.move.button": "Mover este item para outra coleção", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção", - // "item.edit.tabs.status.buttons.private.button": "Make it private...", - "item.edit.tabs.status.buttons.private.button": "Tornar o item privado ...", + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + "item.edit.tabs.status.buttons.private.button": "Tornar o item privado...", - // "item.edit.tabs.status.buttons.private.label": "Make item private", + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", "item.edit.tabs.status.buttons.private.label": "Tornar o item privado", - // "item.edit.tabs.status.buttons.public.button": "Make it public...", + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", "item.edit.tabs.status.buttons.public.button": "Tornar público o item...", - // "item.edit.tabs.status.buttons.public.label": "Make item public", + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", "item.edit.tabs.status.buttons.public.label": "Tornar público o item", // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", @@ -2700,26 +3321,29 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", - "item.edit.tabs.status.buttons.withdraw.button": "Retirar...", + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.unauthorized": "Não possui autorizações para realizar esta ação!", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + "item.edit.tabs.status.buttons.withdraw.button": "Retirar este item", + // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", - "item.edit.tabs.status.buttons.withdraw.label": "Retirar item do repositório", + "item.edit.tabs.status.buttons.withdraw.label": "Retirar item da vista pública do repositório", // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", - "item.edit.tabs.status.description": "Bem-vindo à página de gerenciamento de itens. A partir daqui, você pode retirar, restabelecer, mover ou apagar o item. Você também pode atualizar ou adicionar novos metadados / bitstream nas outras guias.", + "item.edit.tabs.status.description": "Bem-vindo à página de gestão de itens. Nesta área, pode retirar, restabelecer, mover ou apagar definitivamente o item. Adicionalmente, também pode atualizar ou adicionar novos metadados / bitstreams percorrendo pelas outras abas.", // "item.edit.tabs.status.head": "Status", - "item.edit.tabs.status.head": "Estado do Item", + "item.edit.tabs.status.head": "Estado do item", // "item.edit.tabs.status.labels.handle": "Handle", "item.edit.tabs.status.labels.handle": "Handle", // "item.edit.tabs.status.labels.id": "Item Internal ID", - "item.edit.tabs.status.labels.id": "ID Interno do Item", + "item.edit.tabs.status.labels.id": "ID Interno do item", // "item.edit.tabs.status.labels.itemPage": "Item Page", - "item.edit.tabs.status.labels.itemPage": "Página do Item", + "item.edit.tabs.status.labels.itemPage": "Página do item", // "item.edit.tabs.status.labels.lastModified": "Last Modified", "item.edit.tabs.status.labels.lastModified": "Ultima alteração", @@ -2728,13 +3352,13 @@ "item.edit.tabs.status.title": "Editar Item - Estado", // "item.edit.tabs.versionhistory.head": "Version History", - "item.edit.tabs.versionhistory.head": "Histórico de Versões", + "item.edit.tabs.versionhistory.head": "Histórico de versões", // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", - "item.edit.tabs.versionhistory.title": "Edições do Item - Histórico de Versões", + "item.edit.tabs.versionhistory.title": "Edições do Item - Histórico de versões", // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", - "item.edit.tabs.versionhistory.under-construction": "Editar ou adicionar novas versões ainda não é possível neste interface de Utilizador.", + "item.edit.tabs.versionhistory.under-construction": "Editar ou adicionar novas versões ainda não é possível neste interface de utilizador.", // "item.edit.tabs.view.head": "View Item", "item.edit.tabs.view.head": "Visualizar Item", @@ -2742,8 +3366,6 @@ // "item.edit.tabs.view.title": "Item Edit - View", "item.edit.tabs.view.title": "Editar Item - Visualizar", - - // "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.cancel": "Cancelar", @@ -2760,24 +3382,22 @@ "item.edit.withdraw.header": "Retirar item: {{ id }}", // "item.edit.withdraw.success": "The item was withdrawn successfully", - "item.edit.withdraw.success": "O item foi retirado com sucesso", - + "item.edit.withdraw.success": "O item foi retirado com sucesso!", + // "item.orcid.return": "Back", + "item.orcid.return": "Voltar", // "item.listelement.badge": "Item", "item.listelement.badge": "Item", // "item.page.description": "Description", "item.page.description": "Descrição", - - // "item.page.edit": "Edit this item", - "item.page.edit": "Editar este item", - + // "item.page.journal-issn": "Journal ISSN", - "item.page.journal-issn": "ISSN da Revista", + "item.page.journal-issn": "ISSN da revista", // "item.page.journal-title": "Journal Title", - "item.page.journal-title": "Título da Revista", + "item.page.journal-title": "Título da revista", // "item.page.publisher": "Publisher", "item.page.publisher": "Editora", @@ -2789,13 +3409,41 @@ "item.page.volume-title": "Título do Volume", // "item.search.results.head": "Item Search Results", - "item.search.results.head": "Resultados da Pesquisa de Item", + "item.search.results.head": "Resultados da pesquisa de item", - // "item.search.title": "DSpace Angular :: Item Search", - "item.search.title": "DSpace :: Pesquisa de Item", + // "item.search.title": "Item Search", + "item.search.title": "Pesquisa de item", + // "item.truncatable-part.show-more": "Show more", + "item.truncatable-part.show-more": "Mostrar mais", + + // "item.truncatable-part.show-less": "Collapse", + "item.truncatable-part.show-less": "Colapsar", + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.header": "Eliminar ordem de supervisão", + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + "workflow-item.search.result.delete-supervision.modal.info": "Tem a certeza de que quer remover a ordem de supervisão", + + // "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + "workflow-item.search.result.delete-supervision.modal.cancel": "Cancelar", + + // "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + "workflow-item.search.result.delete-supervision.modal.confirm": "Remover", + + // "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.success": "Ordem de supervisão removida com sucesso \"{{name}}\"", + + // "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + "workflow-item.search.result.notification.deleted.failure": "Falha ao remover ordem de supervisão \"{{name}}\"", + + // "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + "workflow-item.search.result.list.element.supervised-by": "Supervisionado por:", + + // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remover grupo de supervisão", + // "item.page.abstract": "Abstract", "item.page.abstract": "Resumo", @@ -2808,6 +3456,12 @@ // "item.page.collections": "Collections", "item.page.collections": "Coleções", + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "A carregar...", + + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Carregar mais", + // "item.page.date": "Date", "item.page.date": "Data", @@ -2821,7 +3475,7 @@ "item.page.filesection.description": "Descrição:", // "item.page.filesection.download": "Download", - "item.page.filesection.download": "Baixar", + "item.page.filesection.download": "Ver/Abrir", // "item.page.filesection.format": "Format:", "item.page.filesection.format": "Formato:", @@ -2841,6 +3495,12 @@ // "item.page.link.simple": "Simple item page", "item.page.link.simple": "Ver registo simples", + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID", + + // "item.page.orcid.tooltip": "Open ORCID setting page", + "item.page.orcid.tooltip": "Abrir página de configuração do ORCID", + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Artigos deste autor", @@ -2858,9 +3518,9 @@ // "item.page.relationships.isOrgUnitOfPerson": "Authors", "item.page.relationships.isOrgUnitOfPerson": "Autores", - + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", - "item.page.relationships.isOrgUnitOfProject": "Projetos", + "item.page.relationships.isOrgUnitOfProject": "Projetos de investigação", // "item.page.subject": "Keywords", "item.page.subject": "Palavras-chave", @@ -2873,13 +3533,28 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Fechar", - + // "item.page.filesection.original.bundle" : "Original bundle", "item.page.filesection.original.bundle" : "Principais", // "item.page.filesection.license.bundle" : "License bundle", "item.page.filesection.license.bundle" : "Licença", + // "item.page.return": "Back", + "item.page.return": "Voltar", + + // "item.page.version.create": "Create new version", + "item.page.version.create": "Criar nova versão", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", + + // "item.page.claim.button": "Claim", + "item.page.claim.button": "Reivindicar", + + // "item.page.claim.tooltip": "Claim this item as profile", + "item.page.claim.tooltip": "Reivindicar este item como perfil", + // "item.preview.dc.identifier.uri": "Identifier:", "item.preview.dc.identifier.uri": "Identificador:", @@ -2904,6 +3579,39 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Título:", + // "item.preview.dc.type": "Type:", + "item.preview.dc.type": "Tipo:", + + // "item.preview.oaire.citation.issue" : "Issue", + "item.preview.oaire.citation.issue" : "Issue", + + // "item.preview.oaire.citation.volume" : "Volume", + "item.preview.oaire.citation.volume" : "Volume", + + // "item.preview.dc.relation.issn" : "ISSN", + "item.preview.dc.relation.issn" : "ISSN", + + // "item.preview.dc.relation.eissn" : "EISSN", + "item.preview.dc.relation.eissn" : "EISSN", + + // "item.preview.dc.identifier.isbn" : "ISBN", + "item.preview.dc.identifier.isbn" : "ISBN", + + // "item.preview.dc.identifier.eisbn" : "EISBN", + "item.preview.dc.identifier.eisbn" : "EISBN", + + // "item.preview.dc.identifier.tid" : "TID", + "item.preview.dc.identifier.tid" : "TID", + + // "item.preview.dc.identifier": "Identifier:", + "itemm.preview.dc.identifier": "Identificador:", + + // "item.preview.dc.relation.ispartof" : "Journal or Serie", + "item.preview.dc.relation.ispartof" : "Revista ou Série", + + // "item.preview.dc.identifier.doi" : "DOI", + "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -2913,11 +3621,29 @@ // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID:", + // "item.preview.project.funder.name": "Funder:", + "item.preview.project.funder.name": "Financiador:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + "item.preview.project.funder.identifier": "Identificação do financiador:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + "item.preview.oaire.awardNumber": "ID do financiamento:", + + // "item.preview.dc.title.alternative": "Acronym:", + "item.preview.dc.title.alternative": "Acrónimo:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + "item.preview.dc.coverage.spatial": "Jurisdição:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + "item.preview.oaire.fundingStream": "Linha de financiamento:", + // "item.select.confirm": "Confirm selected", "item.select.confirm": "Confirmar seleção", // "item.select.empty": "No items to show", - "item.select.empty": "Nenhum item para mostrar", + "item.select.empty": "Nenhum item para mostrar.", // "item.select.table.author": "Author", "item.select.table.author": "Autor", @@ -2928,19 +3654,21 @@ // "item.select.table.title": "Title", "item.select.table.title": "Título", - // "item.version.history.empty": "There are no other versions for this item yet.", - "item.version.history.empty": "Não existem ainda outras versões deste item.", + "item.version.history.empty": "Ainda não existem outras versões deste item.", // "item.version.history.head": "Version History", - "item.version.history.head": "Histórico de Versões", + "item.version.history.head": "Histórico de versões", - // "item.version.history.return": "Return", + // "item.version.history.return": "Back", "item.version.history.return": "Voltar", // "item.version.history.selected": "Selected version", "item.version.history.selected": "Versão selecionada", + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + "item.version.history.selected.alert": "Está a ver a versão {{version}} do item.", + // "item.version.history.table.version": "Version", "item.version.history.table.version": "Versão", @@ -2955,13 +3683,192 @@ // "item.version.history.table.summary": "Summary", "item.version.history.table.summary": "Sumário", - - + + // "item.version.history.table.workspaceItem": "Workspace item", + "item.version.history.table.workspaceItem": "Área de trabalho do item", + + // "item.version.history.table.workflowItem": "Workflow item", + "item.version.history.table.workflowItem": "Área de trabalho do item", + + // "item.version.history.table.actions": "Action", + "item.version.history.table.actions": "Ação", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + "item.version.history.table.action.editWorkspaceItem": "Editar área de trabalho do item", + + // "item.version.history.table.action.editSummary": "Edit summary", + "item.version.history.table.action.editSummary": "Editar sumário", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + "item.version.history.table.action.saveSummary": "Guardar alterações ao sumário", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + "item.version.history.table.action.discardSummary": "Cancelar alterações ao sumário", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + "item.version.history.table.action.newVersion": "Criar uma nova versão deste", + + // "item.version.history.table.action.deleteVersion": "Delete version", + "item.version.history.table.action.deleteVersion": "Remover versão", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Esta não é a última versão deste item. A última versão pode ser encontrada aqui.", + // "item.version.create.modal.header": "New version", + "item.version.create.modal.header": "Nova versão", + + // "item.version.create.modal.text": "Create a new version for this item", + "item.version.create.modal.text": "Criar uma nova versão para este item", + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + "item.version.create.modal.text.startingFrom": "Iniciar a partir da versão {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + "item.version.create.modal.button.confirm": "Criar", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + "item.version.create.modal.button.confirm.tooltip": "Criar uma nova versão", + + // "item.version.create.modal.button.cancel": "Cancel", + "item.version.create.modal.button.cancel": "Cancelar", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + "item.version.create.modal.button.cancel.tooltip": "Não criar uma nova versão", + + // "item.version.create.modal.form.summary.label": "Summary", + "item.version.create.modal.form.summary.label": "Sumário", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + "item.version.create.modal.form.summary.placeholder": "Inserir o sumário para a nova versão", + + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Criar uma nova versão...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + "item.version.create.modal.submitted.text": "A nova versão está a ser criada. Isto pode demorar algum tempo se o item tiver muitas relações.", + + // "item.version.create.notification.success": "New version has been created with version number {{version}}", + "item.version.create.notification.success": "Nova versão foi criada com o número {{version}}", + + // "item.version.create.notification.failure": "New version has not been created", + "item.version.create.notification.failure": "Nova versão não foi criada", + + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", + + // "item.version.delete.modal.header": "Delete version", + "item.version.delete.modal.header": "Remover versão", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + "item.version.delete.modal.text": "Pretende remover a versão {{version}}?", + + // "item.version.delete.modal.button.confirm": "Delete", + "item.version.delete.modal.button.confirm": "Remover", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + "item.version.delete.modal.button.confirm.tooltip": "Remover esta versão", + + // "item.version.delete.modal.button.cancel": "Cancel", + "item.version.delete.modal.button.cancel": "Cancelar", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + "item.version.delete.modal.button.cancel.tooltip": "Não remover esta versão", + + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", + "item.version.delete.notification.success": "A versão número {{version}} foi removida", + + // "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", + "item.version.delete.notification.failure": "A versão número {{version}} não foi removida", + + // "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success": "O sumário da versão número {{version}} foi alterado", + + // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", + "item.version.edit.notification.failure": "O sumário da versão número {{version}} não foi alterado", + + // "itemtemplate.edit.metadata.add-button": "Add", + "itemtemplate.edit.metadata.add-button": "Adicionar", + + // "itemtemplate.edit.metadata.discard-button": "Discard", + "itemtemplate.edit.metadata.discard-button": 'Rejeitar', + + // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirmar", + + // "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + "itemtemplate.edit.metadata.edit.buttons.drag": "Arrastar para reordenar", + + // "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + "itemtemplate.edit.metadata.edit.buttons.edit": "Editar", + + // "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + "itemtemplate.edit.metadata.edit.buttons.remove": "Remover", + + // "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + "itemtemplate.edit.metadata.edit.buttons.undo": "Desfazer alterações", + + // "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + "itemtemplate.edit.metadata.edit.buttons.unedit": "Parar edição", + + // "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + "itemtemplate.edit.metadata.empty": "Atualmente o modelo do item não contém quaisquer metadados. Clique em 'Adicionar' para começar a adicionar um valor de metadados.", + + // "itemtemplate.edit.metadata.headers.edit": "Edit", + "itemtemplate.edit.metadata.headers.edit": "Editar", + + // "itemtemplate.edit.metadata.headers.field": "Field", + "itemtemplate.edit.metadata.headers.field": "Campo", + + // "itemtemplate.edit.metadata.headers.language": "Lang", + "itemtemplate.edit.metadata.headers.language": "Idioma", + + // "itemtemplate.edit.metadata.headers.value": "Value", + "itemtemplate.edit.metadata.headers.value": "Valor", + + // "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + "itemtemplate.edit.metadata.metadatafield.error": "ocorreu um erro ao validar o campo de metadados", + + // "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + "itemtemplate.edit.metadata.metadatafield.invalid": "Por favor, selecione um campo de metadados válido", + + // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "itemtemplate.edit.metadata.notifications.discarded.content": "As sua alterações foram descartadas. Para repor as suas alterações clique no botão 'Desfazer'", + + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + "itemtemplate.edit.metadata.notifications.discarded.title": "Alterações descartadas", + + // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + "itemtemplate.edit.metadata.notifications.error.title": "Ocorreu um erro", + + // "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "itemtemplate.edit.metadata.notifications.invalid.content": "As suas alterações não foram guardadas. Por favor, certifique-se de que todos os campos são válidos antes de os guardar.", + + // "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + "itemtemplate.edit.metadata.notifications.invalid.title": "Metadados inválidos", + + // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + "itemtemplate.edit.metadata.notifications.outdated.content": "O modelo do item que está atualmente a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", + + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + "itemtemplate.edit.metadata.notifications.outdated.title": "Alterações desatualizadas", + + // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + "itemtemplate.edit.metadata.notifications.saved.content": "As suas alterações aos metadados deste modelo de item foram guardadas.", + + // "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + "itemtemplate.edit.metadata.notifications.saved.title": "Metadados guardados", + + // "itemtemplate.edit.metadata.reinstate-button": "Undo", + "itemtemplate.edit.metadata.reinstate-button": "Desfazer", + + // "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + "itemtemplate.edit.metadata.reset-order-button": "Desfazer reordenamento", + + // "itemtemplate.edit.metadata.save-button": "Save", + "itemtemplate.edit.metadata.save-button": "Guardar", // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Revista", @@ -2983,17 +3890,18 @@ // "journal.page.titleprefix": "Journal: ", "journal.page.titleprefix": "Revista: ", - + // "journal.search.results.head": "Journal Search Results", - "journal.search.results.head": "Resultado da Pesquisa de Revistas", - - // "journal.search.title": "DSpace Angular :: Journal Search", - "journal.search.title": "DSpace :: Pesquisa de Revistas", + "journal.search.results.head": "Resultado da pesquisa de revistas", + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Resultado da pesquisa de revistas", + // "journal.search.title": "Journal Search", + "journal.search.title": "Pesquisa de revistas", // "journalissue.listelement.badge": "Journal Issue", - "journalissue.listelement.badge": "Número", + "journalissue.listelement.badge": "Número de revista", // "journalissue.page.description": "Description", "journalissue.page.description": "Descrição", @@ -3002,27 +3910,25 @@ "journalissue.page.edit": "Editar este item", // "journalissue.page.issuedate": "Issue Date", - "journalissue.page.issuedate": "Data de Publicação", + "journalissue.page.issuedate": "Data de publicação", // "journalissue.page.journal-issn": "Journal ISSN", - "journalissue.page.journal-issn": "ISSN da Revista", + "journalissue.page.journal-issn": "ISSN da revista", // "journalissue.page.journal-title": "Journal Title", - "journalissue.page.journal-title": "Título da Revista", + "journalissue.page.journal-title": "Título da revista", // "journalissue.page.keyword": "Keywords", "journalissue.page.keyword": "Palavras-chave", // "journalissue.page.number": "Number", - "journalissue.page.number": "Número de Páginas", + "journalissue.page.number": "Número de páginas", // "journalissue.page.titleprefix": "Journal Issue: ", - "journalissue.page.titleprefix": "Número da Revista: ", - - + "journalissue.page.titleprefix": "Número de revista: ", // "journalvolume.listelement.badge": "Journal Volume", - "journalvolume.listelement.badge": "Volume da Revista", + "journalvolume.listelement.badge": "Volume de revista", // "journalvolume.page.description": "Description", "journalvolume.page.description": "Descrição", @@ -3031,15 +3937,46 @@ "journalvolume.page.edit": "Editar este item", // "journalvolume.page.issuedate": "Issue Date", - "journalvolume.page.issuedate": "Data de Publicação", + "journalvolume.page.issuedate": "Data de publicação", // "journalvolume.page.titleprefix": "Journal Volume: ", - "journalvolume.page.titleprefix": "Volume da Revista: ", + "journalvolume.page.titleprefix": "Volume de revista: ", // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Volume", - + // "iiifsearchable.listelement.badge": "Document Media", + "iiifsearchable.listelement.badge": "Media do documeo", + + // "iiifsearchable.page.titleprefix": "Document: ", + "iiifsearchable.page.titleprefix": "Documento: ", + + // "iiifsearchable.page.doi": "Permanent Link: ", + "iiifsearchable.page.doi": "URI permanete: ", + + // "iiifsearchable.page.issue": "Issue: ", + "iiifsearchable.page.issue": "Núemero: ", + + // "iiifsearchable.page.description": "Description: ", + "iiifsearchable.page.description": "Descrição: ", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + "iiifviewer.fullscreen.notice": "Utilize o ecrã completo para melhor visualização .", + + // "iiif.listelement.badge": "Image Media", + "iiif.listelement.badge": "Media da imagem", + + // "iiif.page.titleprefix": "Image: ", + "iiif.page.titleprefix": "Imagem: ", + + // "iiif.page.doi": "Permanent Link: ", + "iiif.page.doi": "URI permanente: ", + + // "iiif.page.issue": "Issue: ", + "iiif.page.issue": "Número: ", + + // "iiif.page.description": "Description: ", + "iiif.page.description": "Description: ", // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "A carregar ficheiro...", @@ -3081,7 +4018,7 @@ "loading.objects": "A carregar...", // "loading.recent-submissions": "Loading recent submissions...", - "loading.recent-submissions": "A carregar submissões recentes...", + "loading.recent-submissions": "A carregar depósitos recentes...", // "loading.search-results": "Loading search results...", "loading.search-results": "A carregar resultados de pesquisa...", @@ -3095,8 +4032,6 @@ // "loading.top-level-communities": "Loading top-level communities...", "loading.top-level-communities": "A carregar comunidades de nível superior...", - - // "login.form.email": "Email address", "login.form.email": "Endereço de email", @@ -3107,16 +4042,22 @@ "login.form.header": "Por favor entre no repositório", // "login.form.new-user": "New user? Click here to register.", - "login.form.new-user": "Novo Utilizador? Clique aqui para se registar.", + "login.form.new-user": "Novo utilizador? Clique aqui para se registar.", // "login.form.or-divider": "or", "login.form.or-divider": "ou", + // "login.form.oidc": "Log in with OIDC", + "login.form.oidc": "Entrar com OIDC", + + // "login.form.orcid": "Log in with ORCID", + "login.form.orcid": "Entrar com ORCID", + // "login.form.password": "Password", "login.form.password": "Palavra-chave", // "login.form.shibboleth": "Log in with Shibboleth", - "login.form.shibboleth": "Entrar com Autenticação Federada", + "login.form.shibboleth": "Entrar com autenticação federada", // "login.form.submit": "Log in", "login.form.submit": "Entrar", @@ -3127,10 +4068,8 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Entrar", - - // "logout.form.header": "Log out from DSpace", - "logout.form.header": "Sair do DSpace", + "logout.form.header": "Sair do repositório", // "logout.form.submit": "Log out", "logout.form.submit": "Sair", @@ -3138,18 +4077,17 @@ // "logout.title": "Logout", "logout.title": "Sair", - - - // "menu.header.admin": "Admin", + // "menu.header.admin": "Management", "menu.header.admin": "Administração", // "menu.header.image.logo": "Repository logo", "menu.header.image.logo": "Logo do repositório", - - + + // "menu.header.admin.description": "Management menu", + "menu.header.admin.description": "Menu de administração", // "menu.section.access_control": "Access Control", - "menu.section.access_control": "Controle de Acesso", + "menu.section.access_control": "Controlo de acesso", // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Autorizações", @@ -3158,54 +4096,46 @@ "menu.section.access_control_groups": "Grupos", // "menu.section.access_control_people": "People", - "menu.section.access_control_people": "Pessoas", - - + "menu.section.access_control_people": "Pessoas", // "menu.section.admin_search": "Admin Search", - "menu.section.admin_search": "Pesquisa Administrativa", - - + "menu.section.admin_search": "Pesquisa administrativa", // "menu.section.browse_community": "This Community", - "menu.section.browse_community": "Esta Comunidade", + "menu.section.browse_community": "Esta comunidade", // "menu.section.browse_community_by_author": "By Author", - "menu.section.browse_community_by_author": "Por Autor", + "menu.section.browse_community_by_author": "Por autor", // "menu.section.browse_community_by_issue_date": "By Issue Date", - "menu.section.browse_community_by_issue_date": "Por Data de Publicação", + "menu.section.browse_community_by_issue_date": "Por data de publicação", // "menu.section.browse_community_by_title": "By Title", - "menu.section.browse_community_by_title": "Por Título", + "menu.section.browse_community_by_title": "Por título", // "menu.section.browse_global": "All of DSpace", - "menu.section.browse_global": "Percorrer", + "menu.section.browse_global": "Percorrer repositório", // "menu.section.browse_global_by_author": "By Author", - "menu.section.browse_global_by_author": "Por Autor", + "menu.section.browse_global_by_author": "Por autor", // "menu.section.browse_global_by_dateissued": "By Issue Date", - "menu.section.browse_global_by_dateissued": "Por Data de Publicação", + "menu.section.browse_global_by_dateissued": "Por data de publicação", // "menu.section.browse_global_by_subject": "By Subject", - "menu.section.browse_global_by_subject": "Por Assunto", + "menu.section.browse_global_by_subject": "Por assunto", // "menu.section.browse_global_by_title": "By Title", - "menu.section.browse_global_by_title": "Por Título", + "menu.section.browse_global_by_title": "Por título", // "menu.section.browse_global_communities_and_collections": "Communities & Collections", - "menu.section.browse_global_communities_and_collections": "Comunidades e Coleções", - - + "menu.section.browse_global_communities_and_collections": "Comunidades & Coleções", // "menu.section.control_panel": "Control Panel", - "menu.section.control_panel": "Painel de Controle", + "menu.section.control_panel": "Painel de controle", // "menu.section.curation_task": "Curation Task", - "menu.section.curation_task": "Tarefas de Curadoria", - - + "menu.section.curation_task": "Tarefas de curadoria", // "menu.section.edit": "Edit", "menu.section.edit": "Editar", @@ -3219,8 +4149,6 @@ // "menu.section.edit_item": "Item", "menu.section.edit_item": "Item", - - // "menu.section.export": "Export", "menu.section.export": "Exportar", @@ -3236,7 +4164,8 @@ // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metadados", - + // "menu.section.export_batch": "Batch Export (ZIP)", + "menu.section.export_batch": "Importação em lote (ZIP)", // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Secção do menu Controle de Acesso", @@ -3247,8 +4176,8 @@ // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Secção do menu Painel de Controlo", - // "menu.section.icon.curation_task": "Curation Task menu section", - "menu.section.icon.curation_task": "Secção do menu Tarefas de Curadoria", + // "menu.section.icon.curation_tasks": "Curation Task menu section", + "menu.section.icon.curation_tasks": "Secção do menu Tarefas de Curadoria", // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Secção do menu Editar", @@ -3259,6 +4188,9 @@ // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Secção do menu Pesquisar", + // "menu.section.icon.health": "Health check menu section", + "menu.section.icon.health": "Seção do menu Diagnóstico do sistema", + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Secção do menu Importar", @@ -3268,34 +4200,33 @@ // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Fixar barra lateral", - // "menu.section.icon.processes": "Processes menu section", - "menu.section.icon.processes": "Secção do menu Processos", - + // "menu.section.icon.processes": "Processes Health", + "menu.section.icon.processes": "Processos diagnóstico", + // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Secção do menu Registos", // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Secção do menu Tarefas de Estatísticas", + // "menu.section.icon.workflow": "Administer workflow menu section", + "menu.section.icon.workflow": "Menu administração de tarefas", + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Soltar barra lateral", - - // "menu.section.import": "Import", "menu.section.import": "Importar", - // "menu.section.import_batch": "Batch Import (ZIP)", - "menu.section.import_batch": "Importação em Lote (ZIP)", + // "menu.section.import_batch": "Batch import (ZIP)", + "menu.section.import_batch": "Importação em lote (ZIP)", // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadados", - - // "menu.section.new": "New", "menu.section.new": "Novo", - + // "menu.section.new_collection": "Collection", "menu.section.new_collection": "Coleção", @@ -3306,25 +4237,22 @@ "menu.section.new_item": "Item", // "menu.section.new_item_version": "Item Version", - "menu.section.new_item_version": "Versão do Item", + "menu.section.new_item_version": "Versão do item", // "menu.section.new_process": "Process", "menu.section.new_process": "Processos", - - // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Fixar barra lateral", // "menu.section.unpin": "Unpin sidebar", "menu.section.unpin": "Soltar barra lateral", - - // "menu.section.processes": "Processes", "menu.section.processes": "Processos", - + // "menu.section.health": "Health", + "menu.section.health": "Diagnóstico do sistema", // "menu.section.registries": "Registries", "menu.section.registries": "Registos", @@ -3334,58 +4262,61 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadados", - - - - // "menu.section.statistics": "Statistics", + + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estatísticas", - + // "menu.section.statistics_task": "Statistics Task", - "menu.section.statistics_task": "Tarefas de Estatísticas", - - + "menu.section.statistics_task": "Tarefa de estatísticas", // "menu.section.toggle.access_control": "Toggle Access Control section", - "menu.section.toggle.access_control": "Alternar Secção Controle de Acesso", + "menu.section.toggle.access_control": "Alternar secção controle de acesso", // "menu.section.toggle.control_panel": "Toggle Control Panel section", - "menu.section.toggle.control_panel": "Alternar Secção Painel de COntrole", + "menu.section.toggle.control_panel": "Alternar secção painel de controle", // "menu.section.toggle.curation_task": "Toggle Curation Task section", - "menu.section.toggle.curation_task": "Alternar Secção Tarefas de Curadoria", + "menu.section.toggle.curation_task": "Alternar secção tarefas de curadoria", // "menu.section.toggle.edit": "Toggle Edit section", - "menu.section.toggle.edit": "Alternar Secção Editar", + "menu.section.toggle.edit": "Alternar secção editar", // "menu.section.toggle.export": "Toggle Export section", - "menu.section.toggle.export": "Alternar Secção Exportar", + "menu.section.toggle.export": "Alternar secção exportar", // "menu.section.toggle.find": "Toggle Find section", - "menu.section.toggle.find": "Alternar Secção Pesquisa", + "menu.section.toggle.find": "Alternar secção pesquisa", // "menu.section.toggle.import": "Toggle Import section", - "menu.section.toggle.import": "Alternar Secção Importar", + "menu.section.toggle.import": "Alternar secção importar", // "menu.section.toggle.new": "Toggle New section", - "menu.section.toggle.new": "Alternar Nova Secção", + "menu.section.toggle.new": "Alternar nova secção", // "menu.section.toggle.registries": "Toggle Registries section", - "menu.section.toggle.registries": "Alternar Secção Registos", + "menu.section.toggle.registries": "Alternar secção registos", // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", - "menu.section.toggle.statistics_task": "Alternar Secção Tarefas de Estatísticas", - + "menu.section.toggle.statistics_task": "Alternar secção tarefas de estatísticas", // "menu.section.workflow": "Administer Workflow", - "menu.section.workflow": "Gestão do Workflow", + "menu.section.workflow": "Gestão do workflow", + // "metadata-export-search.tooltip": "Export search results as CSV", + "metadata-export-search.tooltip": "Exportar resultados de pesquisa em CSV", + + // "metadata-export-search.submit.success": "The export was started successfully", + "metadata-export-search.submit.success": "A exportação foi iniciada com sucesso", + + // "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.error": "O início da exportação falhou!", + + // "mydspace.breadcrumbs": "MyDSpace", + "mydspace.breadcrumbs": "Área Pessoal", // "mydspace.description": "", "mydspace.description": "", - // "mydspace.general.text-here": "here", - "mydspace.general.text-here": "aqui", - // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Selecione esta opção para enviar uma mensagem para o depositante do item.", @@ -3426,7 +4357,7 @@ "mydspace.messages.to": "Para", // "mydspace.new-submission": "New submission", - "mydspace.new-submission": "Nova submissão", + "mydspace.new-submission": "Novo depósito", // "mydspace.new-submission-external": "Import metadata from external source", "mydspace.new-submission-external": "Importar metadados de fontes externas", @@ -3435,7 +4366,7 @@ "mydspace.new-submission-external-short": "Importar metadados", // "mydspace.results.head": "Your submissions", - "mydspace.results.head": "Minhas submissões", + "mydspace.results.head": "Meus depósitos", // "mydspace.results.no-abstract": "No Abstract", "mydspace.results.no-abstract": "Sem Resumo", @@ -3444,13 +4375,13 @@ "mydspace.results.no-authors": "Sem Autores", // "mydspace.results.no-collections": "No Collections", - "mydspace.results.no-collections": "Sem Coleções", + "mydspace.results.no-collections": "Sem coleções", // "mydspace.results.no-date": "No Date", - "mydspace.results.no-date": "Sem Data", + "mydspace.results.no-date": "Sem data", // "mydspace.results.no-files": "No Files", - "mydspace.results.no-files": "Sem Ficheiros", + "mydspace.results.no-files": "Sem ficheiros", // "mydspace.results.no-results": "There were no items to show", "mydspace.results.no-results": "Não havia itens a mostrar", @@ -3459,28 +4390,34 @@ "mydspace.results.no-title": "Sem título", // "mydspace.results.no-uri": "No Uri", - "mydspace.results.no-uri": "Sem Uri", + "mydspace.results.no-uri": "Sem URI", + + // "mydspace.search-form.placeholder": "Search in mydspace...", + "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", - // "mydspace.show.workflow": "All tasks", + // "mydspace.show.workflow": "Workflow tasks", "mydspace.show.workflow": "Todas as tarefas", // "mydspace.show.workspace": "Your Submissions", - "mydspace.show.workspace": "Minhas Submissões", + "mydspace.show.workspace": "Meus depósitos", + + // "mydspace.show.supervisedWorkspace": "Supervised items", + "mydspace.show.supervisedWorkspace": "Itens supervisionados", // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Arquivado", + "mydspace.status.archived": "Depósito aceite", // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Validação", + "mydspace.status.validation": "Em validação", // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Esperando pelo controlador", + "mydspace.status.waiting-for-controller": "Aguarda validador", // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Fluxo de trabalho", + "mydspace.status.workflow": "Em fluxo de trabalho", // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Espaço de trabalho", + "mydspace.status.workspace": "Depósito por terminar", // "mydspace.title": "MyDSpace", "mydspace.title": "Área Pessoal", @@ -3496,30 +4433,34 @@ // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", "mydspace.upload.upload-multiple-successful": "{{qty}} novo(s) item(ns) de espaço de trabalho criados.", - - // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", - "mydspace.upload.upload-successful": "Novo item de espaço de trabalho criado. Clique {{here}} para o editar.", - + // "mydspace.view-btn": "View", "mydspace.view-btn": "Ver", - - // "nav.browse.header": "All of DSpace", - "nav.browse.header": "Tudo no DSpace", + "nav.browse.header": "Tudo no repositório", // "nav.community-browse.header": "By Community", - "nav.community-browse.header": "Por Comunidade", + "nav.community-browse.header": "Por comunidade", + // "nav.context-help-toggle": "Toggle context help", + "nav.context-help-toggle": "Alternar ajuda contextual", + // "nav.language": "Language switch", - "nav.language": "Escolha de idioma", + "nav.language": "Escolher idioma", // "nav.login": "Log In", "nav.login": "Entrar", + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + "nav.user-profile-menu-and-logout": "Menu perfil do utilizador e sair", + // "nav.logout": "Log Out", "nav.logout": "Sair", + // "nav.main.description": "Main navigation bar", + "nav.main.description": "Barra de naveção principal", + // "nav.mydspace": "MyDSpace", "nav.mydspace": "Área Pessoal", @@ -3533,13 +4474,26 @@ "nav.statistics.header": "Estatísticas", // "nav.stop-impersonating": "Stop impersonating EPerson", - "nav.stop-impersonating": "Deixar de assumir o papel do Utilizador", - + "nav.stop-impersonating": "Deixar de assumir o papel do utilizador", + + // "nav.subscriptions" : "Subscriptions", + "nav.subscriptions" : "Subscrições de alertas", + // "nav.toggle" : "Toggle navigation", + "nav.toggle" : "Alternar a navegação", + + // "nav.user.description" : "User profile bar", + "nav.user.description" : "Barra do perfil de utilizador", + + // "none.listelement.badge": "Item", + "none.listelement.badge": "Item", // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organização", + // "orgunit.listelement.no-title": "Untitled", + "orgunit.listelement.no-title": "Sem título", + // "orgunit.page.city": "City", "orgunit.page.city": "Cidade", @@ -3561,7 +4515,8 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organização: ", - + // "pagination.options.description": "Pagination options", + "pagination.options.description": "Opções de paginação", // "pagination.results-per-page": "Results Per Page", "pagination.results-per-page": "Resultados por página", @@ -3573,9 +4528,7 @@ "pagination.showing.label": "A mostrar ", // "pagination.sort-direction": "Sort Options", - "pagination.sort-direction": "Opções de Ordenação", - - + "pagination.sort-direction": "Opções de ordenação", // "person.listelement.badge": "Person", "person.listelement.badge": "Pessoa", @@ -3601,6 +4554,9 @@ // "person.page.lastname": "Last Name", "person.page.lastname": "Último Nome", + // "person.page.name": "Name", + "person.page.name": "Nome", + // "person.page.link.full": "Show all metadata", "person.page.link.full": "Mostrar todos os metadados", @@ -3614,12 +4570,13 @@ "person.page.titleprefix": "Pessoa: ", // "person.search.results.head": "Person Search Results", - "person.search.results.head": "Resultado da pesquisa de Pessoa", - - // "person.search.title": "DSpace Angular :: Person Search", - "person.search.title": "DSpace :: Pesquisar Pessoa", + "person.search.results.head": "Resultados da pesquisa de pessoas", + // "person-relationships.search.results.head": "Person Search Results", + "person-relationships.search.results.head": "Resultados da pesquisa de pessoas", + // "person.search.title": "Person Search", + "person.search.title": "Pesquisar pessoa", // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parâmetros", @@ -3627,7 +4584,7 @@ // "process.new.cancel": "Cancel", "process.new.cancel": "Cancelar", - // "process.new.submit": "Submit", + // "process.new.submit": "Save", "process.new.submit": "Guardar", // "process.new.select-script": "Script", @@ -3637,7 +4594,7 @@ "process.new.select-script.placeholder": "Escolha um script...", // "process.new.select-script.required": "Script is required", - "process.new.select-script.required": "É necessário um Script", + "process.new.select-script.required": "É necessário um script", // "process.new.parameter.file.upload-button": "Select file...", "process.new.parameter.file.upload-button": "Selecionar ficheiro...", @@ -3678,8 +4635,6 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Criar um novo processo", - - // "process.detail.arguments" : "Arguments", "process.detail.arguments" : "Argumentos", @@ -3725,10 +4680,32 @@ // "process.detail.create" : "Create similar process", "process.detail.create" : "Criar processo similar", + // "process.detail.actions": "Actions", + "process.detail.actions": "Ações", + + // "process.detail.delete.button": "Delete process", + "process.detail.delete.button": "Remover processo", + + // "process.detail.delete.header": "Delete process", + "process.detail.delete.header": "Remover processo", + + // "process.detail.delete.body": "Are you sure you want to delete the current process?", + "process.detail.delete.body": "Tem a certeza de que quer remover o processo actual?", + + // "process.detail.delete.cancel": "Cancel", + "process.detail.delete.cancel": "Cancelar", + + // "process.detail.delete.confirm": "Delete process", + "process.detail.delete.confirm": "Remover processo", + + // "process.detail.delete.success": "The process was successfully deleted.", + "process.detail.delete.success": "O processo foi removido com sucesso.", + + // "process.detail.delete.error": "Something went wrong when deleting the process", + "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", - - // "process.overview.table.finish" : "Finish time", - "process.overview.table.finish" : "Tempo de término", + // "process.overview.table.finish" : "Finish time (UTC)", + "process.overview.table.finish" : "Hora de término (UTC)", // "process.overview.table.id" : "Process ID", "process.overview.table.id" : "ID do Processo", @@ -3736,8 +4713,8 @@ // "process.overview.table.name" : "Name", "process.overview.table.name" : "Nome", - // "process.overview.table.start" : "Start time", - "process.overview.table.start" : "Início", + // "process.overview.table.start" : "Start time (UTC)", + "process.overview.table.start" : "Hora de início (UTC)", // "process.overview.table.status" : "Status", "process.overview.table.status" : "Estado", @@ -3746,38 +4723,67 @@ "process.overview.table.user" : "Utilizador", // "process.overview.title": "Processes Overview", - "process.overview.title": "Resumo dos Processos", + "process.overview.title": "Resumo dos processos", // "process.overview.breadcrumbs": "Processes Overview", - "process.overview.breadcrumbs": "Resumo dos Processos", + "process.overview.breadcrumbs": "Resumo dos processos", // "process.overview.new": "New", "process.overview.new": "Novo", + // "process.overview.table.actions": "Actions", + "process.overview.table.actions": "Ações", + + // "process.overview.delete": "Delete {{count}} processes", + "process.overview.delete": "Remover {{count}} processos", + + // "process.overview.delete.clear": "Clear delete selection", + "process.overview.delete.clear": "Limpar selecção a remover", + + // "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + "process.overview.delete.processing": "{{count}} processo(s) estão a ser removidos. Por favor aguarde pela remoção completa. Notar que esta operação pode demorar algum tempo.", + + // "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + "process.overview.delete.body": "Tem a certeza de que quer remover o(s) processo(s) {{count}}?", + + // "process.overview.delete.header": "Delete processes", + "process.overview.delete.header": "Remover processos", + + // "process.bulk.delete.error.head": "Error on deleteing process", + "process.bulk.delete.error.head": "Ocorreu um erro ao remover os processos", + + // "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + "process.bulk.delete.error.body": "O processo com o ID {{{processId}} não pôde ser removido. Os restantes processos continuarão a ser removidos.", + + // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + "process.bulk.delete.success": "{{count}} processso(s) foram removidos com sucesso", // "profile.breadcrumbs": "Update Profile", - "profile.breadcrumbs": "Atualizar Perfil", + "profile.breadcrumbs": "Atualizar perfil", // "profile.card.identify": "Identify", "profile.card.identify": "Identificação", // "profile.card.security": "Security", - "profile.card.security": "Segurança", + "profile.card.security": "Senha de acesso", - // "profile.form.submit": "Update Profile", - "profile.form.submit": "Atualizar Perfil", + // "profile.form.submit": "Save", + "profile.form.submit": "Atualizar perfil", // "profile.groups.head": "Authorization groups you belong to", "profile.groups.head": "Os seus grupos", + // "profile.special.groups.head": "Authorization special groups you belong to", + "profile.special.groups.head": "Autorização de grupos especiais aos quais pertence", + // "profile.head": "Update Profile", - "profile.head": "Atualizar Perfil", + "profile.head": "Atualizar perfil", // "profile.metadata.form.error.firstname.required": "First Name is required", - "profile.metadata.form.error.firstname.required": "O Nome é obrigatório", + "profile.metadata.form.error.firstname.required": "O preenchimento do nome é um elemento obrigatório!", // "profile.metadata.form.error.lastname.required": "Last Name is required", - "profile.metadata.form.error.lastname.required": "O Apelido é obrigatório", + "profile.metadata.form.error.lastname.required": "O preenchiento do apelido é um elemento obrigatório!", // "profile.metadata.form.label.email": "Email Address", "profile.metadata.form.label.email": "Endereço de correio eletrónico", @@ -3807,42 +4813,46 @@ "profile.notifications.warning.no-changes.title": "Sem alterações", // "profile.security.form.error.matching-passwords": "The passwords do not match.", - "profile.security.form.error.matching-passwords": "As palavras-chave não coincidem.", + "profile.security.form.error.matching-passwords": "As senhas não coincidem.", - // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", - "profile.security.form.error.password-length": "A palavra-chave deve ter pelo menos 6 caracteres.", - - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "profile.security.form.info": "Opcionalmente, pode incluir a nova palavra-chave na primeira caixa de texto e confirmar a mesma incluindo-a novamente na segunda caixa de texto. Deverá possuir pelo menos 6 caracteres.", + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", + "profile.security.form.info": "Opcionalmente, pode criar uma nova senha introduzindo-a primeira caixa de texto e confirmando-a na segunda caixa de texto.", // "profile.security.form.label.password": "Password", - "profile.security.form.label.password": "Palavra-chave", + "profile.security.form.label.password": "Senha", // "profile.security.form.label.passwordrepeat": "Retype to confirm", - "profile.security.form.label.passwordrepeat": "Insira novamente para confirmar", + "profile.security.form.label.passwordrepeat": "Insira novamente a senha para confirmar", + + // "profile.security.form.label.current-password": "Current password", + "profile.security.form.label.current-password": "Senha atual", // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", - "profile.security.form.notifications.success.content": "As alterações à palavra-chave foram guardadas.", + "profile.security.form.notifications.success.content": "As alterações da senha foram guardadas.", // "profile.security.form.notifications.success.title": "Password saved", - "profile.security.form.notifications.success.title": "Palavra-chave guardada", + "profile.security.form.notifications.success.title": "Senha guardada", // "profile.security.form.notifications.error.title": "Error changing passwords", - "profile.security.form.notifications.error.title": "Erro ao mudar a palavra-chave", + "profile.security.form.notifications.error.title": "Erro ao mudar a senha", - // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", - "profile.security.form.notifications.error.not-long-enough": "A palavra-chave deve ter pelo menos 6 caracteres.", + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + "profile.security.form.notifications.error.change-failed": "Ocorreu um erro ao tentar alterar a senha. Verifique se a senha atual está correcta.", // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", - "profile.security.form.notifications.error.not-same": "As palavras-chave fornecidas não coincidem.", + "profile.security.form.notifications.error.not-same": "As senhas fornecidas não coincidem.", + + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + "profile.security.form.notifications.error.general": "Por favor preencha os campos obrigatórios no formulário de segurança.", // "profile.title": "Update Profile", - "profile.title": "Atualizar Perfil", - + "profile.title": "Atualizar perfil", + // "profile.card.researcher": "Researcher Profile", + "profile.card.researcher": "Perfil do investigador", // "project.listelement.badge": "Research Project", - "project.listelement.badge": "Projeto de Investigação", + "project.listelement.badge": "Projeto de investigação", // "project.page.contributor": "Contributors", "project.page.contributor": "Contribuidores", @@ -3869,12 +4879,13 @@ "project.page.status": "Estado", // "project.page.titleprefix": "Research Project: ", - "project.page.titleprefix": "Projeto de Investigação: ", - + "project.page.titleprefix": "Projeto de investigação: ", + // "project.search.results.head": "Project Search Results", - "project.search.results.head": "Resultado da Pesquisa de Projetos", - - + "project.search.results.head": "Resultados da pesquisa de projetos", + + // "project-relationships.search.results.head": "Project Search Results", + "project-relationships.search.results.head": "Resultados da pesquisa de projetos", // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Publicação", @@ -3886,10 +4897,10 @@ "publication.page.edit": "Editar este item", // "publication.page.journal-issn": "Journal ISSN", - "publication.page.journal-issn": "ISSN do Periódico", + "publication.page.journal-issn": "ISSN da revista", // "publication.page.journal-title": "Journal Title", - "publication.page.journal-title": "Título do Periódico", + "publication.page.journal-title": "Título da revista", // "publication.page.publisher": "Publisher", "publication.page.publisher": "Editora", @@ -3899,16 +4910,27 @@ // "publication.page.volume-title": "Volume Title", "publication.page.volume-title": "Título do Volume", - + // "publication.search.results.head": "Publication Search Results", - "publication.search.results.head": "Resultados da Busca de Publicação", + "publication.search.resuts.head": "Resultados da pesquisa de publicações", - // "publication.search.title": "DSpace Angular :: Publication Search", - "publication.search.title": "DSpace :: Busca de Publicações", + // "publication-relationships.search.results.head": "Publication Search Results", + "publication-relationships.search.results.head": "Resultados da pesquisa de publicações", + // "publication.search.title": "Publication Search", + "publication.search.title": "Pesquisa de publicações", + + // "media-viewer.next": "Next", + "media-viewer.next": "Próximo", + + // "media-viewer.previous": "Previous", + "media-viewer.previous": "Anterior", + + // "media-viewer.playlist": "Playlist", + "media-viewer.playlist": "Playlist", // "register-email.title": "New user registration", - "register-email.title": "Registo de Novo Utilizador", + "register-email.title": "Registo de novo utilizador", // "register-page.create-profile.header": "Create Profile", "register-page.create-profile.header": "Criar perfil", @@ -3917,22 +4939,22 @@ "register-page.create-profile.identification.header": "Identificação", // "register-page.create-profile.identification.email": "Email Address", - "register-page.create-profile.identification.email": "Endereço de Correio Eletrónico", + "register-page.create-profile.identification.email": "Endereço de correio eletrónico", // "register-page.create-profile.identification.first-name": "First Name *", "register-page.create-profile.identification.first-name": "Nome *", // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", - "register-page.create-profile.identification.first-name.error": "Inclua um Nome", + "register-page.create-profile.identification.first-name.error": "Inclua um nome", // "register-page.create-profile.identification.last-name": "Last Name *", "register-page.create-profile.identification.last-name": "Apelido *", // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", - "register-page.create-profile.identification.last-name.error": "Inclua um Apelido", + "register-page.create-profile.identification.last-name.error": "Inclua um apelido", // "register-page.create-profile.identification.contact": "Contact Telephone", - "register-page.create-profile.identification.contact": "Contacto Telefónico", + "register-page.create-profile.identification.contact": "Contacto telefónico", // "register-page.create-profile.identification.language": "Language", "register-page.create-profile.identification.language": "Idioma", @@ -3940,8 +4962,8 @@ // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Segurança", - // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "register-page.create-profile.security.info": "Insira uma palavra-chave na caixa abaixo, e confirme colocando-a de novo da segunda caixa. Deverá ter pelo menos 6 caracteres.", + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", + "register-page.create-profile.security.info": "Insira uma palavra-chave na caixa abaixo, e confirme colocando-a de novo da segunda caixa.", // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Palavra-chave *", @@ -3955,39 +4977,38 @@ // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", "register-page.create-profile.security.error.matching-passwords": "As palavras-chave não coincidem.", - // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", - "register-page.create-profile.security.error.password-length": "A palavra-chave deve possuir pelo menos 6 caracteres.", - // "register-page.create-profile.submit": "Complete Registration", "register-page.create-profile.submit": "Finalizar Registo", // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", - "register-page.create-profile.submit.error.content": "Ocorreu um erro ao registar o Utilizador.", + "register-page.create-profile.submit.error.content": "Ocorreu um erro ao registar o utilizador.", // "register-page.create-profile.submit.error.head": "Registration failed", - "register-page.create-profile.submit.error.head": "Falha no Registo", + "register-page.create-profile.submit.error.head": "Falha no registo", // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", "register-page.create-profile.submit.success.content": "O registo foi criado com sucesso. Foi iniciada sessão com o Utilizador criado.", // "register-page.create-profile.submit.success.head": "Registration completed", - "register-page.create-profile.submit.success.head": "Registo Finalizado com Sucesso", - + "register-page.create-profile.submit.success.head": "Registo finalizado com sucesso", // "register-page.registration.header": "New user registration", - "register-page.registration.header": "Registo de Novo Utilizador", + "register-page.registration.header": "Registo de novo utilizador", // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "register-page.registration.info": "Registe uma conta de Utilizador para subscrever novos conteúdos das coleções e depositar itens no repositório.", + "register-page.registration.info": "Crie uma conta de utilizador para subscrever novos conteúdos das coleções e depositar itens no repositório.", // "register-page.registration.email": "Email Address *", - "register-page.registration.email": "Endereço de Correio Eletrónico *", + "register-page.registration.email": "Endereço de correio eletrónico *", // "register-page.registration.email.error.required": "Please fill in an email address", - "register-page.registration.email.error.required": "Insira um endereço de email", + "register-page.registration.email.error.required": "Insira um endereço de correio eletrónico", - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Insira um endereço de email válido", + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + "register-page.registration.email.error.not-email-form": "Insira um endereço de correio eletrónico válido.", + + // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + "register-page.registration.email.error.not-valid-domain": "Usar endereço de correio eletrónico com domínios permitidos: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Este endereço de correio eletrónico será verificado e usado para iniciar sessão.", @@ -3996,7 +5017,7 @@ "register-page.registration.submit": "Registo", // "register-page.registration.success.head": "Verification email sent", - "register-page.registration.success.head": "Email de verificação enviado", + "register-page.registration.success.head": "Enviado Email de verificação", // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "register-page.registration.success.content": "Foi enviado um email para {{ email }} com instruções e um endereço especial para confirmação.", @@ -4007,7 +5028,29 @@ // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Ocorreu um erro ao registar o seguinte endereço de correio eletrónico: {{ email }}", + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + "register-page.registration.error.recaptcha": "Ocorreu um erro ao tentar autenticar com o recaptcha", + + // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + "register-page.registration.google-recaptcha.must-accept-cookies": "Para se registar deve aceitar o registo e a senha de recuperação (Google reCaptcha) cookies.", + + // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + "register-page.registration.error.maildomain": "Este endereço de e-mail não consta da lista de domínios que podem ser registados. Os domínios permitidos são {{ domains }}", + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + "register-page.registration.google-recaptcha.open-cookie-settings": "Configurações de Open cookie", + + // "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + "register-page.registration.google-recaptcha.notification.message.error": "Ocorreu um erro na verificação do reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + "register-page.registration.google-recaptcha.notification.message.expired": "Verificação expirou. Por favor verifique novamente.", + + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + "register-page.registration.info.maildomain": "As contas podem ser registadas para os endereços de email os domínios", // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", "relationships.add.error.relationship-type.content": "Não foi encontrado uma licação adequada no tipo de relação {{ type }} entre os dois itens", @@ -4037,13 +5080,13 @@ "relationships.isJournalOf": "Periódicos", // "relationships.isOrgUnitOf": "Organizational Units", - "relationships.isOrgUnitOf": "Unidades Organizacionais", + "relationships.isOrgUnitOf": "Unidades organizacionais", // "relationships.isPersonOf": "Authors", "relationships.isPersonOf": "Autores", // "relationships.isProjectOf": "Research Projects", - "relationships.isProjectOf": "Projetos de Investigação", + "relationships.isProjectOf": "Projetos de investigação", // "relationships.isPublicationOf": "Publications", "relationships.isPublicationOf": "Publicações", @@ -4052,19 +5095,35 @@ "relationships.isPublicationOfJournalIssue": "Artigos", // "relationships.isSingleJournalOf": "Journal", - "relationships.isSingleJournalOf": "Periódico", + "relationships.isSingleJournalOf": "Revista", // "relationships.isSingleVolumeOf": "Journal Volume", - "relationships.isSingleVolumeOf": "Volume do Periódico", + "relationships.isSingleVolumeOf": "Volume de revista", // "relationships.isVolumeOf": "Journal Volumes", - "relationships.isVolumeOf": "Volumes do Periódico", + "relationships.isVolumeOf": "Volumes da revista", // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Contribuidores", + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + "relationships.isContributorOf.OrgUnit": "Colaborador (Unidade organizacional)", + + // "relationships.isContributorOf.Person": "Contributor", + "relationships.isContributorOf.Person": "Contribuidor", + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + "relationships.isFundingAgencyOf.OrgUnit": "Financiador", + // "repository.image.logo": "Repository logo", + "repository.image.logo": "Logótipo do repositório", + + // "repository.title.prefix": "DSpace Angular :: ", + "repository.title.prefix": "Repositório :: ", + + // "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefixDSpace": "Repositório ::", + // "resource-policies.add.button": "Add", "resource-policies.add.button": "Adicionar", @@ -4116,6 +5175,12 @@ // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Ocorreu um erro ao editar a política de recurso.", + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + "resource-policies.edit.page.target-failure.content": "Ocorreu um erro durante a edição da (ePerson ou grupo) da política de recursos.", + + // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + "resource-policies.edit.page.other-failure.content": "Ocorreu um erro durante a edição da política de recursos. A (ePerson ou grupo) foi actualizado com sucesso.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "Operação bem sucedida", @@ -4123,19 +5188,19 @@ "resource-policies.edit.page.title": "Editar política de recurso", // "resource-policies.form.action-type.label": "Select the action type", - "resource-policies.form.action-type.label": "Seleccione o tipo de ação", + "resource-policies.form.action-type.label": "Selecione o tipo de ação", // "resource-policies.form.action-type.required": "You must select the resource policy action.", "resource-policies.form.action-type.required": "Deve selecionar a ação da política de recurso.", // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", - "resource-policies.form.eperson-group-list.label": "O Utilizador ou grupo ao qual serão atribuídas as permissões", + "resource-policies.form.eperson-group-list.label": "O utilizador ou grupo ao qual serão atribuídas as permissões", // "resource-policies.form.eperson-group-list.select.btn": "Select", "resource-policies.form.eperson-group-list.select.btn": "Seleccionar", // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", - "resource-policies.form.eperson-group-list.tab.eperson": "Pesquisar um Utilizador", + "resource-policies.form.eperson-group-list.tab.eperson": "Pesquisar um utilizador", // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", "resource-policies.form.eperson-group-list.tab.group": "Pesquisar um grupo", @@ -4146,14 +5211,29 @@ // "resource-policies.form.eperson-group-list.table.headers.id": "ID", "resource-policies.form.eperson-group-list.table.headers.id": "ID", - // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Nome", + + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + "resource-policies.form.eperson-group-list.modal.header": "Não pode mudar de tipo", + + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Não é possível substituir um utilizador por um grupo.", + + // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Não é possível substituir um grupo por uma ePerson.", + + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + "resource-policies.form.eperson-group-list.modal.text2": "Eliminar a política actual de recursos e criar uma nova política com o tipo desejado.", + + // "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.close": "Ok", // "resource-policies.form.date.end.label": "End Date", - "resource-policies.form.date.end.label": "Data de Fim", + "resource-policies.form.date.end.label": "Data de fim", // "resource-policies.form.date.start.label": "Start Date", - "resource-policies.form.date.start.label": "Data de Início", + "resource-policies.form.date.start.label": "Data de início", // "resource-policies.form.description.label": "Description", "resource-policies.form.description.label": "Descrição", @@ -4162,7 +5242,7 @@ "resource-policies.form.name.label": "Nome", // "resource-policies.form.policy-type.label": "Select the policy type", - "resource-policies.form.policy-type.label": "Seleccione o tipo de política", + "resource-policies.form.policy-type.label": "Selecione o tipo de política", // "resource-policies.form.policy-type.required": "You must select the resource policy type.", "resource-policies.form.policy-type.required": "Deve selecionar um tipo de política de recurso.", @@ -4171,10 +5251,10 @@ "resource-policies.table.headers.action": "Ação", // "resource-policies.table.headers.date.end": "End Date", - "resource-policies.table.headers.date.end": "Data de Fim", + "resource-policies.table.headers.date.end": "Data de término", // "resource-policies.table.headers.date.start": "Start Date", - "resource-policies.table.headers.date.start": "Data de Início", + "resource-policies.table.headers.date.start": "Data de início", // "resource-policies.table.headers.edit": "Edit", "resource-policies.table.headers.edit": "Editar", @@ -4201,34 +5281,34 @@ "resource-policies.table.headers.policyType": "tipo", // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", - "resource-policies.table.headers.title.for.bitstream": "Política de Ficheiros", + "resource-policies.table.headers.title.for.bitstream": "Política de ficheiros", // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", - "resource-policies.table.headers.title.for.bundle": "Políticas para Pacote", + "resource-policies.table.headers.title.for.bundle": "Políticas para pacote", // "resource-policies.table.headers.title.for.item": "Policies for Item", - "resource-policies.table.headers.title.for.item": "Políticas para Item", + "resource-policies.table.headers.title.for.item": "Políticas para item", // "resource-policies.table.headers.title.for.community": "Policies for Community", - "resource-policies.table.headers.title.for.community": "Políticas para Comunidades", + "resource-policies.table.headers.title.for.community": "Políticas para comunidade", // "resource-policies.table.headers.title.for.collection": "Policies for Collection", - "resource-policies.table.headers.title.for.collection": "Políticas para Coleção", - - - + "resource-policies.table.headers.title.for.collection": "Políticas para coleção", + // "search.description": "", "search.description": "", // "search.switch-configuration.title": "Show", "search.switch-configuration.title": "Mostrar", + + // "search.title": "Search", + "search.title": "Pesquisa", - // "search.title": "DSpace Angular :: Search", - "search.title": "DSpace :: Pesquisa", - - // "search.breadcrumbs": "Search", + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Pesquisar", + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Pesquisar no repositório...", // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Autor", @@ -4240,13 +5320,13 @@ "search.filters.applied.f.dateIssued.min": "Data inicial", // "search.filters.applied.f.dateSubmitted": "Date submitted", - "search.filters.applied.f.dateSubmitted": "Data de submissão", + "search.filters.applied.f.dateSubmitted": "Data de depósito", - // "search.filters.applied.f.discoverable": "Private", + // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Privado", - // "search.filters.applied.f.entityType": "Item Type", - "search.filters.applied.f.entityType": "Tipo de Item", + // "search.filters.applied.f.entityType": "Item type", + "search.filters.applied.f.entityType": "Tipo de item", // "search.filters.applied.f.has_content_in_original_bundle": "Has files", "search.filters.applied.f.has_content_in_original_bundle": "Tem ficheiros", @@ -4272,6 +5352,9 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Início data de nascimento", + // "search.filters.applied.f.supervisedBy": "Supervised by", + "search.filters.applied.f.supervisedBy": "Supervisionado por", + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Retirado", @@ -4281,119 +5364,182 @@ // "search.filters.filter.author.placeholder": "Author name", "search.filters.filter.author.placeholder": "Nome do autor", + // "search.filters.filter.author.label": "Search author name", + "search.filters.filter.author.label": "Pesquisar por nome", + // "search.filters.filter.birthDate.head": "Birth Date", "search.filters.filter.birthDate.head": "Data de nascimento", // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Data de nascimento", + // "search.filters.filter.birthDate.label": "Search birth date", + "search.filters.filter.birthDate.label": "Procurar data de nascimento", + + // "search.filters.filter.collapse": "Collapse filter", + "search.filters.filter.collapse": "Fechar filtro", + // "search.filters.filter.creativeDatePublished.head": "Date Published", "search.filters.filter.creativeDatePublished.head": "Data de publicação", // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", - "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", + "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", + // "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.label": "Procurar data de publicação", + // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Editor", // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + "search.filters.filter.creativeWorkEditor.label": "Procurar editor", + // "search.filters.filter.creativeWorkKeywords.head": "Subject", "search.filters.filter.creativeWorkKeywords.head": "Assunto", // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Assunto", + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + "search.filters.filter.creativeWorkKeywords.label": "Procurar assuntos", + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", "search.filters.filter.creativeWorkPublisher.head": "Editora", // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Editora", + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + "search.filters.filter.creativeWorkPublisher.label": "Procurar editora", + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Data", - // "search.filters.filter.dateIssued.max.placeholder": "Minimum Date", - "search.filters.filter.dateIssued.max.placeholder": "Data Mínima", + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + "search.filters.filter.dateIssued.max.placeholder": "Data máxima", - // "search.filters.filter.dateIssued.min.placeholder": "Maximum Date", - "search.filters.filter.dateIssued.min.placeholder": "Data Máxima", + // "search.filters.filter.dateIssued.max.label": "End", + "search.filters.filter.dateIssued.max.label": "Fim", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + "search.filters.filter.dateIssued.min.placeholder": "Data mínima", + + // "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateIssued.min.label": "Início", // "search.filters.filter.dateSubmitted.head": "Date submitted", - "search.filters.filter.dateSubmitted.head": "Data de submissão", + "search.filters.filter.dateSubmitted.head": "Data de depósito", // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", - "search.filters.filter.dateSubmitted.placeholder": "Data de submissão", + "search.filters.filter.dateSubmitted.placeholder": "Data de depósito", - // "search.filters.filter.discoverable.head": "Private", + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + "search.filters.filter.dateSubmitted.label": "Procurar data de depósito", + + // "search.filters.filter.discoverable.head": "Non-discoverable", "search.filters.filter.discoverable.head": "Privado", // "search.filters.filter.withdrawn.head": "Withdrawn", "search.filters.filter.withdrawn.head": "Retirado", // "search.filters.filter.entityType.head": "Item Type", - "search.filters.filter.entityType.head": "Tipo de Item", + "search.filters.filter.entityType.head": "Tipo de item", // "search.filters.filter.entityType.placeholder": "Item Type", - "search.filters.filter.entityType.placeholder": "Tipo de Item", + "search.filters.filter.entityType.placeholder": "Tipo de item", + + // "search.filters.filter.entityType.label": "Search item type", + "search.filters.filter.entityType.label": "Pesquisar por tipo", + + // "search.filters.filter.expand": "Expand filter", + "search.filters.filter.expand": "Expandir filtro", // "search.filters.filter.has_content_in_original_bundle.head": "Has files", - "search.filters.filter.has_content_in_original_bundle.head": "Tem Ficheiros", + "search.filters.filter.has_content_in_original_bundle.head": "Tem ficheiros", // "search.filters.filter.itemtype.head": "Type", - "search.filters.filter.itemtype.head": "Tipo", + "search.filters.filter.itemtype.head": "Tipo de item depositado", // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Tipo", + // "search.filters.filter.itemtype.label": "Search type", + "search.filters.filter.itemtype.label": "Procurar por tipo", + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Cargo", // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Cargo", + // "search.filters.filter.jobTitle.label": "Search job title", + "search.filters.filter.jobTitle.label": "Procurar cargo", + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Idioma conhecido", // "search.filters.filter.knowsLanguage.placeholder": "Known language", "search.filters.filter.knowsLanguage.placeholder": "Idioma conhecido", + // "search.filters.filter.knowsLanguage.label": "Search known language", + "search.filters.filter.knowsLanguage.label": "Procurar idiomas conhecidos", + // "search.filters.filter.namedresourcetype.head": "Status", - "search.filters.filter.namedresourcetype.head": "Estado", + "search.filters.filter.namedresourcetype.head": "Estado do depósito", // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Estado", + // "search.filters.filter.namedresourcetype.label": "Search status", + "search.filters.filter.namedresourcetype.label": "Pesquisa por estado", + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Pessoas", - + // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Pessoas", + // "search.filters.filter.objectpeople.label": "Search people", + "search.filters.filter.objectpeople.label": "Procurar pessoas", + // "search.filters.filter.organizationAddressCountry.head": "Country", "search.filters.filter.organizationAddressCountry.head": "País", // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "País", + // "search.filters.filter.organizationAddressCountry.label": "Search country", + "search.filters.filter.organizationAddressCountry.label": "Procurar país", + // "search.filters.filter.organizationAddressLocality.head": "City", "search.filters.filter.organizationAddressLocality.head": "Cidade", // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Cidade", + // "search.filters.filter.organizationAddressLocality.label": "Search city", + "search.filters.filter.organizationAddressLocality.label": "Procurar cidade", + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", - "search.filters.filter.organizationFoundingDate.head": "Data de Fundação", + "search.filters.filter.organizationFoundingDate.head": "Data de fundação", // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", - "search.filters.filter.organizationFoundingDate.placeholder": "Data de Fundação", + "search.filters.filter.organizationFoundingDate.placeholder": "Data de fundação", + + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + "search.filters.filter.organizationFoundingDate.label": "Procurar data de fundação", // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Âmbito", // "search.filters.filter.scope.placeholder": "Scope filter", - "search.filters.filter.scope.placeholder": "Filtrar Ãmbito", + "search.filters.filter.scope.placeholder": "Filtrar âmbito", + + // "search.filters.filter.scope.label": "Search scope filter", + "search.filters.filter.scope.label": "Filtro âmbito da pesquisa", // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Mostrar menos", @@ -4406,6 +5552,9 @@ // "search.filters.filter.subject.placeholder": "Subject", "search.filters.filter.subject.placeholder": "Assunto", + + // "search.filters.filter.subject.label": "Search subject", + "search.filters.filter.subject.label": "Pesquisar por assunto", // "search.filters.filter.submitter.head": "Submitter", "search.filters.filter.submitter.head": "Depositante", @@ -4413,13 +5562,26 @@ // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Depositante", - + // "search.filters.filter.submitter.label": "Search submitter", + "search.filters.filter.submitter.label": "Procurar depositante", + + // "search.filters.filter.show-tree": "browse {{ name }} tree", + "search.filters.filter.show-tree": "Percorrer por hierarquia de {{ name }}", + + // "search.filters.filter.supervisedBy.head": "Supervised By", + "search.filters.filter.supervisedBy.head": "Supervisionado por", + + // "search.filters.filter.supervisedBy.placeholder": "Supervised By", + "search.filters.filter.supervisedBy.placeholder": "Supervisionado por", + + // "search.filters.filter.supervisedBy.label": "search Supervised By", + "search.filters.filter.supervisedBy.label": "pesquisar supervisionado por", // "search.filters.entityType.JournalIssue": "Journal Issue", - "search.filters.entityType.JournalIssue": "Número de Revista", + "search.filters.entityType.JournalIssue": "Número de revista", // "search.filters.entityType.JournalVolume": "Journal Volume", - "search.filters.entityType.JournalVolume": "Volume de Revista", + "search.filters.entityType.JournalVolume": "Volume de revista", // "search.filters.entityType.OrgUnit": "Organizational Unit", "search.filters.entityType.OrgUnit": "Organização", @@ -4442,28 +5604,26 @@ // "search.filters.withdrawn.false": "No", "search.filters.withdrawn.false": "Não", - // "search.filters.head": "Filters", "search.filters.head": "Filtros", // "search.filters.reset": "Reset filters", "search.filters.reset": "Limpar filtros", - - + // "search.filters.search.submit": "Submit", + "search.filters.search.submit": "Enviar", + // "search.form.search": "Search", "search.form.search": "Pesquisar", - // "search.form.search_dspace": "Search DSpace", - "search.form.search_dspace": "Pesquisar", - - // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Pesquisar na Área Pessoal", - - + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Pesquisar tudo", + // "search.form.scope.all": "All of DSpace", + "search.form.scope.all": "Pesquisar tudo", + // "search.results.head": "Search Results", - "search.results.head": "Resultados de Busca", + "search.results.head": "Resultados da pesquisa", // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", "search.results.no-results": "Sua pesquisa não retornou resultados. Tem dificuldade em encontrar o que procura? Tente incluir ", @@ -4474,7 +5634,17 @@ // "search.results.empty": "Your search returned no results.", "search.results.empty": "A sua pesquisa não retornou resultados.", + // "search.results.view-result": "View", + "search.results.view-result": "Ver", + // "search.results.response.500": "An error occurred during query execution, please try again later", + "search.results.response.500": "Ocorreu um erro durante a execução da consulta, por favor tente novamente mais tarde", + + // "default.search.results.head": "Search Results", + "default.search.results.head": "Resultados da pesquisa", + + // "default-relationships.search.results.head": "Search Results", + "default-relationships.search.results.head": "Resultados da pesquisa", // "search.sidebar.close": "Back to results", "search.sidebar.close": "Voltar para os resultados", @@ -4497,8 +5667,6 @@ // "search.sidebar.settings.title": "Settings", "search.sidebar.settings.title": "Configurações", - - // "search.view-switch.show-detail": "Show detail", "search.view-switch.show-detail": "Mostrar detalhes", @@ -4508,8 +5676,6 @@ // "search.view-switch.show-list": "Show as list", "search.view-switch.show-list": "Mostrar como lista", - - // "sorting.ASC": "Ascending", "sorting.ASC": "Ascendente", @@ -4517,22 +5683,41 @@ "sorting.DESC": "Descendente", // "sorting.dc.title.ASC": "Title Ascending", - "sorting.dc.title.ASC": "Título Ascendente", + "sorting.dc.title.ASC": "Título ascendente", // "sorting.dc.title.DESC": "Title Descending", - "sorting.dc.title.DESC": "Título Descendente", + "sorting.dc.title.DESC": "Título descendente", - // "sorting.score.DESC": "Relevance", - "sorting.score.DESC": "Relevância", + // "sorting.score.ASC": "Least Relevant", + "sorting.score.ASC": "Menos relevante", + // "sorting.score.DESC": "Most Relevant", + "sorting.score.DESC": "Mais relevante", + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + "sorting.dc.date.issued.ASC": "Data de publicação ascendente", + + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + "sorting.dc.date.issued.DESC": "Data de publicação descendente", + + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + "sorting.dc.date.accessioned.ASC": "Data de disponibilização ascendente", + + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", + // "sorting.lastModified.ASC": "Last modified Ascending", + "sorting.lastModified.ASC": "Última modificação ascendente", + + // "sorting.lastModified.DESC": "Last modified Descending", + "sorting.lastModified.DESC": "Última modificação descendente", + // "statistics.title": "Statistics", "statistics.title": "Estatísticas", - - // "statistics.header": "Statistics for {{ scope }}", + + // "statistics.header": "Statistics for {{ scope }}", "statistics.header": "Estatísticas para {{ scope }}", - + // "statistics.breadcrumbs": "Statistics", "statistics.breadcrumbs": "Estatísticas", @@ -4543,30 +5728,34 @@ "statistics.table.no-data": "Sem dados disponíveis", // "statistics.table.title.TotalVisits": "Total visits", - "statistics.table.title.TotalVisits": "Total de Visitas", + "statistics.table.title.TotalVisits": "Total de visitas", // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", - "statistics.table.title.TotalVisitsPerMonth": "Total de Visitas por Mês", + "statistics.table.title.TotalVisitsPerMonth": "Total de visitas por mês", // "statistics.table.title.TotalDownloads": "File Visits", "statistics.table.title.TotalDownloads": "Downloads", // "statistics.table.title.TopCountries": "Top country views", - "statistics.table.title.TopCountries": "Top de Consultas por País", + "statistics.table.title.TopCountries": "Top de consultas por país", // "statistics.table.title.TopCities": "Top city views", - "statistics.table.title.TopCities": "Top de Consultas por Cidade", + "statistics.table.title.TopCities": "Top de consultas por cidade", // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", - - + + // "submission.edit.breadcrumbs": "Edit Submission", + "submission.edit.breadcrumbs": "Editar depósito", // "submission.edit.title": "Edit Submission", - "submission.edit.title": "Editar Submissão", + "submission.edit.title": "Editar depósito", + + // "submission.general.cancel": "Cancel", + "submission.general.cancel": "Cancelar", // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", - "submission.general.cannot_submit": "Você não tem privilégios para fazer uma nova submissão.", + "submission.general.cannot_submit": "Você não tem privilégios para fazer um novo depósito.", // "submission.general.deposit": "Deposit", "submission.general.deposit": "Depositar", @@ -4581,23 +5770,52 @@ "submission.general.discard.confirm.submit": "Sim, tenho certeza", // "submission.general.discard.confirm.title": "Discard submission", - "submission.general.discard.confirm.title": "Cancelar submissão", + "submission.general.discard.confirm.title": "Cancelar depósito", // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Cancelar", + // "submission.general.info.saved": "Saved", + "submission.general.info.saved": "Informação guardada", + + // "submission.general.info.pending-changes": "Unsaved changes", + "submission.general.info.pending-changes": "Alterações não guardadas", + // "submission.general.save": "Save", "submission.general.save": "Guardar", // "submission.general.save-later": "Save for later", - "submission.general.save-later": "Guardar para continuar depois", - + "submission.general.save-later": "Guardar e fechar", // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importar metadados de uma fonte externa", // "submission.import-external.title": "Import metadata from an external source", "submission.import-external.title": "Importar metadados de uma fonte externa", + + // "submission.import-external.title.Journal": "Import a journal from an external source", + "submission.import-external.title.Journal": "Importar revista de uma fonte externa", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + "submission.import-external.title.JournalIssue": "Importar o número de um revista de um fonte externa", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importar o volume de uma revista de fonte externa", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + "submission.import-external.title.OrgUnit": "Importar editora de uma fonte externa", + + // "submission.import-external.title.Person": "Import a person from an external source", + "submission.import-external.title.Person": "Importar pessoa de uma fonte externa", + + // "submission.import-external.title.Project": "Import a project from an external source", + "submission.import-external.title.Project": "Importar projeto de uma fonte externa", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importar uma publicação de uma fonte externa", + + // "submission.import-external.title.none": "Import metadata from an external source", + "submission.import-external.title.none": "Importar metadados de uma fonte externa", // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", "submission.import-external.page.hint": "Pesquise itens abaixo disponíveis na internet para que sejam importados para o repositório.", @@ -4620,35 +5838,92 @@ // "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.arxiv": "arXiv", + // "submission.import-external.source.ads": "NASA/ADS", + "submission.import-external.source.ads": "NASA/ADS", + + // "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.cinii": "CiNii", + + // "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.crossref": "CrossRef", + + // "submission.import-external.source.datacite": "DataCite", + "submission.import-external.source.datacite": "DataCite", + + // "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scielo": "SciELO", + + // "submission.import-external.source.scopus": "Scopus", + "submission.import-external.source.scopus": "Scopus", + + // "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.vufind": "VuFind", + + // "submission.import-external.source.wos": "Web of Science", + "submission.import-external.source.wos": "Web of Science", + + // "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + + // "submission.import-external.source.epo": "European Patent Office (EPO)", + "submission.import-external.source.epo": "European Patent Office (EPO)", + // "submission.import-external.source.loading": "Loading ...", - "submission.import-external.source.loading": "A Carregar ...", + "submission.import-external.source.loading": "A carregar ...", // "submission.import-external.source.sherpaJournal": "SHERPA Journals", - "submission.import-external.source.sherpaJournal": "Revistas do SHERPA", + "submission.import-external.source.sherpaJournal": "Revistas Sherpa Romeo por nome", + + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + "submission.import-external.source.sherpaJournalIssn": "Revistas Sherpa Romeo por ISSN", // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", - "submission.import-external.source.sherpaPublisher": "Editores do SHERPA", + "submission.import-external.source.sherpaPublisher": "Editoras Sherpa Romeo", + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.openAIREFunding": "Financiamento via API OpenAIRE", + // "submission.import-external.source.orcid": "ORCID", "submission.import-external.source.orcid": "ORCID", - // "submission.import-external.source.pubmed": "Pubmed", - "submission.import-external.source.pubmed": "Pubmed", + // "submission.import-external.source.pubmed": "PubMed", + "submission.import-external.source.pubmed": "PubMed", + + // "submission.import-external.source.pubmedeu": "PubMed Europe", + "submission.import-external.source.pubmedeu": "PubMed Europa", // "submission.import-external.source.lcname": "Library of Congress Names", "submission.import-external.source.lcname": "Nomes da Library of Congress", // "submission.import-external.preview.title": "Item Preview", - "submission.import-external.preview.title": "Prévisualização do Item", + "submission.import-external.preview.title": "Pré-visualização do item", + // "submission.import-external.preview.title.Publication": "Publication Preview", + "submission.import-external.preview.title.Publication": "Pré-visualização da publicação", + + // "submission.import-external.preview.title.none": "Item Preview", + "submission.import-external.preview.title.none": "Pré-visualização do Item", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + "submission.import-external.preview.title.Journal": "Pré-visualização da revista", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + "submission.import-external.preview.title.OrgUnit": "Pré-visualização da organização", + + // "submission.import-external.preview.title.Person": "Person Preview", + "submission.import-external.preview.title.Person": "Pré-visualização dos dados pessoais a importar", + + // "submission.import-external.preview.title.Project": "Project Preview", + "submission.import-external.preview.title.Project": "Pré-visualização do dados do projeto a importar", + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", - "submission.import-external.preview.subtitle": "Os metadados abaixo foram importados de uma fonte externa. Serão pré-preenchidos quando iniciar a submissão.", + "submission.import-external.preview.subtitle": "Os seguintes metadados foram importados de uma fonte externa. Serão pré-preenchidos quando iniciar o depósito.", // "submission.import-external.preview.button.import": "Start submission", - "submission.import-external.preview.button.import": "Iniciar submissão", + "submission.import-external.preview.button.import": "Iniciar depósito", // "submission.import-external.preview.error.import.title": "Submission error", - "submission.import-external.preview.error.import.title": "Erro na submissão", + "submission.import-external.preview.error.import.title": "Erro no depósito", // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", "submission.import-external.preview.error.import.body": "Ocorreu um erro durante o processo de importação de metadados de uma fonte externa.", @@ -4658,21 +5933,63 @@ // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", "submission.sections.describe.relationship-lookup.external-source.added": "Adicionada com sucesso uma entrada local à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", - - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar Informação Remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar Número de revista remoto", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar número de revista remoto", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar Volume de revista remoto", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar volume de revista remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projeto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Importar item remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Import remote event", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importar evento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Import remote product", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importar produto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Import remote equipment", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importar equipamento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Import remote organizational unit", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importar organização remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Import remote fund", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importar financiamento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Import remote project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importar projeto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importar publicação remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova entidade adicionada!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar Autor remoto", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar autor remoto", // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Adicionado com sucesso um autor local à seleção", @@ -4688,10 +6005,9 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancelar", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", - - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Seleccione a coleção para onde pretende importar as novas entradas", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Selecione a coleção para onde pretende importar as novas entradas", // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entidades", @@ -4700,40 +6016,40 @@ "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importar como nova entidade local", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "A Importar de LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "A importar de LC Name", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "A Importar do ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "A importar do ORCID", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "A Importar Revista do Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "A importar Revista do Sherpa", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "A Importar Editora do Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "A importar Editora do Sherpa", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "A Importar da PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "A importar da PubMed", // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "A Importar do arXiv", - + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "A importar do arXiv", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importar", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar Revista Remota", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar revista Remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Revista local adicionada com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importado e adicionada com sucesso uma revista externa à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importada e adicionada com sucesso uma revista externa à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importar número de revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Número de Revista Local adicionado com sucesso à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Número de revista Local adicionado com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Importado e adicionado um Número de Revista externa com sucesso à seleção", @@ -4742,22 +6058,22 @@ "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importar volume de revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Volume de Revista Local adicionado com sucesso à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Volume de revista Local adicionado com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importado e adicionado um volume de Revista externa com sucesso à seleção", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importado e adicionado um volume de revista externa com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Seleccione uma correspondência local:", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Selecione uma correspondência local:", // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deseleccionar todos", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselecionar todos", // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deseleccionar página", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselecionar página", // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", - "submission.sections.describe.relationship-lookup.search-tab.loading": "A Carregar...", + "submission.sections.describe.relationship-lookup.search-tab.loading": "A carregar...", // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Termos da pesquisa", @@ -4765,6 +6081,9 @@ // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Pesquisar", + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Selecionar todos", @@ -4775,43 +6094,43 @@ "submission.sections.describe.relationship-lookup.selected": "Selecionados {{ size }} itens", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projetos Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projetos locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicações Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicações locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades Organizacionais Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades organizacionais locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacotes de Dados Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacotes de dados locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Ficheiros de Dados Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Ficheiros de dados locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas Locais ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de Revista Local ({{ count }})", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de revistas locais ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de Revista Local ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de revista locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volumes de Revista Local ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volumes de revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volume de revista Local ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volumes de revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas do Sherpa ({{ count }})", @@ -4823,7 +6142,7 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", @@ -4832,28 +6151,55 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Search for Funding Agencies", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar Agências de Financiamento", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por agências de financiamento", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Pesquisar Financiamento", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por financiamento", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Pesquisar Unidades Organizacionais", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Pesquisar por unidades organizacionais", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Via API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projetos", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador do projeto", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publicação do author", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamento API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projetos", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador do projeto", + + //"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Seleção Atual ({{ count }})", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Seleção atual ({{ count }})", // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Números de Revista", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Números de revista", // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", - "submission.sections.describe.relationship-lookup.title.JournalIssue": "Números de Revista", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Pesquisar números de revista", // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volumes de Revistas", // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", - "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volumes de Revistas", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volumes de revistas", // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Revistas", @@ -4862,35 +6208,38 @@ "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autores", // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agência de Financiamento", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agência de financiamento", // "submission.sections.describe.relationship-lookup.title.Project": "Projects", - "submission.sections.describe.relationship-lookup.title.Project": "Projetos", + "submission.sections.describe.relationship-lookup.title.Project": "Pesquisar projetos", // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", "submission.sections.describe.relationship-lookup.title.Publication": "Publicações", // "submission.sections.describe.relationship-lookup.title.Person": "Authors", - "submission.sections.describe.relationship-lookup.title.Person": "Autores", + "submission.sections.describe.relationship-lookup.title.Person": "Pesquisar autores", // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", - "submission.sections.describe.relationship-lookup.title.OrgUnit": "Unidades Organizacionais", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Pesquisar unidades organizacionais", // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", - "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacote de Dados", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacote de dados", // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", - "submission.sections.describe.relationship-lookup.title.DataFile": "Ficheiros de Dados", + "submission.sections.describe.relationship-lookup.title.DataFile": "Ficheiros de dados", // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", - "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agência de Financiamento", + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agência de financiamento", // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Financiamento", // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organização Principal", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organização principal", + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publicação", + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Alternar menu dropdown", @@ -4901,25 +6250,25 @@ "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Não selecionou nenhum item.", // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Authors", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autores Selecionados", - + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autores selecionados", + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas Selecionadas", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume de Revista Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume de revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Projetos Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Projetos selecionados", // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicações Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicações selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores Selecionados", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores selecionados", // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades Organizacionais Selecionadas", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades organizacionais selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Pacotes de dados selecionados", @@ -4928,64 +6277,82 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Ficheiros de dados selecionados", // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas Selecionadas", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número Selecionado", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume de Revista Selecionado", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume de revista selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agência de Financiamento selecionada", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agência de financiamento selecionada", // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamento selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número Selecionado", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Organização Selecionada", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Organização selecionada", // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados da Pesquisa", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Resultados da pesquisa", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuras submissões? Se não, pode usar apenas nesta submissão.", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuros depósitos? Se não, pode usar apenas neste depósito.", // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar um Nome alternativo", // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Usar apenas para esta submissão", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Usar apenas para este depósito", // "submission.sections.ccLicense.type": "License Type", "submission.sections.ccLicense.type": "Tipo de licença", // "submission.sections.ccLicense.select": "Select a license type…", - "submission.sections.ccLicense.select": "Selecionar o tipo de licença…", + "submission.sections.ccLicense.select": "Selecionar tipo de licença…", // "submission.sections.ccLicense.change": "Change your license type…", - "submission.sections.ccLicense.change": "Alterar o tipo de licença…", + "submission.sections.ccLicense.change": "Alterar tipo de licença…", // "submission.sections.ccLicense.none": "No licenses available", "submission.sections.ccLicense.none": "Sem licenças disponíveis", @@ -4997,54 +6364,76 @@ "submission.sections.ccLicense.link": "Escolheu a seguinte licença:", // "submission.sections.ccLicense.confirmation": "I grant the license above", - "submission.sections.ccLicense.confirmation": "Consedo a licença abaixo indicada", + "submission.sections.ccLicense.confirmation": "Concedo a licença abaixo indicada", // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Adicionar mais", + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + "submission.sections.general.cannot_deposit": "O depósito não pode ser preenchido devido a erros no formulário.
    Por favor preencha todos os campos necessários para completar o depósito.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Coleção", // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", - "submission.sections.general.deposit_error_notice": "Houve um problema durante a submissão do item, por favor tente novamente mais tarde.", + "submission.sections.general.deposit_error_notice": "Houve um problema durante o depósito do item, por favor tente novamente mais tarde.", // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", - "submission.sections.general.deposit_success_notice": "Submissão depositada com sucesso.", + "submission.sections.general.deposit_success_notice": "Depositado com sucesso.", // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", - "submission.sections.general.discard_error_notice": "Houve um problema ao descartar o item, por favor tente novamente mais tarde.", + "submission.sections.general.discard_error_notice": "Houve um problema ao cancelar o item, por favor tente novamente mais tarde.", // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", - "submission.sections.general.discard_success_notice": "Submissão descartada com sucesso.", + "submission.sections.general.discard_success_notice": "Depósito cancelado com sucesso.", // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", - "submission.sections.general.metadata-extracted": "Novos metadados foram extraídos e adicionados a Secção {{sectionId}}.", + "submission.sections.general.metadata-extracted": "Novos metadados foram extraídos e adicionados à secção {{sectionId}}.", // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", "submission.sections.general.metadata-extracted-new-section": "Nova Secção {{sectionId}} foi adicionada a dubmissão.", // "submission.sections.general.no-collection": "No collection found", - "submission.sections.general.no-collection": "Nenhuma coleção encontrada", + "submission.sections.general.no-collection": "Não foi encontrada nenhuma coleção", // "submission.sections.general.no-sections": "No options available", "submission.sections.general.no-sections": "Sem opções disponíveis", // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", - "submission.sections.general.save_error_notice": "Houve um problema ao salvar o item, por favor tente novamente mais tarde.", + "submission.sections.general.save_error_notice": "Houve um problema ao guardar o item, por favor tente novamente mais tarde.", // "submission.sections.general.save_success_notice": "Submission saved successfully.", - "submission.sections.general.save_success_notice": "Submissão salva com sucesso.", + "submission.sections.general.save_success_notice": "Depósito guardado com sucesso.", // "submission.sections.general.search-collection": "Search for a collection", "submission.sections.general.search-collection": "Pesquisar uma coleção", // "submission.sections.general.sections_not_valid": "There are incomplete sections.", - "submission.sections.general.sections_not_valid": "Há seções incompletas.", + "submission.sections.general.sections_not_valid": "Subsistem seções incompletas.", + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + "submission.sections.identifiers.info": "Serão criados os seguintes identificadores para o seu item:", + + // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + "submission.sections.identifiers.no_handle": "Não foram gerados 'handles' para este item.", + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + "submission.sections.identifiers.no_doi": "Não foram gerados DOIs para este item.", + + // "submission.sections.identifiers.handle_label": "Handle: ", + "submission.sections.identifiers.handle_label": "Handle: ", + + // "submission.sections.identifiers.doi_label": "DOI: ", + "submission.sections.identifiers.doi_label": "DOI: ", + + // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", + "submission.sections.identifiers.otherIdentifiers_label": "Outros identificadores: ", + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + "submission.sections.submit.progressbar.accessCondition": "Condições de acesso do item", + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", - "submission.sections.submit.progressbar.CClicense": "Licença Creative commons", + "submission.sections.submit.progressbar.CClicense": "Associar uma licença Creative Commons", // "submission.sections.submit.progressbar.describe.recycle": "Recycle", "submission.sections.submit.progressbar.describe.recycle": "Reciclar", @@ -5061,14 +6450,60 @@ // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Duplicados em potencial", + // "submission.sections.submit.progressbar.identifiers": "Identifiers", + "submission.sections.submit.progressbar.identifiers": "Identificadores", + // "submission.sections.submit.progressbar.license": "Deposit license", - "submission.sections.submit.progressbar.license": "Depositar licença", + "submission.sections.submit.progressbar.license": "Licença de distribuição não-exclusiva do repositório", + + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + "submission.sections.submit.progressbar.sherpapolicy": "[Ajuda em contexto] Informação SHERPA sobre políticas de editoras e revistas face ao auto-arquivo em repositórios.", // "submission.sections.submit.progressbar.upload": "Upload files", - "submission.sections.submit.progressbar.upload": "Enviar ficheiros", + "submission.sections.submit.progressbar.upload": "Carregar ficheiro(s)", + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + "submission.sections.submit.progressbar.sherpaPolicies": "Informação sobre a política de auto arquivo dos editores", + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + "submission.sections.sherpa-policy.title-empty": "Não foi encontrada informação disponível sobre política desta editora. Se o seu trabalho tem um ISSN associado, por favor, introduza-o em cima para poder visualizar as políticas de auto arquivo associadas.", + // "submission.sections.status.errors.title": "Errors", + "submission.sections.status.errors.title": "Erros", + + // "submission.sections.status.valid.title": "Valid", + "submission.sections.status.valid.title": "Válido", + + // "submission.sections.status.warnings.title": "Warnings", + "submission.sections.status.warnings.title": "Avisos", + + // "submission.sections.status.errors.aria": "has errors", + "submission.sections.status.errors.aria": "contém erros", + + // "submission.sections.status.valid.aria": "is valid", + "submission.sections.status.valid.aria": "é válido", + + // "submission.sections.status.warnings.aria": "has warnings", + "submission.sections.status.warnings.aria": "tem avisos", + + // "submission.sections.status.info.title": "Additional Information", + "submission.sections.status.info.title": "Informação adicional", + + // "submission.sections.status.info.aria": "Additional Information", + "submission.sections.status.info.aria": "Informação adicional", + + // "submission.sections.toggle.open": "Open section", + "submission.sections.toggle.open": "Seção aberta", + + // "submission.sections.toggle.close": "Close section", + "submission.sections.toggle.close": "Seção fechada", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + "submission.sections.toggle.aria.open": "Expandir seção {{sectionHeader}}", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + "submission.sections.toggle.aria.close": "Fechar seção {{sectionHeader}}", + // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Cancelar", @@ -5077,25 +6512,43 @@ // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", "submission.sections.upload.delete.confirm.submit": "Sim, tenho certeza", - + // "submission.sections.upload.delete.confirm.title": "Delete bitstream", - "submission.sections.upload.delete.confirm.title": "Remover bitstream", + "submission.sections.upload.delete.confirm.title": "Remover ficheiro", // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Remover", + // "submission.sections.upload.download.title": "Download bitstream", + "submission.sections.upload.download.title": "Descarregar ficheiro", + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", - "submission.sections.upload.drop-message": "Arraste ficheiros para os anexar a este item", + "submission.sections.upload.drop-message": "Arraste para aqui o(s) ficheiro(s) que pretende anexar a este registo", + + // "submission.sections.upload.edit.title": "Edit bitstream", + "submission.sections.upload.edit.title": "Editar ficheiro", // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Tipo de condição de acesso", + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + "submission.sections.upload.form.access-condition-hint": "Selecione um tipo de acesso a aplicar ao ficheiro assim que o item seja depositado", + // "submission.sections.upload.form.date-required": "Date is required.", - "submission.sections.upload.form.date-required": "Data necessária.", + "submission.sections.upload.form.date-required": "Data necessária.", + + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + "submission.sections.upload.form.date-required-from": "A data de início é obrigatória.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "A data de fim é obrigatória.", // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Acesso permitido a partir de", + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.upload.form.from-hint": "Selecione a data a partir da qual o tipo de acesso é aplicável", + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "De", @@ -5106,25 +6559,28 @@ "submission.sections.upload.form.group-required": "Grupo é necessário.", // "submission.sections.upload.form.until-label": "Grant access until", - "submission.sections.upload.form.until-label": "Acesso permitido até", + "submission.sections.upload.form.until-label": "conceder acesso até", + + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.upload.form.until-hint": "Selecione a data até a qual o tipo de acesso será aplicado", // "submission.sections.upload.form.until-placeholder": "Until", - "submission.sections.upload.form.until-placeholder": "Até", - + "submission.sections.upload.form.until-placeholder": "Até", + // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", "submission.sections.upload.header.policy.default.nolist": "Arquivos enviados na coleção {{collectionName}} serão acessiveis de acordo com o(s) seguinte(s) grupo(s):", // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Por favor note que os ficheiros enviados à coleção {{collectionName}} serão acessíveis, de acordo com o que está explicitamente definido no ficheiro, no(s) seguinte(s) grupo(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", - "submission.sections.upload.info": "Aqui encontra todos os ficheiros que estão atualmente no item. Pode atualizar os metadados do ficheiro e condições de acesso ou carregar ficheiros adicionais arrastando os ficheiros em qualquer lugar desta página", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", + "submission.sections.upload.info": "Aqui encontra o(s) ficheiro(s) carregado(s) neste registo. Pode atualizar os metadados do(s) ficheiro(s), definir as suas condições de acesso ou carregar ficheiros adicionais arrastando-os em qualquer local da página.", // "submission.sections.upload.no-entry": "No", "submission.sections.upload.no-entry": "Não", // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", - "submission.sections.upload.no-file-uploaded": "Nenhum ficheiro enviado ainda.", + "submission.sections.upload.no-file-uploaded": "Nenhum ficheiro carregado!", // "submission.sections.upload.save-metadata": "Save metadata", "submission.sections.upload.save-metadata": "Guardar metadados", @@ -5138,47 +6594,194 @@ // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Enviado com sucesso", + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", + "submission.sections.accesses.form.discoverable-description": "Quando selecionado, este item será pesquisável na pesquisa/navegação. Se não estiver selecionado, o item apenas estará disponível através uma ligação direta (link) e não aparecerá na pesquisa/navegação.", + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + "submission.sections.accesses.form.discoverable-label": "Recuperável", - // "submission.submit.title": "Submission", - "submission.submit.title": "Submissão", + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + "submission.sections.accesses.form.access-condition-label": "Tipo de acesso", + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + "submission.sections.accesses.form.access-condition-hint": "Selecione um tipo de acesso para aplicar ao item no momento do seu depósito ", + // "submission.sections.accesses.form.date-required": "Date is required.", + "submission.sections.accesses.form.date-required": "O preenchimento da data é obrigatório.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + "submission.sections.accesses.form.date-required-from": "O preenchimento da data de início é obrigatório.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + "submission.sections.accesses.form.date-required-until": "O preenchimento da data de término é obrigatório.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + "submission.sections.accesses.form.from-label": "Conceder acesso a partir de", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.accesses.form.from-hint": "Selecine a data a partir da qual o tipo de acesso é aplicável", + + // "submission.sections.accesses.form.from-placeholder": "From", + "submission.sections.accesses.form.from-placeholder": "De", + + // "submission.sections.accesses.form.group-label": "Group", + "submission.sections.accesses.form.group-label": "Grupo", + + // "submission.sections.accesses.form.group-required": "Group is required.", + "submission.sections.accesses.form.group-required": "A indicação de um grupo é obrigátória.", + // "submission.sections.accesses.form.until-label": "Grant access until", + "submission.sections.accesses.form.until-label": "Conceder acesso até", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.accesses.form.until-hint": "Selecione a data até a qual o tipo de acesso é aplicável", + + // "submission.sections.accesses.form.until-placeholder": "Until", + "submission.sections.accesses.form.until-placeholder": "Até", + + // "submission.sections.license.granted-label": "I confirm the license above", + "submission.sections.license.granted-label": "Confirmo a licença", + + // "submission.sections.license.required": "You must accept the license", + "submission.sections.license.required": "A aceitação da licença constitui um requisito", + + // "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "Deve aceitar a licença", + + // "submission.sections.sherpa.publication.information": "Publication information", + "submission.sections.sherpa.publication.information": "Informação sobre a publicação", + + // "submission.sections.sherpa.publication.information.title": "Title", + "submission.sections.sherpa.publication.information.title": "Título", + + // "submission.sections.sherpa.publication.information.issns": "ISSNs", + "submission.sections.sherpa.publication.information.issns": "ISSNs", + + // "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.url": "URL", + + // "submission.sections.sherpa.publication.information.publishers": "Publisher", + "submission.sections.sherpa.publication.information.publishers": "Editora", + + // "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + + // "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + + // "submission.sections.sherpa.publisher.policy": "Publisher Policy", + "submission.sections.sherpa.publisher.policy": "Política da editora", + + // "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + "submission.sections.sherpa.publisher.policy.description": "A seguinte informação foi obtida através do diretório SHERPA, com base nas políticas disponíveis das editoras/revistas. Fornece informações úteis, sobre as versões dos ficheiros que deverá carregar em repositórios, bem como tipo de embargo ou restrições de acesso poderá ser aconselhável. As informações do SHERPA são fidedignas tanto quanto é do nosso conhecimento, mas não devem ser assumidas como aconselhamento jurídico. Se tiver dúvidas, por favor contacte o(s) administrador(es) do seu repositório através do formulário de feedback no rodapé.", + + // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + "submission.sections.sherpa.publisher.policy.openaccess": "As 'vias' de acesso aberto permitidas pela política desta revista estão listadas em baixo, tendo em consideração as versões do artigo (ex. 'Versão final publicada', 'Versão aceite do autor', 'Versão submetida'). Clique numa via para obter mais detalhes.", + + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + "submission.sections.sherpa.publisher.policy.more.information": "Para mais informações, consulte por favor os seguintes links:", + + // "submission.sections.sherpa.publisher.policy.version": "Version", + "submission.sections.sherpa.publisher.policy.version": "Versão", + + // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + "submission.sections.sherpa.publisher.policy.noembargo": "Sem embargo", + + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + "submission.sections.sherpa.publisher.policy.nolocation": "Nenhuma", + + // "submission.sections.sherpa.publisher.policy.license": "License", + "submission.sections.sherpa.publisher.policy.license": "Licença", + + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + "submission.sections.sherpa.publisher.policy.prerequisites": "Pré-requisitos", + + // "submission.sections.sherpa.publisher.policy.location": "Location", + "submission.sections.sherpa.publisher.policy.location": "Localização", + + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + "submission.sections.sherpa.publisher.policy.conditions": "Condições", + + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + "submission.sections.sherpa.publisher.policy.refresh": "Atualizar", + + // "submission.sections.sherpa.record.information": "Record Information", + "submission.sections.sherpa.record.information": "Informação do registo", + + // "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.id": "ID", + + // "submission.sections.sherpa.record.information.date.created": "Date Created", + "submission.sections.sherpa.record.information.date.created": "Data de Criação", + + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + "submission.sections.sherpa.record.information.date.modified": "Última modificação", + + // "submission.sections.sherpa.record.information.uri": "URI", + "submission.sections.sherpa.record.information.uri": "URI", + + // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + "submission.sections.sherpa.error.message": "Ocorreu um erro na recuperação de informações do SHERPA", + + // "submission.submit.breadcrumbs": "New submission", + "submission.submit.breadcrumbs": "Novos depósitos", + + // "submission.submit.title": "New submission", + "submission.submit.title": "Novo depósito", + // "submission.workflow.generic.delete": "Delete", - "submission.workflow.generic.delete": "Apagar", + "submission.workflow.generic.delete": "Remover", - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", - "submission.workflow.generic.delete-help": "Se você gostaria de descartar este item, selecione \"Apagar\". Você será questionado para confirmar.", + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Clique se pretender remover definitivamente este item. Será solicitada confirmação.", // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", - "submission.workflow.generic.edit-help": "Selecione esta opção para modificar os metadados do item.", + "submission.workflow.generic.edit-help": "Selecione esta opção para modificar os metadados do item", // "submission.workflow.generic.view": "View", "submission.workflow.generic.view": "Visualizar", // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.view-help": "Selecione esta opção para ver o metadados do item.", + "submission.workflow.generic.view-help": "Visualizar os metadados do item", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + "submission.workflow.generic.submit_select_reviewer": "Selecionar revisor", - - // "submission.workflow.tasks.claimed.approve": "Approve", + // "submission.workflow.generic.submit_select_reviewer-help": "", + "submission.workflow.generic.submit_select_reviewer-help": "", + + // "submission.workflow.generic.submit_score": "Rate", + "submission.workflow.generic.submit_score": "Classificar", + + // "submission.workflow.generic.submit_score-help": "", + "submission.workflow.generic.submit_score-help": "", + + // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Aprovar", // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", - "submission.workflow.tasks.claimed.approve_help": "Se você revisou o item e este está adequado para inclusão na coleção, selecione \"Aprovar\".", + "submission.workflow.tasks.claimed.approve_help": "Se reviu o item e está adequado para inclusão na coleção, selecione \"Aprovar\".", // "submission.workflow.tasks.claimed.edit": "Edit", "submission.workflow.tasks.claimed.edit": "Editar", - + // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Selecione esta opção para modificar os metadados do item.", + // "submission.workflow.tasks.claimed.decline": "Decline", + "submission.workflow.tasks.claimed.decline": "Declinar", + + // "submission.workflow.tasks.claimed.decline_help": "", + "submission.workflow.tasks.claimed.decline_help": "", + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", - "submission.workflow.tasks.claimed.reject.reason.info": "Informe o motivo da rejeição da submissão na caixa abaixo, indicando se o depositante pode corrigir algum problema e reenviar.", + "submission.workflow.tasks.claimed.reject.reason.info": "Informe o motivo da rejeição do depósito em baixo, indicando se o depositante pode corrigir algum problema e reenviar o depósito.", // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", "submission.workflow.tasks.claimed.reject.reason.placeholder": "Descreva o motivo da rejeição", @@ -5201,27 +6804,23 @@ // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", "submission.workflow.tasks.claimed.return_help": "Enviar a tarefa para a lista para que outra pessoa possa executar.", - - // "submission.workflow.tasks.generic.error": "Error occurred during operation...", - "submission.workflow.tasks.generic.error": "Ocorreu um erro durante a operação...", + "submission.workflow.tasks.generic.error": "ocorreu um erro durante a operação...", // "submission.workflow.tasks.generic.processing": "Processing...", - "submission.workflow.tasks.generic.processing": "Processando...", + "submission.workflow.tasks.generic.processing": "a processar...", // "submission.workflow.tasks.generic.submitter": "Submitter", - "submission.workflow.tasks.generic.submitter": "Submetedor", + "submission.workflow.tasks.generic.submitter": "Depositante", // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Operação realizada com sucesso", - - // "submission.workflow.tasks.pool.claim": "Claim", - "submission.workflow.tasks.pool.claim": "Requerer", + "submission.workflow.tasks.pool.claim": "Assumir", // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", - "submission.workflow.tasks.pool.claim_help": "Atribua esta tarefa a si mesmo.", + "submission.workflow.tasks.pool.claim_help": "Assumir esta tarefa", // "submission.workflow.tasks.pool.hide-detail": "Hide detail", "submission.workflow.tasks.pool.hide-detail": "Ocultar detalhes", @@ -5229,13 +6828,144 @@ // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Mostrar detalhes", + // "submission.workspace.generic.view": "View", + "submission.workspace.generic.view": "Ver", + + // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", + + // "subscriptions.title": "subscriptions", + "subscriptions.title": "Subscrições de alertas", + + // "subscriptions.item": "subscriptions for items", + "subscriptions.item": "Subscrições para itens", + + // "subscriptions.collection": "subscriptions for collections", + "subscriptions.collection": "Subscrições para coleções", + + // "subscriptions.community": "subscriptions for communities", + "subscriptions.community": "Subscrições para comunidades", + + // "subscriptions.subscription_type": "Subscription type", + "subscriptions.subscription_type": "Tipo de subscrição", + + // "subscriptions.frequency": "Subscription frequency", + "subscriptions.frequency": "Frequência da subscrição", + + // "subscriptions.frequency.D": "Daily", + "subscriptions.frequency.D": "Diária", + + // "subscriptions.frequency.M": "Monthly", + "subscriptions.frequency.M": "Mensal", + + // "subscriptions.frequency.W": "Weekly", + "subscriptions.frequency.W": "Semanal", + + // "subscriptions.tooltip": "Subscribe", + "subscriptions.tooltip": "Subscrever", + + // "subscriptions.modal.title": "subscriptions", + "subscriptions.modal.title": "Subscrições de alertas", + + // "subscriptions.modal.type-frequency": "Type and frequency", + "subscriptions.modal.type-frequency": "Tipo e frequência", + + // "subscriptions.modal.close": "Close", + "subscriptions.modal.close": "Fechar", + + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \// "subscriptions\" page under your user profile", + "subscriptions.modal.delete-info": "Para remover esta subscrição, por favor aceda à página de 'subscrições' debaixo do seu perfil de utilizador", + + // "subscriptions.modal.new-subscription-form.type.content": "Content", + "subscriptions.modal.new-subscription-form.type.content": "Conteúdo", + + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + "subscriptions.modal.new-subscription-form.frequency.D": "Diária", + + // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + "subscriptions.modal.new-subscription-form.frequency.W": "Semanal", + + // "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + "subscriptions.modal.new-subscription-form.frequency.M": "Mensal", + + // "subscriptions.modal.new-subscription-form.submit": "Submit", + "subscriptions.modal.new-subscription-form.submit": "Submeter", + + // "subscriptions.modal.new-subscription-form.processing": "processing...", + "subscriptions.modal.new-subscription-form.processing": "A processar...", + + // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + "subscriptions.modal.create.success": "Subscrição para '{{ type }}' realizada com sucessso.", + + // "subscriptions.modal.delete.success": "Subscription deleted successfully", + "subscriptions.modal.delete.success": "Subscrição removida com sucesso", + + // "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + "subscriptions.modal.update.success": "Subscrição para '{{ type }}' atualizada com suceso", + + // "subscriptions.modal.create.error": "An error occurs during the subscription creation", + "subscriptions.modal.create.error": "Ocorre um erro durante a criação da subscrição", + + // "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + "subscriptions.modal.delete.error": "Ocorre um erro durante a remoção da subscrição", + + // "subscriptions.modal.update.error": "An error occurs during the subscription update", + "subscriptions.modal.update.error": "Ocorre um erro durante a atualização da subscrição", + + // "subscriptions.table.dso": "Subject", + "subscriptions.table.dso": "Assunto", + + // "subscriptions.table.subscription_type": "Subscription Type", + "subscriptions.table.subscription_type": "Tipo de subscrição", + + // "subscriptions.table.subscription_frequency": "Subscription Frequency", + "subscriptions.table.subscription_frequency": "Frequência da subscrição", + + // "subscriptions.table.action": "Action", + "subscriptions.table.action": "Ação", + + // "subscriptions.table.edit": "Edit", + "subscriptions.table.edit": "Editar", + + // "subscriptions.table.delete": "Delete", + "subscriptions.table.delete": "Remover", + + // "subscriptions.table.not-available": "Not available", + "subscriptions.table.not-available": "Indisponível", + + // "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + "subscriptions.table.not-available-message": "O item subscrito foi removido ou atualmente não tem permissão para o visualizar", + + // "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", + "subscriptions.table.empty.message": "Neste momento, não tem quaisquer subscrições. Para subscrever atualizações por correio electrónico para uma 'Comunidade' ou 'Colecção', utilize o botão de 'Subscrição' na página do objeto.", + + // "thumbnail.default.alt": "Thumbnail Image", + "thumbnail.default.alt": "Miniatura", + + // "thumbnail.default.placeholder": "No Thumbnail Available", + "thumbnail.default.placeholder": "Miniatura indisponível", + + // "thumbnail.project.alt": "Project Logo", + "thumbnail.project.alt": "Logótipo do projeto", + // "thumbnail.project.placeholder": "Project Placeholder Image", + "thumbnail.project.placeholder": "Imagem do projeto", + + // "thumbnail.orgunit.alt": "OrgUnit Logo", + "thumbnail.orgunit.alt": "Logótipo da unidade", + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + "thumbnail.orgunit.placeholder": "Imagem da unidade", + + // "thumbnail.person.alt": "Profile Picture", + "thumbnail.person.alt": "Foto do perfil", + + // "thumbnail.person.placeholder": "No Profile Picture Available", + "thumbnail.person.placeholder": "Foto indisponível", + // "title": "DSpace", - "title": "DSpace", - - - + "title": "Repositório", + // "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.header": "Vista hierárquica", @@ -5246,7 +6976,7 @@ "vocabulary-treeview.search.form.reset": "Redefinir", // "vocabulary-treeview.search.form.search": "Search", - "vocabulary-treeview.search.form.search": "Pesquisar", + "vocabulary-treeview.search.form.search": "pesquisar", // "vocabulary-treeview.search.no-result": "There were no items to show", "vocabulary-treeview.search.no-result": "Não existem itens para mostrar", @@ -5256,21 +6986,24 @@ // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", "vocabulary-treeview.tree.description.srsc": "Categorias de Assuntos de Investigação", - - + + // "vocabulary-treeview.info": "Select a subject to add as search filter", + "vocabulary-treeview.info": "Selecione um assunto para adicionar como filtro de pesquisa", // "uploader.browse": "browse", - "uploader.browse": "Navegar", + "uploader.browse": "navegue para o(s) carregar.", // "uploader.drag-message": "Drag & Drop your files here", - "uploader.drag-message": "Clique e arraste os seus ficheiros aqui", + "uploader.drag-message": "Clique e arraste o(s) seu(s) ficheiro(s) para aqui", + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Apagar", + // "uploader.or": ", or ", - "uploader.or": ", ou", + "uploader.or": " ou", // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", - // TODO Source message changed - Revise the translation - "uploader.processing": "A Processar", + "uploader.processing": "A processar o(s) ficheiro(s) carregado(s)... (agora é seguro fechar esta página)", // "uploader.queue-length": "Queue length", "uploader.queue-length": "Tamanho da fila", @@ -5284,12 +7017,26 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Selecione os tipos para os quais pretende guardar os metadados virtuais como metadados reais", + // "supervisedWorkspace.search.results.head": "Supervised Items", + "supervisedWorkspace.search.results.head": "Itens supervisionados", + // "workspace.search.results.head": "Your submissions", + "workspace.search.results.head": "Os meus depósitos", // "workflowAdmin.search.results.head": "Administer Workflow", - "workflowAdmin.search.results.head": "Gestão do Workflow", - + "workflowAdmin.search.results.head": "Gestão do workflow", + // "workflow.search.results.head": "Workflow tasks", + "workflow.search.results.head": "Tarefas em workflow", + + // "supervision.search.results.head": "Workflow and Workspace tasks", + "supervision.search.results.head": "Workflow e tarefas na área de trabalho", + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + "workflow-item.edit.breadcrumbs": "Editar item em processamento", + + // "workflow-item.edit.title": "Edit workflowitem", + "workflow-item.edit.title": "Editar item em processamento", // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Apagado", @@ -5304,10 +7051,10 @@ "workflow-item.delete.notification.error.content": "Não foi possível apagar o item do workflow", // "workflow-item.delete.title": "Delete workflow item", - "workflow-item.delete.title": "Apagar Item do Workflow", + "workflow-item.delete.title": "Apagar item do workflow", // "workflow-item.delete.header": "Delete workflow item", - "workflow-item.delete.header": "Apagar Item do Workflow", + "workflow-item.delete.header": "Apagar item do workflow", // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Cancelar", @@ -5315,7 +7062,6 @@ // "workflow-item.delete.button.confirm": "Delete", "workflow-item.delete.button.confirm": "Apagar", - // "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.title": "Devolver ao depositante", @@ -5337,8 +7083,610 @@ // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Cancelar", - // "workflow-item.send-back.button.confirm": "Send back" - "workflow-item.send-back.button.confirm": "Devolver" + // "workflow-item.send-back.button.confirm": "Send back", + "workflow-item.send-back.button.confirm": "Devolver", + + // "workflow-item.view.breadcrumbs": "Workflow View", + "workflow-item.view.breadcrumbs": "Vista das tarefas", + + // "workspace-item.view.breadcrumbs": "Workspace View", + "workspace-item.view.breadcrumbs": "Vista das tarefas", + + // "workspace-item.view.title": "Workspace View", + "workspace-item.view.title": "Vista das tarefas", + + // "workflow-item.advanced.title": "Advanced workflow", + "workflow-item.advanced.title": "Fluxo de trabalho avançado", + + // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + "workflow-item.selectrevieweraction.notification.success.title": "Selecionar revisor", + + // "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + "workflow-item.selectrevieweraction.notification.success.content": "O revisor para o fluxo de trabalho deste item foi seleccionado com sucesso", + + // "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + "workflow-item.selectrevieweraction.notification.error.title": "Ocorreu algum erro!", + + // "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + "workflow-item.selectrevieweraction.notification.error.content": "Não foi possível selecionar o revisor para o fluxo de trabalho deste item", + + // "workflow-item.selectrevieweraction.title": "Select Reviewer", + "workflow-item.selectrevieweraction.title": "Selecionar revisor", + + // "workflow-item.selectrevieweraction.header": "Select Reviewer", + "workflow-item.selectrevieweraction.header": "Selecionar revisor", + + // "workflow-item.selectrevieweraction.button.cancel": "Cancel", + "workflow-item.selectrevieweraction.button.cancel": "Cancelar", + + // "workflow-item.selectrevieweraction.button.confirm": "Confirm", + "workflow-item.selectrevieweraction.button.confirm": "Confirmar", + + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + "workflow-item.scorereviewaction.notification.success.title": "Classificar revisão", + + // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + "workflow-item.scorereviewaction.notification.success.content": "A classificação para o fluxo de trabalho deste item foi submetida com sucesso", + + // "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + "workflow-item.scorereviewaction.notification.error.title": "Ocorreu algum erro!", + + // "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + "workflow-item.scorereviewaction.notification.error.content": "Não foi possível classificar este item", + + // "workflow-item.scorereviewaction.title": "Rate this item", + "workflow-item.scorereviewaction.title": "Classifique este item", + + // "workflow-item.scorereviewaction.header": "Rate this item", + "workflow-item.scorereviewaction.header": "Classifique este item", + + // "workflow-item.scorereviewaction.button.cancel": "Cancel", + "workflow-item.scorereviewaction.button.cancel": "Cancelar", + + // "workflow-item.scorereviewaction.button.confirm": "Confirm", + "workflow-item.scorereviewaction.button.confirm": "Confirmar", + + // "idle-modal.header": "Session will expire soon", + "idle-modal.header": "A sua sessão vai expirar em breve!", + + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + "idle-modal.info": "Por razões de segurança, as sessões de utilizador expiram depois de {{ timeToExpire }} minutos de inatividade. A sua sessão expira em breve. Gostaria de a prolongar ou sair?", + + // "idle-modal.log-out": "Log out", + "idle-modal.log-out": "Desligar", + + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Prolongar sessão", + + // "researcher.profile.action.processing" : "Processing...", + "researcher.profile.action.processing" : "A processar...", + + // "researcher.profile.associated": "Researcher profile associated", + "researcher.profile.associated": "Perfil do investigador associado", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + "researcher.profile.change-visibility.fail": "Ocorre um erro inesperado ao alterar a visibilidade do perfil", + + // "researcher.profile.create.new": "Create new", + "researcher.profile.create.new": "Criar novo", + + // "researcher.profile.create.success": "Researcher profile created successfully", + "researcher.profile.create.success": "Perfil do investigador criado com sucesso", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + "researcher.profile.create.fail": "Ocorre um erro durante a criação do perfil do investigador", + + // "researcher.profile.delete": "Delete", + "researcher.profile.delete": "Remover", + + // "researcher.profile.expose": "Expose", + "researcher.profile.expose": "Expor", + + // "researcher.profile.hide": "Hide", + "researcher.profile.hide": "Esconder", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + "researcher.profile.not.associated": "Perfil do investigador ainda não associado", + + // "researcher.profile.view": "View", + "researcher.profile.view": "Ver", + + // "researcher.profile.private.visibility" : "PRIVATE", + "researcher.profile.private.visibility" : "PRIVADO", + + // "researcher.profile.public.visibility" : "PUBLIC", + "researcher.profile.public.visibility" : "PÚBLICO", + + // "researcher.profile.status": "Status:", + "researcher.profile.status": "Estado:", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + "researcherprofile.claim.not-authorized": "Não possui autorização para reinvindicar este artigo. Para mais pormenores, contactar o(s) administrador(es).", + + // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body" : "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", + + // "researcherprofile.error.claim.title" : "Error", + "researcherprofile.error.claim.title" : "Erro", + + // "researcherprofile.success.claim.body" : "Profile claimed with success", + "researcherprofile.success.claim.body" : "Perfil reivindicado com sucesso", + + // "researcherprofile.success.claim.title" : "Success", + "researcherprofile.success.claim.title" : "Sucesso", + + // "person.page.orcid.create": "Create an ORCID iD", + "person.page.orcid.create": "Criar um ORCID iD", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + "person.page.orcid.granted-authorizations": "Autorizações concedidas", + + // "person.page.orcid.grant-authorizations" : "Grant authorizations", + "person.page.orcid.grant-authorizations" : "Conceder autorizações", + + // "person.page.orcid.link": "Connect to ORCID iD", + "person.page.orcid.link": "Ligar ao ORCID iD", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + "person.page.orcid.link.processing": "Ligação do perfil ao ORCID...", + + // "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + "person.page.orcid.link.error.message": "Ocorreu algum problema ao ligar o perfil ao ORCID. Se o problema persistir, contacte o administrador.", + + // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + "person.page.orcid.orcid-not-linked-message": "O ORCID iD deste perfil ({{{ orcid }}) ainda não foi ligado a uma conta no registo do ORCID ou a ligação está expirada.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + "person.page.orcid.unlink": "Desligar do ORCID", + + // "person.page.orcid.unlink.processing": "Processing...", + "person.page.orcid.unlink.processing": "A processar...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + "person.page.orcid.missing-authorizations": "Autorizações em falta", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + "person.page.orcid.missing-authorizations-message": "Faltam as seguintes autorizações:", + + // "person.page.orcid.no-missing-authorizations-message": "Great! This box is empty, so you have granted all access rights to use all functions offers by your institution.", + "person.page.orcid.no-missing-authorizations-message": "Óptimo! Esta caixa está vazia, pelo que lhe foram concedidas todos as permissões de acesso para utilizar todas as funções oferecidas pela sua instituição.", + + // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", + "person.page.orcid.no-orcid-message": "Ainda não foi associado nenhum ORCID iD. Ao clicar no botão abaixo, é possível ligar este perfil a uma conta ORCID.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + "person.page.orcid.profile-preferences": "Preferências de perfil", + + // "person.page.orcid.funding-preferences": "Funding preferences", + "person.page.orcid.funding-preferences": "Preferências de financiamento", + + // "person.page.orcid.publications-preferences": "Publication preferences", + "person.page.orcid.publications-preferences": "Preferências de publicações", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + "person.page.orcid.remove-orcid-message": "Se precisar de remover o seu ORCID, por favor contacte o administrador do repositório", + + // "person.page.orcid.save.preference.changes": "Update settings", + "person.page.orcid.save.preference.changes": "Atualizar configurações", + + // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + "person.page.orcid.sync-profile.affiliation" : "Afiliação", + + // "person.page.orcid.sync-profile.biographical" : "Biographical data", + "person.page.orcid.sync-profile.biographical" : "Dados biográficos", + + // "person.page.orcid.sync-profile.education" : "Education", + "person.page.orcid.sync-profile.education" : "Educação", + + // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + "person.page.orcid.sync-profile.identifiers" : "Identificadores", + + // "person.page.orcid.sync-fundings.all" : "All fundings", + "person.page.orcid.sync-fundings.all" : "Todos financiamentos", + + // "person.page.orcid.sync-fundings.mine" : "My fundings", + "person.page.orcid.sync-fundings.mine" : "Meus financiamentos", + + // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + "person.page.orcid.sync-fundings.my_selected" : "Financiamentos selecionados", + + // "person.page.orcid.sync-fundings.disabled" : "Disabled", + "person.page.orcid.sync-fundings.disabled" : "Desligado", + + // "person.page.orcid.sync-publications.all" : "All publications", + "person.page.orcid.sync-publications.all" : "Todas as publicações", + + // "person.page.orcid.sync-publications.mine" : "My publications", + "person.page.orcid.sync-publications.mine" : "As minhas publicações", + + // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + "person.page.orcid.sync-publications.my_selected" : "Publicações selecionadas", + + // "person.page.orcid.sync-publications.disabled" : "Disabled", + "person.page.orcid.sync-publications.disabled" : "Desligado", + + // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard" : "Cancelar a alteração e não sincronizar com o registo ORCID", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + "person.page.orcid.sync-queue.discard.error": "A eliminação do registo da fila do ORCID falhou", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + "person.page.orcid.sync-queue.discard.success": "O registo da fila do ORCID foi descartado com sucesso", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", + + // "person.page.orcid.sync-queue.table.header.type" : "Type", + "person.page.orcid.sync-queue.table.header.type" : "Tipo", + + // "person.page.orcid.sync-queue.table.header.description" : "Description", + "person.page.orcid.sync-queue.table.header.description" : "Descrição", + + // "person.page.orcid.sync-queue.table.header.action" : "Action", + "person.page.orcid.sync-queue.table.header.action" : "Ação", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + "person.page.orcid.sync-queue.description.affiliation": "Afiliações", + + // "person.page.orcid.sync-queue.description.country": "Country", + "person.page.orcid.sync-queue.description.country": "País", + + // "person.page.orcid.sync-queue.description.education": "Educations", + "person.page.orcid.sync-queue.description.education": "Educação", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + "person.page.orcid.sync-queue.description.external_ids": "IDs externos", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + "person.page.orcid.sync-queue.description.other_names": "Outros nomes", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + "person.page.orcid.sync-queue.description.qualification": "Qualificações", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + "person.page.orcid.sync-queue.description.researcher_urls": "URLS dos investigadores", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + "person.page.orcid.sync-queue.description.keywords": "Palavras-chave", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + "person.page.orcid.sync-queue.tooltip.insert": "Acrescentar uma nova entrada no registo ORCID", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + "person.page.orcid.sync-queue.tooltip.update": "Actualizar esta entrada no registo do ORCID", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + "person.page.orcid.sync-queue.tooltip.delete": "Remover esta entrada do registo do ORCID", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + "person.page.orcid.sync-queue.tooltip.publication": "Publicação", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + "person.page.orcid.sync-queue.tooltip.project": "Projeto", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliação", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + "person.page.orcid.sync-queue.tooltip.education": "Educação", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + "person.page.orcid.sync-queue.tooltip.qualification": "Qualificação", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + "person.page.orcid.sync-queue.tooltip.other_names": "Outro nome", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + "person.page.orcid.sync-queue.tooltip.country": "País", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + "person.page.orcid.sync-queue.tooltip.keywords": "Palavra-chave", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + "person.page.orcid.sync-queue.tooltip.external_ids": "Identificadores externos", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", + + // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send" : "Sincronizar com o registo ORCID", + + // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "A submissão ao ORCID falhou por falta de autorizações.", + + // "person.page.orcid.sync-queue.send.unauthorized-error.content": "Click here to grant again the required permissions. If the problem persists, contact the administrator", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Clique aqui para conceder novamente as permissões necessárias. Se o problema persistir, por favor contacte o administrador", + + // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + "person.page.orcid.sync-queue.send.bad-request-error": "A submissão ao ORCID falhou porque o recurso enviado para o registo do ORCID não é válido", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + "person.page.orcid.sync-queue.send.error": "A submissão ao ORCID falhou", + + // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + "person.page.orcid.sync-queue.send.conflict-error": "A submissão ao ORCID falhou porque o recurso já existe no registo do ORCID", + + // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + "person.page.orcid.sync-queue.send.not-found-warning": "O recurso já não existe no registo do ORCID.", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + "person.page.orcid.sync-queue.send.success": "A submissão ao ORCID foi concluída com sucesso", + + // "person.page.orcid.sync-queue.send.validation-error": "The data that you want to synchronize with ORCID is not valid", + "person.page.orcid.sync-queue.send.validation-error": "Os dados que pretende sincronizar com ORCID não são válidos", + + // "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "O valor de financiamento é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.external-id.required": "The resource to be sent requires at least one identifier", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "O recurso a ser enviado requer pelo menos um identificador", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + "person.page.orcid.sync-queue.send.validation-error.title.required": "O título é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", + "person.page.orcid.sync-queue.send.validation-error.type.required": "O 'dc.type' é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "A data de início é obrigatória", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "O financiador é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "País inválido (2 dígitos ISO 3166)", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "A organização é obrigatória", + + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", + + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "A data de publicação deve ser um ano após 1900", + + // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "A organização a ser enviada requer um endereço", + + // "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "The address of the organization to be sent requires a city", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "O endereço da organização a enviar requer uma cidade", + + // "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "The address of the organization to be sent requires a valid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "O endereço da organização a enviar requer um país ISO 3166 válido de 2 dígitos", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "An identifier to disambiguate organizations is required. Supported ids are GRID, Ringgold, Legal Entity identifiers (LEIs) and Crossref Funder Registry identifiers", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "É necessário um identificador para desambiguar as organizações. Os identificadores suportados são os identificadores GRID, RINGGOLD, Legal Entity Identity (LEIs) e Crossref Funder Registry (CrossRef)", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "The organization's identifiers requires a value", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Os identificadores da organização requerem um valor", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Os identificadores da organização requerem uma fonte", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "A fonte de um dos identificadores da organização é inválida. As fontes suportadas são RINGGOLD, GRID, LEI e FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + "person.page.orcid.synchronization-mode": "Modo sincronização", + + // "person.page.orcid.synchronization-mode.batch": "Batch", + "person.page.orcid.synchronization-mode.batch": "Lote", + + // "person.page.orcid.synchronization-mode.label": "Synchronization mode", + "person.page.orcid.synchronization-mode.label": "Modo sincronização", + + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include 'Manual' (you must send your data to ORCID manually), or 'Batch' (the system will send your data to ORCID via a scheduled script).", + "person.page.orcid.synchronization-mode-message": "Por favor, selecione a forma como deseja que a sincronização com ORCID ocorra. As opções incluem 'Manual' (deve enviar os seus dados para o ORCID manualmente), ou 'Batch' (o sistema enviará os seus dados para o ORCID através de um script agendado).", + + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + "person.page.orcid.synchronization-mode-funding-message": "Selecione se pretende enviar as suas entidades ligadas de 'Projeto' para a lista de informação de financiamento do seu registo ORCID.", + + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", + "person.page.orcid.synchronization-mode-publication-message": "Selecione se pretende enviar as suas entidades ligadas de 'Publicação' associadas à lista de obras do seu registo ORCID.", + + // "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + "person.page.orcid.synchronization-mode-profile-message": "Selecione se pretende enviar os seus dados biográficos ou identificadores pessoais para o seu registo ORCID.", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + "person.page.orcid.synchronization-settings-update.success": "As definições de sincronização foram atualizadas com sucesso", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + "person.page.orcid.synchronization-settings-update.error": "A atualização das definições de sincronização falhou", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manual", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + "person.page.orcid.scope.authenticate": "Obtenha o seu ORCID iD", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + "person.page.orcid.scope.read-limited": "Leia a sua informação com visibilidade definida para 'Trusted Parties'", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + "person.page.orcid.scope.activities-update": "Acrescentar/actualizar as suas actividades de investigação", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + "person.page.orcid.scope.person-update": "Adicionar/actualizar outras informações sobre si", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + "person.page.orcid.unlink.success": "A desconexão entre o perfil e o registo ORCID foi bem sucedida", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + "person.page.orcid.unlink.error": "Ocorreu um erro ao desligar o perfil e o registo ORCID. Tente novamente.", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + "person.orcid.sync.setting": "Definições de sincronização ORCID", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + "person.orcid.registry.queue": "Fila de registo ORCID", + + // "person.orcid.registry.auth": "ORCID Authorizations", + "person.orcid.registry.auth": "Autorizações ORCID", + + // "home.recent-submissions.head": "Recent Submissions", + "home.recent-submissions.head": "Entradas recentes", + + // "listable-notification-object.default-message": "This object couldn't be retrieved", + "listable-notification-object.default-message": "Este objeto não pode ser recuperado", + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + "system-wide-alert-banner.retrieval.error": "Algo correu mal ao recuperar o 'banner' de alerta em todo o sistema", + + // "system-wide-alert-banner.countdown.prefix": "In", + "system-wide-alert-banner.countdown.prefix": "Em", + + // "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + "system-wide-alert-banner.countdown.days": "{{dias}} dia(s),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + "system-wide-alert-banner.countdown.hours": "{{hours}} hora(s) e", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + "system-wide-alert-banner.countdown.minutes": "{{minutos}} minuto(s):", + + // "menu.section.system-wide-alert": "System-wide Alert", + "menu.section.system-wide-alert": "Alertas gerais do sistema", + + // "system-wide-alert.form.header": "System-wide Alert", + "system-wide-alert.form.header": "Alertas gerais do sistema", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + "system-wide-alert-form.retrieval.error": "Algo correu mal ao recuperar o alerta geral do sistema", + + // "system-wide-alert.form.cancel": "Cancel", + "system-wide-alert.form.cancel": "Cancelar", + + // "system-wide-alert.form.save": "Save", + "system-wide-alert.form.save": "Guardar", + + // "system-wide-alert.form.label.active": "ACTIVE", + "system-wide-alert.form.label.active": "ACTIVO", + + // "system-wide-alert.form.label.inactive": "INACTIVE", + "system-wide-alert.form.label.inactive": "INACTIVO", + + // "system-wide-alert.form.error.message": "The system wide alert must have a message", + "system-wide-alert.form.error.message": "O alerta geral do sistema deve conter uma mensagem", + + // "system-wide-alert.form.label.message": "Alert message", + "system-wide-alert.form.label.message": "Mensagem de alerta", + + // "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + "system-wide-alert.form.label.countdownTo.enable": "Ativar um temporizador de contagem decrescente", + + // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + "system-wide-alert.form.label.countdownTo.hint": "Dica: Defina um temporizador de contagem decrescente. Quando ativado, pode ser definida uma data no futuro e o 'banner' de alerta geral do sistema irá realizar uma contagem decrescente para a data definida. Quando este temporizador terminar, desaparecerá do alerta. O servidor NÃO pára automaticamente.", + + // "system-wide-alert.form.label.preview": "system-wide alert preview", + "system-wide-alert.form.label.preview": "Pré-visualização de alerta geral do sistema", + + // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + "system-wide-alert.form.update.success": "O alerta geral do sistema foi atualizado com sucesso", + + // "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + "system-wide-alert.form.update.error": "Algo correu mal ao atualizar o alerta geral do sistema", + + // "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + "system-wide-alert.form.create.success": "O alerta geral do sistema foi criado com sucesso", + + // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + "system-wide-alert.form.create.error": "Algo correu mal ao criar o alerta geral do sistema", + + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + "admin.system-wide-alert.breadcrumbs": "Alertas gerais do sistema", + + // "admin.system-wide-alert.title": "System-wide Alerts", + "admin.system-wide-alert.title": "Alertas gerais do sistema", + + + + // Other strings... + // Missing, Duplicate or Redundant ??? + + // NOT FOUND 30-05-2023 + + + // "datafile.listelement.badge": "Data file", + "datafile.listelement.badge": "Ficheiro de dados", + + // "datapackage.listelement.badge": "Data package", + "datapackage.listelement.badge": "Pacote de dados", + + // "browse.next.button": "Next", + "browse.next.button": "Próximo", + + // "browse.previous.button": "Previous", + "browse.previous.button": "Anterior", + + // "curation-task.task.registerdoi.label": "DOI check", + "curation-task.task.registerdoi.label": "Verificação de DOIs", + + // "mydspace.general.text-here": "here", + "mydspace.general.text-here": "aqui", + + // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", + "mydspace.upload.upload-successful": "Novo item de espaço de trabalho criado. Clique {{here}} para o editar.", + + // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", + "profile.security.form.notifications.error.not-long-enough": "A senha deve ter pelo menos 6 caracteres.", + + // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", + "register-page.create-profile.security.error.password-length": "A senha deve possuir pelo menos 6 caracteres.", + + // "search.form.search_mydspace": "Search MyDSpace", + "search.form.search_mydspace": "Pesquisar na Área Pessoal", + + // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", + "forgot-password.form.error.password-length": "A senha deve ter pelo menos 6 caracteres.", + + // "search.filters.entityType.Publication": "Publicação", + "search.filters.entityType.Publication": "Publicação", + + // "search.filters.entityType.Person": "Pessoa", + "search.filters.entityType.Person": "Pessoa", + + // "search.filters.entityType.Project": "Projecto", + "search.filters.entityType.Project": "Projeto", + + // "search.filters.entityType.Journal": "Revista", + "search.filters.entityType.Journal": "Revista", + + // "search.filters.entityType.DataFile": "Data File", + "search.filters.entityType.DataFile": "Ficheiro de dados", + + // "forgot-email.form.google-recaptcha.must-accept-cookies": "Must accept cookies", + "forgot-email.form.google-recaptcha.must-accept-cookies": "Deve aceitar cookies", + + // "forgot-email.form.google-recaptcha.open-cookie-settings": "Cookie settings", + "forgot-email.form.google-recaptcha.open-cookie-settings": "Configurar cookies", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Successfully imported and added external project to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Importado com sucesso e adicionado autor à seleção", + + // "search.filters.namedresourcetype.Archived": "Archived", + "search.filters.namedresourcetype.Archived": "Aceites", + + // "search.filters.namedresourcetype.Workspace": "Workspace", + "search.filters.namedresourcetype.Workspace": "Por terminar", + + // "search.filters.namedresourcetype.Workflow": "Workflow", + "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", + + // "search.filters.namedresourcetype.Validation": "Validation", + "search.filters.namedresourcetype.Validation": "Em validação", + + // "orgunit.search.results.head": "Organizational Unit Search Results", + "orgunit.search.results.head": "Resultados da pesquisa de organizações", + + // "orgunit-relationships.search.results.head": "Organizational Unit Search Results", + "orgunit-relationships.search.results.head": "Resultados da pesquisa de organizações", + + // "journalissue.search.results.head": "Journal Issue Search Results", + "journalissue.search.results.head": "Resultados da pesquisa de números", + + // "journalissue-relationships.search.results.head": "Journal Issue Search Results", + "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", } From 244608aa5c9e17938bf2fa43d03d5a1a0c5211b0 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 31 May 2023 12:11:15 +0200 Subject: [PATCH 726/833] fix issue where a colon in a uuid would get misinterpreted as a route param --- src/app/shared/menu/menu.service.spec.ts | 37 ++++++++++++++++++++++++ src/app/shared/menu/menu.service.ts | 20 +++++-------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/app/shared/menu/menu.service.spec.ts b/src/app/shared/menu/menu.service.spec.ts index f4b0fe3db8..0d8d669a0a 100644 --- a/src/app/shared/menu/menu.service.spec.ts +++ b/src/app/shared/menu/menu.service.spec.ts @@ -567,4 +567,41 @@ describe('MenuService', () => { }); }); + describe(`resolveSubstitutions`, () => { + let linkPrefix; + let link; + let uuid; + + beforeEach(() => { + linkPrefix = 'statistics_collection_'; + link = `${linkPrefix}:id`; + uuid = 'f7cc3ca4-3c2c-464d-8af8-add9f84f711c'; + }); + + it(`shouldn't do anything when there are no params`, () => { + let result = (service as any).resolveSubstitutions(link, undefined); + expect(result).toEqual(link); + result = (service as any).resolveSubstitutions(link, null); + expect(result).toEqual(link); + result = (service as any).resolveSubstitutions(link, {}); + expect(result).toEqual(link); + }); + + it(`should replace link params that are also route params`, () => { + const result = (service as any).resolveSubstitutions(link,{ 'id': uuid }); + expect(result).toEqual(linkPrefix + uuid); + }); + + it(`should not replace link params that aren't route params`, () => { + const result = (service as any).resolveSubstitutions(link,{ 'something': 'else' }); + expect(result).toEqual(link); + }); + + it(`should gracefully deal with routes that contain the name of the route param`, () => { + const selfReferentialParam = `:id:something`; + const result = (service as any).resolveSubstitutions(link,{ 'id': selfReferentialParam }); + expect(result).toEqual(linkPrefix + selfReferentialParam); + }); + }); + }); diff --git a/src/app/shared/menu/menu.service.ts b/src/app/shared/menu/menu.service.ts index 2253e9ce09..fac3b3fba7 100644 --- a/src/app/shared/menu/menu.service.ts +++ b/src/app/shared/menu/menu.service.ts @@ -17,7 +17,7 @@ import { ToggleActiveMenuSectionAction, ToggleMenuAction, } from './menu.actions'; -import { hasNoValue, hasValue, hasValueOperator, isNotEmpty } from '../empty.util'; +import { hasNoValue, hasValue, hasValueOperator, isNotEmpty, isEmpty } from '../empty.util'; import { MenuState } from './menu-state.model'; import { MenuSections } from './menu-sections.model'; import { MenuSection } from './menu-section.model'; @@ -409,20 +409,14 @@ export class MenuService { } protected resolveSubstitutions(object, params) { - let resolved; - if (typeof object === 'string') { + if (isEmpty(params)) { resolved = object; - let match: RegExpMatchArray; - do { - match = resolved.match(/:(\w+)/); - if (match) { - const substitute = params[match[1]]; - if (hasValue(substitute)) { - resolved = resolved.replace(match[0], `${substitute}`); - } - } - } while (match); + } else if (typeof object === 'string') { + resolved = object; + Object.entries(params).forEach(([key, value]: [string, string]) => + resolved = resolved.replaceAll(`:${key}`, value) + ); } else if (Array.isArray(object)) { resolved = []; object.forEach((entry, index) => { From 6483eb2c304346258f3ea797bb3826556a56ffa4 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 31 May 2023 12:51:49 +0300 Subject: [PATCH 727/833] Remove scripts/webpack.js This is no longer used. Fixes: https://github.com/DSpace/dspace-angular/issues/2285 --- README.md | 3 +-- scripts/webpack.js | 13 ------------- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 scripts/webpack.js diff --git a/README.md b/README.md index c90dc1d08f..689c64a292 100644 --- a/README.md +++ b/README.md @@ -413,8 +413,7 @@ dspace-angular │ ├── merge-i18n-files.ts * │ ├── serve.ts * │ ├── sync-i18n-files.ts * -│ ├── test-rest.ts * -│ └── webpack.js * +│ └── test-rest.ts * ├── src * The source of the application │ ├── app * The source code of the application, subdivided by module/page. │ ├── assets * Folder for static resources diff --git a/scripts/webpack.js b/scripts/webpack.js deleted file mode 100644 index 93f17b4619..0000000000 --- a/scripts/webpack.js +++ /dev/null @@ -1,13 +0,0 @@ -const path = require('path'); -const child_process = require('child_process'); - -const heapSize = 4096; -const webpackPath = path.join('node_modules', 'webpack', 'bin', 'webpack.js'); - -const params = [ - '--max_old_space_size=' + heapSize, - webpackPath, - ...process.argv.slice(2) -]; - -child_process.spawn('node', params, { stdio:'inherit' }); From bbfb8bec01239e2939a13cd9b9a1b91dbc42f76a Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 18:34:59 +0100 Subject: [PATCH 728/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 229 ++++++++++++++++++------------------ 1 file changed, 114 insertions(+), 115 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 761da582b6..9b37fce1c7 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,26 +1,25 @@ { - // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 - - + // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", // "401.link.home-page": "Take me to the home page", "401.link.home-page": "Voltar à página de início", - + // "401.unauthorized": "unauthorized", "401.unauthorized": "Não autorizado", - + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "Não possui permissões para aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", - + // "403.link.home-page": "Take me to the home page", "403.link.home-page": "Voltar à página de início", - + // "403.forbidden": "forbidden", "403.forbidden": "Proibido", - + // "500.page-internal-server-error": "Service Unavailable", "500.page-internal-server-error": "Serviço indisponível", @@ -29,16 +28,16 @@ // "500.link.home-page": "Take me to the home page", "500.link.home-page": "Voltar à página de início", - + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.help": "Não encontramos a página que procura. A página pode ter sido movida ou eliminada. Pode utilizar o botão em baixo para voltar à página de início. ", - + // "404.link.home-page": "Take me to the home page", "404.link.home-page": "Voltar à página de início", // "404.page-not-found": "page not found", "404.page-not-found": "página não encontrada", - + // "error-page.description.401": "unauthorized", "error-page.description.401": "Não autorizado", @@ -46,10 +45,10 @@ "error-page.description.403": "Proibido", // "error-page.description.500": "Service Unavailable", - "error-page.description.500": "Serviço indisponível", - + "error-page.description.500": "Serviço indisponível", + // "error-page.description.404": "page not found", - "error-page.description.404": "página não encontrada", + "error-page.description.404": "página não encontrada", // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", "error-page.orcid.generic-error": "Ocorreu um erro com a sua autenticação via ORCID. Certifique-se que partilhou o seu endereço de email associado à sua conta ORCID com o repositório. Se o erro persistir, por favor contacte o administrador do sistema.", @@ -58,8 +57,8 @@ "access-status.embargo.listelement.badge": "Embargado", // "access-status.metadata.only.listelement.badge": "Metadata only", - "access-status.metadata.only.listelement.badge": "Apenas Metadados", - + "access-status.metadata.only.listelement.badge": "Apenas Metadados", + // "access-status.open.access.listelement.badge": "Open Access", "access-status.open.access.listelement.badge": "Acesso Aberto", @@ -68,16 +67,16 @@ // "access-status.unknown.listelement.badge": "Unknown", "access-status.unknown.listelement.badge": "Desconhecido", - + // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Tarefas de curadoria", // "admin.curation-tasks.title": "System curation tasks", "admin.curation-tasks.title": "Tarefas de curadoria", - + // "admin.curation-tasks.header": "System curation tasks", "admin.curation-tasks.header": "Tarefas de curadoria", - + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", "admin.registries.bitstream-formats.breadcrumbs": "Registo de formatos", @@ -89,31 +88,31 @@ // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Falha", - + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", "admin.registries.bitstream-formats.create.head": "Criar formato de ficheiro", // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Adicionar um novo formato de ficheiro", - + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", "admin.registries.bitstream-formats.create.success.content": "O novo formato de ficheiro foi criado com sucesso.", - + // "admin.registries.bitstream-formats.create.success.head": "Success", "admin.registries.bitstream-formats.create.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.failure.amount": "Falha ao remover {{ amount }} formato(s)", - + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", "admin.registries.bitstream-formats.delete.failure.head": "Falha", - + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.success.amount": "Removeu {{ amount }} formato(s) com sucesso", - + // "admin.registries.bitstream-formats.delete.success.head": "Success", "admin.registries.bitstream-formats.delete.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos conhecidos e os seus níveis de suporte.", @@ -122,76 +121,76 @@ // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", - + // "admin.registries.bitstream-formats.edit.description.label": "Description", "admin.registries.bitstream-formats.edit.description.label": "Descrição", - + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", "admin.registries.bitstream-formats.edit.extensions.hint": "Extensões são extensões de ficheiro que são usadas para identificar automaticamente o formato dos ficheiros enviados. Pode informar várias extensões para cada formato.", - + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", "admin.registries.bitstream-formats.edit.extensions.label": "Extensões de ficheiro", - + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", "admin.registries.bitstream-formats.edit.extensions.placeholder": "Indique uma extenção de ficheiro sem o ponto", - + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", "admin.registries.bitstream-formats.edit.failure.content": "Ocorreu um erro ao editar o formato de bitstream.", - + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", "admin.registries.bitstream-formats.edit.failure.head": "Falha", - + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", "admin.registries.bitstream-formats.edit.head": "Formato de bitstream: {{ format }}", - + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o utilizador, usados por motivos administrativos.", // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Interno", - + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", "admin.registries.bitstream-formats.edit.mimetype.hint": "O MIME type associado a este formato não tem que ser único.", - + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", - + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", "admin.registries.bitstream-formats.edit.shortDescription.hint": "Um nome único para este formato (exemplo. Microsoft Word XP ou Microsoft Word 2000)", - + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", "admin.registries.bitstream-formats.edit.shortDescription.label": "Nome", - + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", "admin.registries.bitstream-formats.edit.success.content": "O formato de bitstream foi editado com sucesso.", - + // "admin.registries.bitstream-formats.edit.success.head": "Success", "admin.registries.bitstream-formats.edit.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", "admin.registries.bitstream-formats.edit.supportLevel.hint": "O nível de suporte que a sua instituição promete para este formato.", - + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", "admin.registries.bitstream-formats.edit.supportLevel.label": "Nível de suporte", - + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", "admin.registries.bitstream-formats.head": "Registo de formatos de ficheiros", // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nenhum formato de bitstream para exibir.", - + // "admin.registries.bitstream-formats.table.delete": "Delete selected", "admin.registries.bitstream-formats.table.delete": "Apagar selecionado(s)", - + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", "admin.registries.bitstream-formats.table.deselect-all": "Desselecionar todos", - + // "admin.registries.bitstream-formats.table.internal": "internal", "admin.registries.bitstream-formats.table.internal": "Interno", - + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.mimetype": "MIME Type", - + // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", @@ -200,76 +199,76 @@ // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", - + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Suportado", - + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de suporte", // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", "admin.registries.bitstream-formats.title": "Registo de formatos de ficheiro", - + // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Registo de metadados", // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "O registo de metadados mantém a lista de todos os campos de metadados disponíveis no repositório. Estes campos podem ser divididos em multiplos esquemas. No entanto, o DSpace requer esquemas de Dublin Core qualificados.", - + // "admin.registries.metadata.form.create": "Create metadata schema", "admin.registries.metadata.form.create": "Criar esquema de metadados", // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Editar esquema de metadados", - + // "admin.registries.metadata.form.name": "Name", "admin.registries.metadata.form.name": "Nome", - + // "admin.registries.metadata.form.namespace": "Namespace", "admin.registries.metadata.form.namespace": "Namespace", - + // "admin.registries.metadata.head": "Metadata Registry", "admin.registries.metadata.head": "Registo de metadados", - + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nenhum esquema de metadados para mostrar.", - + // "admin.registries.metadata.schemas.table.delete": "Delete selected", "admin.registries.metadata.schemas.table.delete": "Apagar selecionado(s)", - + // "admin.registries.metadata.schemas.table.id": "ID", "admin.registries.metadata.schemas.table.id": "ID", - + // "admin.registries.metadata.schemas.table.name": "Name", "admin.registries.metadata.schemas.table.name": "Nome", - + // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Namespace", // "admin.registries.metadata.title": "Metadata Registry", "admin.registries.metadata.title": "Registo de metadados", - + // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Esquema de metadados", - + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Este é o esquema de metadados para \"{{namespace}}\".", - + // "admin.registries.schema.fields.head": "Schema metadata fields", "admin.registries.schema.fields.head": "Campos do esquema de metadados", // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nenhum campo de metadado para exibir.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Apagar selecionado(s)", - + // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", @@ -278,7 +277,7 @@ // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", - + // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Criar elemento de metadados", @@ -287,10 +286,10 @@ // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elemento", - + // "admin.registries.schema.form.qualifier": "Qualifier", "admin.registries.schema.form.qualifier": "Qualificador", - + // "admin.registries.schema.form.scopenote": "Scope Note", "admin.registries.schema.form.scopenote": "Nota de âmbito", @@ -299,28 +298,28 @@ // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Criou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.failure": "Falhou ao apagar {{amount}} esquema(s) de metadados", - + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.success": "Apagou {{amount}} esquema(s) de metadados com sucesso", - + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.edited": "Editou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.failure": "Error", "admin.registries.schema.notification.failure": "Erro", - + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", "admin.registries.schema.notification.field.created": "Criou o campo de metadado \"{{field}}\" com sucesso", - + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.failure": "Falhou ao apagar {{amount}} campo(s) de metadados", - + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.success": "Apagou {{amount}} campo(s) de metadados com sucesso", - + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", "admin.registries.schema.notification.field.edited": "Editou o campo de metadado \"{{field}}\" com sucesso", @@ -338,16 +337,16 @@ // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", - + // "admin.access-control.epeople.actions.reset": "Reset password", - "admin.access-control.epeople.actions.reset": "Redefinir password", + "admin.access-control.epeople.actions.reset": "Redefinir password", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Utilizadores", - + // "admin.access-control.epeople.title": "EPeople", "admin.access-control.epeople.title": "Utilizadores", @@ -356,46 +355,46 @@ // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Pesquisar", - + // "admin.access-control.epeople.button.see-all": "Browse All", "admin.access-control.epeople.button.see-all": "Pesquisar tudo", // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadados", - + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", "admin.access-control.epeople.search.scope.email": "Email (exato)", - + // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Pesquisar", // "admin.access-control.epeople.search.placeholder": "Search people...", "admin.access-control.epeople.search.placeholder": "Pesquisar utilizadores...", - + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "Adicionar utilizador", // "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.id": "ID", - + "admin.access-control.epeople.table.id": "ID", + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Nome", - + // "admin.access-control.epeople.table.email": "E-mail (exact)", "admin.access-control.epeople.table.email": "Email (exato)", - + // "admin.access-control.epeople.table.edit": "Edit", "admin.access-control.epeople.table.edit": "Editar", - + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{name}}\"", // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Não possui autorização para editar este grupo", - + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Apagar \"{{name}}\"", - + // "admin.access-control.epeople.no-items": "No EPeople to show.", "admin.access-control.epeople.no-items": "Sem utilizadores para mostrar.", @@ -407,43 +406,43 @@ // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Nome", - + // "admin.access-control.epeople.form.lastName": "Last name", "admin.access-control.epeople.form.lastName": "Apelido", - + // "admin.access-control.epeople.form.email": "E-mail", "admin.access-control.epeople.form.email": "Email", - + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", "admin.access-control.epeople.form.emailHint": "Deve conter um email válido", - + // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Pode iniciar sessão", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Requer certificado", - + // "admin.access-control.epeople.form.return": "Back", "admin.access-control.epeople.form.return": "Voltar", // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Utilizador criado com sucesso \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.failure": "Falha ao criar o Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Falha ao criar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Falha ao editar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.success": "Utilizador editado com successo \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.failure": "Falha ao editor Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.success": "Utilizador removido com sucesso \"{{name}}\"", @@ -452,13 +451,13 @@ // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dos grupos:", - + // "admin.access-control.epeople.form.table.id": "ID", "admin.access-control.epeople.form.table.id": "ID", - + // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nome", - + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", "admin.access-control.epeople.form.table.collectionOrCommunity": "Coleção/Comunidade", @@ -467,7 +466,7 @@ // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Adicionar a grupos", - + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar utilizador: \"{{name}}\"", @@ -481,8 +480,8 @@ "admin.access-control.groups.breadcrumbs": "Grupos", // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", - "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", - + "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", + // "admin.access-control.groups.title.singleGroup": "Edit Group", "admin.access-control.groups.title.singleGroup": "Editar grupo", @@ -491,13 +490,13 @@ // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", "admin.access-control.groups.addGroup.breadcrumbs": "Novo grupo", - + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Grupos", - + // "admin.access-control.groups.button.add": "Add group", "admin.access-control.groups.button.add": "Adicionar grupo", - + // "admin.access-control.groups.search.head": "Search groups", "admin.access-control.groups.search.head": "Pesquisar grupos", @@ -7689,4 +7688,4 @@ "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", -} \ No newline at end of file +} From d3d9a526fd093175e55047446c68ab50e9b50503 Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 19:29:57 +0100 Subject: [PATCH 729/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 254 ++++++++++++++++++------------------ 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 9b37fce1c7..c7b677d597 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -194,8 +194,8 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - // "admin.registries.bitstream-formats.table.id" : "ID", - "admin.registries.bitstream-formats.table.id" : "ID", + // "admin.registries.bitstream-formats.table.id": "ID", + "admin.registries.bitstream-formats.table.id": "ID", // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", @@ -272,8 +272,8 @@ // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - // "admin.registries.schema.fields.table.id" : "ID", - "admin.registries.schema.fields.table.id" : "ID", + // "admin.registries.schema.fields.table.id": "ID", + "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", @@ -2195,8 +2195,8 @@ // "supervision-group-selector.notification.create.failure.title": "error", "supervision-group-selector.notification.create.failure.title": "erro", - // "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", - "supervision-group-selector.notification.create.already-existing" : "Já existe uma ordem de supervisão sobre este item para grupo selecionado", + // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", + "supervision-group-selector.notification.create.already-existing": "Já existe uma ordem de supervisão sobre este item para grupo selecionado", // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Exportar metadados para {{ dsoName }}", @@ -2651,9 +2651,9 @@ // "home.title": "Home", "home.title": "Página inicial", - // "home.top-level-communities.head": "Communities in DSpace", + // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Comunidades", - + // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Selecione uma comunidade para navegar nas suas coleções", @@ -2714,20 +2714,20 @@ // "info.feedback.email-label": "Your Email", "info.feedback.email-label": "O seu endereço de correio electrónico:", - // "info.feedback.create.success" : "Feedback Sent Successfully!", - "info.feedback.create.success" : "Mensagem enviada com sucesso!", + // "info.feedback.create.success": "Feedback Sent Successfully!", + "info.feedback.create.success": "Mensagem enviada com sucesso!", - // "info.feedback.error.email.required" : "A valid email address is required", - "info.feedback.error.email.required" : "Deve inserir um endereço de correio electrónico válido", + // "info.feedback.error.email.required": "A valid email address is required", + "info.feedback.error.email.required": "Deve inserir um endereço de correio electrónico válido", - // "info.feedback.error.message.required" : "A comment is required", - "info.feedback.error.message.required" : "Deve inserir uma mensagem", + // "info.feedback.error.message.required": "A comment is required", + "info.feedback.error.message.required": "Deve inserir uma mensagem", + + // "info.feedback.page-label": "Page", + "info.feedback.page-label": "Página/URL de contexo:", - // "info.feedback.page-label" : "Page", - "info.feedback.page-label" : "Página/URL de contexo:", - - // "info.feedback.page_help" : "The page related to your feedback", - "info.feedback.page_help" : "Esta é a página/URL que contextualiza o seu contacto.", + // "info.feedback.page_help": "The page related to your feedback", + "info.feedback.page_help": "Esta é a página/URL que contextualiza o seu contacto.", // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este item é privado", @@ -3533,11 +3533,11 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Fechar", - // "item.page.filesection.original.bundle" : "Original bundle", + // "item.page.filesection.original.bundle": "Original bundle", "item.page.filesection.original.bundle": "Principais", - // "item.page.filesection.license.bundle" : "License bundle", - "item.page.filesection.license.bundle" : "Licença", + // "item.page.filesection.license.bundle": "License bundle", + "item.page.filesection.license.bundle": "Licença", // "item.page.return": "Back", "item.page.return": "Voltar", @@ -3581,35 +3581,35 @@ // "item.preview.dc.type": "Type:", "item.preview.dc.type": "Tipo:", - // "item.preview.oaire.citation.issue" : "Issue", - "item.preview.oaire.citation.issue" : "Issue", + // "item.preview.oaire.citation.issue": "Issue", + "item.preview.oaire.citation.issue": "Issue", - // "item.preview.oaire.citation.volume" : "Volume", - "item.preview.oaire.citation.volume" : "Volume", + // "item.preview.oaire.citation.volume": "Volume", + "item.preview.oaire.citation.volume": "Volume", - // "item.preview.dc.relation.issn" : "ISSN", - "item.preview.dc.relation.issn" : "ISSN", + // "item.preview.dc.relation.issn": "ISSN", + "item.preview.dc.relation.issn": "ISSN", - // "item.preview.dc.relation.eissn" : "EISSN", - "item.preview.dc.relation.eissn" : "EISSN", + // "item.preview.dc.relation.eissn": "EISSN", + "item.preview.dc.relation.eissn": "EISSN", - // "item.preview.dc.identifier.isbn" : "ISBN", - "item.preview.dc.identifier.isbn" : "ISBN", + // "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.isbn": "ISBN", - // "item.preview.dc.identifier.eisbn" : "EISBN", - "item.preview.dc.identifier.eisbn" : "EISBN", + // "item.preview.dc.identifier.eisbn": "EISBN", + "item.preview.dc.identifier.eisbn": "EISBN", - // "item.preview.dc.identifier.tid" : "TID", - "item.preview.dc.identifier.tid" : "TID", + // "item.preview.dc.identifier.tid": "TID", + "item.preview.dc.identifier.tid": "TID", // "item.preview.dc.identifier": "Identifier:", "itemm.preview.dc.identifier": "Identificador:", - // "item.preview.dc.relation.ispartof" : "Journal or Serie", - "item.preview.dc.relation.ispartof" : "Revista ou Série", + // "item.preview.dc.relation.ispartof": "Journal or Serie", + "item.preview.dc.relation.ispartof": "Revista ou Série", - // "item.preview.dc.identifier.doi" : "DOI", - "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.identifier.doi": "DOI", // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -4475,14 +4475,14 @@ // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "Deixar de assumir o papel do utilizador", - // "nav.subscriptions" : "Subscriptions", - "nav.subscriptions" : "Subscrições de alertas", + // "nav.subscriptions": "Subscriptions", + "nav.subscriptions": "Subscrições de alertas", - // "nav.toggle" : "Toggle navigation", - "nav.toggle" : "Alternar a navegação", + // "nav.toggle": "Toggle navigation", + "nav.toggle": "Alternar a navegação", - // "nav.user.description" : "User profile bar", - "nav.user.description" : "Barra do perfil de utilizador", + // "nav.user.description": "User profile bar", + "nav.user.description": "Barra do perfil de utilizador", // "none.listelement.badge": "Item", "none.listelement.badge": "Item", @@ -4634,16 +4634,16 @@ // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Criar um novo processo", - // "process.detail.arguments" : "Arguments", + // "process.detail.arguments": "Arguments", "process.detail.arguments": "Argumentos", - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + // "process.detail.arguments.empty": "This process doesn't contain any arguments", "process.detail.arguments.empty": "Este processo não contém argumentos", - // "process.detail.back" : "Back", + // "process.detail.back": "Back", "process.detail.back": "Voltar", - // "process.detail.output" : "Process Output", + // "process.detail.output": "Process Output", "process.detail.output": "Output do Processo", // "process.detail.logs.button": "Retrieve process output", @@ -4655,29 +4655,29 @@ // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Este processo não tem output", - // "process.detail.output-files" : "Output Files", + // "process.detail.output-files": "Output Files", "process.detail.output-files": "Ficheiros do Output", - // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // "process.detail.output-files.empty": "This process doesn't contain any output files", "process.detail.output-files.empty": "Este processo não possui nenhum ficheiro de output", - // "process.detail.script" : "Script", + // "process.detail.script": "Script", "process.detail.script": "Script", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // "process.detail.title": "Process: {{ id }} - {{ name }}", "process.detail.title": "Processo: {{ id }} - {{ name }}", - // "process.detail.start-time" : "Start time", + // "process.detail.start-time": "Start time", "process.detail.start-time": "Início", - // "process.detail.end-time" : "Finish time", + // "process.detail.end-time": "Finish time", "process.detail.end-time": "Fim", - // "process.detail.status" : "Status", + // "process.detail.status": "Status", "process.detail.status": "Estado", - // "process.detail.create" : "Create similar process", - "process.detail.create" : "Criar processo similar", + // "process.detail.create": "Create similar process", + "process.detail.create": "Criar processo similar", // "process.detail.actions": "Actions", "process.detail.actions": "Ações", @@ -4703,22 +4703,22 @@ // "process.detail.delete.error": "Something went wrong when deleting the process", "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", - // "process.overview.table.finish" : "Finish time (UTC)", - "process.overview.table.finish" : "Hora de término (UTC)", + // "process.overview.table.finish": "Finish time (UTC)", + "process.overview.table.finish": "Hora de término (UTC)", - // "process.overview.table.id" : "Process ID", + // "process.overview.table.id": "Process ID", "process.overview.table.id": "ID do Processo", - // "process.overview.table.name" : "Name", - "process.overview.table.name" : "Nome", + // "process.overview.table.name": "Name", + "process.overview.table.name": "Nome", - // "process.overview.table.start" : "Start time (UTC)", - "process.overview.table.start" : "Hora de início (UTC)", + // "process.overview.table.start": "Start time (UTC)", + "process.overview.table.start": "Hora de início (UTC)", - // "process.overview.table.status" : "Status", + // "process.overview.table.status": "Status", "process.overview.table.status": "Estado", - // "process.overview.table.user" : "User", + // "process.overview.table.user": "User", "process.overview.table.user": "Utilizador", // "process.overview.title": "Processes Overview", @@ -5303,7 +5303,7 @@ // "search.title": "Search", "search.title": "Pesquisa", - // "search.breadcrumbs": "Search", + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Pesquisar", // "search.search-form.placeholder": "Search the repository ...", @@ -5935,8 +5935,8 @@ // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", - - // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", @@ -6484,9 +6484,9 @@ // "submission.sections.status.warnings.aria": "has warnings", "submission.sections.status.warnings.aria": "tem avisos", - + // "submission.sections.status.info.title": "Additional Information", - "submission.sections.status.info.title": "Informação adicional", + "submission.sections.status.info.title": "Informação adicional", // "submission.sections.status.info.aria": "Additional Information", "submission.sections.status.info.aria": "Informação adicional", @@ -6644,8 +6644,8 @@ // "submission.sections.license.required": "You must accept the license", "submission.sections.license.required": "A aceitação da licença constitui um requisito", - // "submission.sections.license.notgranted": "You must accept the license", - "submission.sections.license.notgranted": "Deve aceitar a licença", + // "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "Deve aceitar a licença", // "submission.sections.sherpa.publication.information": "Publication information", "submission.sections.sherpa.publication.information": "Informação sobre a publicação", @@ -7157,8 +7157,8 @@ // "idle-modal.extend-session": "Extend session", "idle-modal.extend-session": "Prolongar sessão", - // "researcher.profile.action.processing" : "Processing...", - "researcher.profile.action.processing" : "A processar...", + // "researcher.profile.action.processing": "Processing...", + "researcher.profile.action.processing": "A processar...", // "researcher.profile.associated": "Researcher profile associated", "researcher.profile.associated": "Perfil do investigador associado", @@ -7190,11 +7190,11 @@ // "researcher.profile.view": "View", "researcher.profile.view": "Ver", - // "researcher.profile.private.visibility" : "PRIVATE", - "researcher.profile.private.visibility" : "PRIVADO", + // "researcher.profile.private.visibility": "PRIVATE", + "researcher.profile.private.visibility": "PRIVADO", - // "researcher.profile.public.visibility" : "PUBLIC", - "researcher.profile.public.visibility" : "PÚBLICO", + // "researcher.profile.public.visibility": "PUBLIC", + "researcher.profile.public.visibility": "PÚBLICO", // "researcher.profile.status": "Status:", "researcher.profile.status": "Estado:", @@ -7202,17 +7202,17 @@ // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", "researcherprofile.claim.not-authorized": "Não possui autorização para reinvindicar este artigo. Para mais pormenores, contactar o(s) administrador(es).", - // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", - "researcherprofile.error.claim.body" : "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body": "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", - // "researcherprofile.error.claim.title" : "Error", - "researcherprofile.error.claim.title" : "Erro", + // "researcherprofile.error.claim.title": "Error", + "researcherprofile.error.claim.title": "Erro", - // "researcherprofile.success.claim.body" : "Profile claimed with success", - "researcherprofile.success.claim.body" : "Perfil reivindicado com sucesso", + // "researcherprofile.success.claim.body": "Profile claimed with success", + "researcherprofile.success.claim.body": "Perfil reivindicado com sucesso", - // "researcherprofile.success.claim.title" : "Success", - "researcherprofile.success.claim.title" : "Sucesso", + // "researcherprofile.success.claim.title": "Success", + "researcherprofile.success.claim.title": "Sucesso", // "person.page.orcid.create": "Create an ORCID iD", "person.page.orcid.create": "Criar um ORCID iD", @@ -7220,8 +7220,8 @@ // "person.page.orcid.granted-authorizations": "Granted authorizations", "person.page.orcid.granted-authorizations": "Autorizações concedidas", - // "person.page.orcid.grant-authorizations" : "Grant authorizations", - "person.page.orcid.grant-authorizations" : "Conceder autorizações", + // "person.page.orcid.grant-authorizations": "Grant authorizations", + "person.page.orcid.grant-authorizations": "Conceder autorizações", // "person.page.orcid.link": "Connect to ORCID iD", "person.page.orcid.link": "Ligar ao ORCID iD", @@ -7268,44 +7268,44 @@ // "person.page.orcid.save.preference.changes": "Update settings", "person.page.orcid.save.preference.changes": "Atualizar configurações", - // "person.page.orcid.sync-profile.affiliation" : "Affiliation", - "person.page.orcid.sync-profile.affiliation" : "Afiliação", + // "person.page.orcid.sync-profile.affiliation": "Affiliation", + "person.page.orcid.sync-profile.affiliation": "Afiliação", - // "person.page.orcid.sync-profile.biographical" : "Biographical data", - "person.page.orcid.sync-profile.biographical" : "Dados biográficos", + // "person.page.orcid.sync-profile.biographical": "Biographical data", + "person.page.orcid.sync-profile.biographical": "Dados biográficos", - // "person.page.orcid.sync-profile.education" : "Education", - "person.page.orcid.sync-profile.education" : "Educação", + // "person.page.orcid.sync-profile.education": "Education", + "person.page.orcid.sync-profile.education": "Educação", - // "person.page.orcid.sync-profile.identifiers" : "Identifiers", - "person.page.orcid.sync-profile.identifiers" : "Identificadores", + // "person.page.orcid.sync-profile.identifiers": "Identifiers", + "person.page.orcid.sync-profile.identifiers": "Identificadores", - // "person.page.orcid.sync-fundings.all" : "All fundings", - "person.page.orcid.sync-fundings.all" : "Todos financiamentos", + // "person.page.orcid.sync-fundings.all": "All fundings", + "person.page.orcid.sync-fundings.all": "Todos financiamentos", - // "person.page.orcid.sync-fundings.mine" : "My fundings", - "person.page.orcid.sync-fundings.mine" : "Meus financiamentos", + // "person.page.orcid.sync-fundings.mine": "My fundings", + "person.page.orcid.sync-fundings.mine": "Meus financiamentos", - // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", - "person.page.orcid.sync-fundings.my_selected" : "Financiamentos selecionados", + // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", + "person.page.orcid.sync-fundings.my_selected": "Financiamentos selecionados", - // "person.page.orcid.sync-fundings.disabled" : "Disabled", - "person.page.orcid.sync-fundings.disabled" : "Desligado", + // "person.page.orcid.sync-fundings.disabled": "Disabled", + "person.page.orcid.sync-fundings.disabled": "Desligado", - // "person.page.orcid.sync-publications.all" : "All publications", - "person.page.orcid.sync-publications.all" : "Todas as publicações", + // "person.page.orcid.sync-publications.all": "All publications", + "person.page.orcid.sync-publications.all": "Todas as publicações", - // "person.page.orcid.sync-publications.mine" : "My publications", - "person.page.orcid.sync-publications.mine" : "As minhas publicações", + // "person.page.orcid.sync-publications.mine": "My publications", + "person.page.orcid.sync-publications.mine": "As minhas publicações", - // "person.page.orcid.sync-publications.my_selected" : "Selected publications", - "person.page.orcid.sync-publications.my_selected" : "Publicações selecionadas", + // "person.page.orcid.sync-publications.my_selected": "Selected publications", + "person.page.orcid.sync-publications.my_selected": "Publicações selecionadas", - // "person.page.orcid.sync-publications.disabled" : "Disabled", - "person.page.orcid.sync-publications.disabled" : "Desligado", + // "person.page.orcid.sync-publications.disabled": "Disabled", + "person.page.orcid.sync-publications.disabled": "Desligado", - // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", - "person.page.orcid.sync-queue.discard" : "Cancelar a alteração e não sincronizar com o registo ORCID", + // "person.page.orcid.sync-queue.discard": "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard": "Cancelar a alteração e não sincronizar com o registo ORCID", // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", "person.page.orcid.sync-queue.discard.error": "A eliminação do registo da fila do ORCID falhou", @@ -7316,14 +7316,14 @@ // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", - // "person.page.orcid.sync-queue.table.header.type" : "Type", - "person.page.orcid.sync-queue.table.header.type" : "Tipo", + // "person.page.orcid.sync-queue.table.header.type": "Type", + "person.page.orcid.sync-queue.table.header.type": "Tipo", - // "person.page.orcid.sync-queue.table.header.description" : "Description", - "person.page.orcid.sync-queue.table.header.description" : "Descrição", + // "person.page.orcid.sync-queue.table.header.description": "Description", + "person.page.orcid.sync-queue.table.header.description": "Descrição", - // "person.page.orcid.sync-queue.table.header.action" : "Action", - "person.page.orcid.sync-queue.table.header.action" : "Ação", + // "person.page.orcid.sync-queue.table.header.action": "Action", + "person.page.orcid.sync-queue.table.header.action": "Ação", // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", "person.page.orcid.sync-queue.description.affiliation": "Afiliações", @@ -7388,8 +7388,8 @@ // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", - // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", - "person.page.orcid.sync-queue.send" : "Sincronizar com o registo ORCID", + // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send": "Sincronizar com o registo ORCID", // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", "person.page.orcid.sync-queue.send.unauthorized-error.title": "A submissão ao ORCID falhou por falta de autorizações.", @@ -7442,8 +7442,8 @@ // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", - // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "A data de publicação deve ser um ano após 1900", + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "A data de publicação deve ser um ano após 1900", // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "A organização a ser enviada requer um endereço", From 6ad0f99ca471ea8735faad179e79206a3fcb91fa Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 20:06:12 +0100 Subject: [PATCH 730/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 2595 +++++++++++++++++------------------ 1 file changed, 1297 insertions(+), 1298 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c7b677d597..8dff07a387 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,502 +1,502 @@ { // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 - + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", - + // "401.link.home-page": "Take me to the home page", "401.link.home-page": "Voltar à página de início", - + // "401.unauthorized": "unauthorized", "401.unauthorized": "Não autorizado", - + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "Não possui permissões para aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", - + // "403.link.home-page": "Take me to the home page", "403.link.home-page": "Voltar à página de início", - + // "403.forbidden": "forbidden", "403.forbidden": "Proibido", - + // "500.page-internal-server-error": "Service Unavailable", "500.page-internal-server-error": "Serviço indisponível", - + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", "500.help": "O servidor encontra-se temporariamete indisponível para responder ao seu pedido, devido a processos de manutenção em curso ou capacidade de resposta. Por favor tente mais tarde.", - + // "500.link.home-page": "Take me to the home page", "500.link.home-page": "Voltar à página de início", - + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.help": "Não encontramos a página que procura. A página pode ter sido movida ou eliminada. Pode utilizar o botão em baixo para voltar à página de início. ", - + // "404.link.home-page": "Take me to the home page", "404.link.home-page": "Voltar à página de início", - + // "404.page-not-found": "page not found", "404.page-not-found": "página não encontrada", - + // "error-page.description.401": "unauthorized", "error-page.description.401": "Não autorizado", - + // "error-page.description.403": "forbidden", "error-page.description.403": "Proibido", - + // "error-page.description.500": "Service Unavailable", "error-page.description.500": "Serviço indisponível", - + // "error-page.description.404": "page not found", "error-page.description.404": "página não encontrada", - + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", "error-page.orcid.generic-error": "Ocorreu um erro com a sua autenticação via ORCID. Certifique-se que partilhou o seu endereço de email associado à sua conta ORCID com o repositório. Se o erro persistir, por favor contacte o administrador do sistema.", - + // "access-status.embargo.listelement.badge": "Embargo", "access-status.embargo.listelement.badge": "Embargado", - + // "access-status.metadata.only.listelement.badge": "Metadata only", "access-status.metadata.only.listelement.badge": "Apenas Metadados", - + // "access-status.open.access.listelement.badge": "Open Access", "access-status.open.access.listelement.badge": "Acesso Aberto", - + // "access-status.restricted.listelement.badge": "Restricted", "access-status.restricted.listelement.badge": "Acesso Restrito", - + // "access-status.unknown.listelement.badge": "Unknown", "access-status.unknown.listelement.badge": "Desconhecido", - + // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Tarefas de curadoria", - + // "admin.curation-tasks.title": "System curation tasks", "admin.curation-tasks.title": "Tarefas de curadoria", - + // "admin.curation-tasks.header": "System curation tasks", "admin.curation-tasks.header": "Tarefas de curadoria", - + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", "admin.registries.bitstream-formats.breadcrumbs": "Registo de formatos", - + // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", "admin.registries.bitstream-formats.create.breadcrumbs": "Registo de formatos de ficheiro", - + // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", "admin.registries.bitstream-formats.create.failure.content": "Ocorreu um erro durante a criação do novo formato de ficheiro.", - + // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Falha", - + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", "admin.registries.bitstream-formats.create.head": "Criar formato de ficheiro", - + // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Adicionar um novo formato de ficheiro", - + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", "admin.registries.bitstream-formats.create.success.content": "O novo formato de ficheiro foi criado com sucesso.", - + // "admin.registries.bitstream-formats.create.success.head": "Success", "admin.registries.bitstream-formats.create.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.failure.amount": "Falha ao remover {{ amount }} formato(s)", - + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", "admin.registries.bitstream-formats.delete.failure.head": "Falha", - + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.success.amount": "Removeu {{ amount }} formato(s) com sucesso", - + // "admin.registries.bitstream-formats.delete.success.head": "Success", "admin.registries.bitstream-formats.delete.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", "admin.registries.bitstream-formats.description": "Esta lista de formatos de ficheiro apresenta informações sobre formatos conhecidos e os seus níveis de suporte.", - + // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", "admin.registries.bitstream-formats.edit.breadcrumbs": "Formatos de ficheiro", - + // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", - + // "admin.registries.bitstream-formats.edit.description.label": "Description", "admin.registries.bitstream-formats.edit.description.label": "Descrição", - + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", "admin.registries.bitstream-formats.edit.extensions.hint": "Extensões são extensões de ficheiro que são usadas para identificar automaticamente o formato dos ficheiros enviados. Pode informar várias extensões para cada formato.", - + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", "admin.registries.bitstream-formats.edit.extensions.label": "Extensões de ficheiro", - + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", "admin.registries.bitstream-formats.edit.extensions.placeholder": "Indique uma extenção de ficheiro sem o ponto", - + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", "admin.registries.bitstream-formats.edit.failure.content": "Ocorreu um erro ao editar o formato de bitstream.", - + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", "admin.registries.bitstream-formats.edit.failure.head": "Falha", - + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", "admin.registries.bitstream-formats.edit.head": "Formato de bitstream: {{ format }}", - + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", "admin.registries.bitstream-formats.edit.internal.hint": "Formatos marcados como internos são ocultos para o utilizador, usados por motivos administrativos.", - + // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Interno", - + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", "admin.registries.bitstream-formats.edit.mimetype.hint": "O MIME type associado a este formato não tem que ser único.", - + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", - + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", "admin.registries.bitstream-formats.edit.shortDescription.hint": "Um nome único para este formato (exemplo. Microsoft Word XP ou Microsoft Word 2000)", - + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", "admin.registries.bitstream-formats.edit.shortDescription.label": "Nome", - + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", "admin.registries.bitstream-formats.edit.success.content": "O formato de bitstream foi editado com sucesso.", - + // "admin.registries.bitstream-formats.edit.success.head": "Success", "admin.registries.bitstream-formats.edit.success.head": "Sucesso", - + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", "admin.registries.bitstream-formats.edit.supportLevel.hint": "O nível de suporte que a sua instituição promete para este formato.", - + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", "admin.registries.bitstream-formats.edit.supportLevel.label": "Nível de suporte", - + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", "admin.registries.bitstream-formats.head": "Registo de formatos de ficheiros", - + // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nenhum formato de bitstream para exibir.", - + // "admin.registries.bitstream-formats.table.delete": "Delete selected", "admin.registries.bitstream-formats.table.delete": "Apagar selecionado(s)", - + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", "admin.registries.bitstream-formats.table.deselect-all": "Desselecionar todos", - + // "admin.registries.bitstream-formats.table.internal": "internal", "admin.registries.bitstream-formats.table.internal": "Interno", - + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.mimetype": "MIME Type", - + // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - + // "admin.registries.bitstream-formats.table.id": "ID", "admin.registries.bitstream-formats.table.id": "ID", - + // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Voltar", - + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Suportado", - + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Desconhecido", - + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", "admin.registries.bitstream-formats.table.supportLevel.head": "Nível de suporte", - + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", "admin.registries.bitstream-formats.title": "Registo de formatos de ficheiro", - + // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Registo de metadados", - + // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "O registo de metadados mantém a lista de todos os campos de metadados disponíveis no repositório. Estes campos podem ser divididos em multiplos esquemas. No entanto, o DSpace requer esquemas de Dublin Core qualificados.", - + // "admin.registries.metadata.form.create": "Create metadata schema", "admin.registries.metadata.form.create": "Criar esquema de metadados", - + // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Editar esquema de metadados", - + // "admin.registries.metadata.form.name": "Name", "admin.registries.metadata.form.name": "Nome", - + // "admin.registries.metadata.form.namespace": "Namespace", "admin.registries.metadata.form.namespace": "Namespace", - + // "admin.registries.metadata.head": "Metadata Registry", "admin.registries.metadata.head": "Registo de metadados", - + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nenhum esquema de metadados para mostrar.", - + // "admin.registries.metadata.schemas.table.delete": "Delete selected", "admin.registries.metadata.schemas.table.delete": "Apagar selecionado(s)", - + // "admin.registries.metadata.schemas.table.id": "ID", "admin.registries.metadata.schemas.table.id": "ID", - + // "admin.registries.metadata.schemas.table.name": "Name", "admin.registries.metadata.schemas.table.name": "Nome", - + // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Namespace", - + // "admin.registries.metadata.title": "Metadata Registry", "admin.registries.metadata.title": "Registo de metadados", - + // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Esquema de metadados", - + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Este é o esquema de metadados para \"{{namespace}}\".", - + // "admin.registries.schema.fields.head": "Schema metadata fields", "admin.registries.schema.fields.head": "Campos do esquema de metadados", - + // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nenhum campo de metadado para exibir.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Apagar selecionado(s)", - + // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - + // "admin.registries.schema.fields.table.id": "ID", "admin.registries.schema.fields.table.id": "ID", - + // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Descrição", - + // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Criar elemento de metadados", - + // "admin.registries.schema.form.edit": "Edit metadata field", "admin.registries.schema.form.edit": "Editar campo de metadados", - + // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elemento", - + // "admin.registries.schema.form.qualifier": "Qualifier", "admin.registries.schema.form.qualifier": "Qualificador", - + // "admin.registries.schema.form.scopenote": "Scope Note", "admin.registries.schema.form.scopenote": "Nota de âmbito", - + // "admin.registries.schema.head": "Metadata Schema", "admin.registries.schema.head": "Esquema de metadados", - + // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Criou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.failure": "Falhou ao apagar {{amount}} esquema(s) de metadados", - + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.success": "Apagou {{amount}} esquema(s) de metadados com sucesso", - + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.edited": "Editou o esquema de metadados \"{{prefix}}\" com sucesso", - + // "admin.registries.schema.notification.failure": "Error", "admin.registries.schema.notification.failure": "Erro", - + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", "admin.registries.schema.notification.field.created": "Criou o campo de metadado \"{{field}}\" com sucesso", - + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.failure": "Falhou ao apagar {{amount}} campo(s) de metadados", - + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.success": "Apagou {{amount}} campo(s) de metadados com sucesso", - + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", "admin.registries.schema.notification.field.edited": "Editou o campo de metadado \"{{field}}\" com sucesso", - + // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Sucesso", - + // "admin.registries.schema.return": "Back", "admin.registries.schema.return": "Voltar", - + // "admin.registries.schema.title": "Metadata Schema Registry", "admin.registries.schema.title": "Registo de esquemas de metadados", - + // "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.delete": "Apagar utilizador", - + // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", - + // "admin.access-control.epeople.actions.reset": "Reset password", "admin.access-control.epeople.actions.reset": "Redefinir password", - + // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", - + // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Utilizadores", - + // "admin.access-control.epeople.title": "EPeople", "admin.access-control.epeople.title": "Utilizadores", - + // "admin.access-control.epeople.head": "EPeople", "admin.access-control.epeople.head": "Utilizadores", - + // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Pesquisar", - + // "admin.access-control.epeople.button.see-all": "Browse All", "admin.access-control.epeople.button.see-all": "Pesquisar tudo", - + // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metadados", - + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", "admin.access-control.epeople.search.scope.email": "Email (exato)", - + // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Pesquisar", - + // "admin.access-control.epeople.search.placeholder": "Search people...", "admin.access-control.epeople.search.placeholder": "Pesquisar utilizadores...", - - // "admin.access-control.epeople.button.add": "Add EPerson", + + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "Adicionar utilizador", - + // "admin.access-control.epeople.table.id": "ID", "admin.access-control.epeople.table.id": "ID", - + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Nome", - + // "admin.access-control.epeople.table.email": "E-mail (exact)", "admin.access-control.epeople.table.email": "Email (exato)", - + // "admin.access-control.epeople.table.edit": "Edit", "admin.access-control.epeople.table.edit": "Editar", - + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Editar \"{{name}}\"", - + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Não possui autorização para editar este grupo", - + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Apagar \"{{name}}\"", - + // "admin.access-control.epeople.no-items": "No EPeople to show.", "admin.access-control.epeople.no-items": "Sem utilizadores para mostrar.", - + // "admin.access-control.epeople.form.create": "Create EPerson", "admin.access-control.epeople.form.create": "Criar utilizador", - + // "admin.access-control.epeople.form.edit": "Edit EPerson", "admin.access-control.epeople.form.edit": "Editar utilizador", - + // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Nome", - + // "admin.access-control.epeople.form.lastName": "Last name", "admin.access-control.epeople.form.lastName": "Apelido", - + // "admin.access-control.epeople.form.email": "E-mail", "admin.access-control.epeople.form.email": "Email", - + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", "admin.access-control.epeople.form.emailHint": "Deve conter um email válido", - + // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Pode iniciar sessão", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Requer certificado", - + // "admin.access-control.epeople.form.return": "Back", "admin.access-control.epeople.form.return": "Voltar", - + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "Utilizador criado com sucesso \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.failure": "Falha ao criar o Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Falha ao criar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Falha ao editar o Utilizador \"{{name}}\", o email \"{{email}}\" já está registado no repositório.", - + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.success": "Utilizador editado com successo \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.failure": "Falha ao editor Utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.success": "Utilizador removido com sucesso \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.failure": "Falha ao remover o utilizador \"{{name}}\"", - + // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dos grupos:", - + // "admin.access-control.epeople.form.table.id": "ID", "admin.access-control.epeople.form.table.id": "ID", - + // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nome", - + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", "admin.access-control.epeople.form.table.collectionOrCommunity": "Coleção/Comunidade", - + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", "admin.access-control.epeople.form.memberOfNoGroups": "Este utilizador não é membro de nenhum grupo", - + // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Adicionar a grupos", - + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.failure": "Falha ao apagar utilizador: \"{{name}}\"", - + // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", "admin.access-control.epeople.notification.deleted.success": "Utilizador removido com sucesso: \"{{name}}\"", - + // "admin.access-control.groups.title": "Groups", "admin.access-control.groups.title": "Grupos", - + // "admin.access-control.groups.breadcrumbs": "Groups", "admin.access-control.groups.breadcrumbs": "Grupos", - + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", "admin.access-control.groups.singleGroup.breadcrumbs": "Editar grupo", - + // "admin.access-control.groups.title.singleGroup": "Edit Group", "admin.access-control.groups.title.singleGroup": "Editar grupo", - + // "admin.access-control.groups.title.addGroup": "New Group", "admin.access-control.groups.title.addGroup": "Novo grupo", - + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", "admin.access-control.groups.addGroup.breadcrumbs": "Novo grupo", - + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Grupos", - + // "admin.access-control.groups.button.add": "Add group", "admin.access-control.groups.button.add": "Adicionar grupo", - + // "admin.access-control.groups.search.head": "Search groups", "admin.access-control.groups.search.head": "Pesquisar grupos", @@ -505,7 +505,7 @@ // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Pesquisar", - + // "admin.access-control.groups.search.placeholder": "Search groups...", "admin.access-control.groups.search.placeholder": "Pesquisar grupos...", @@ -517,7 +517,7 @@ // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", "admin.access-control.groups.table.collectionOrCommunity": "Coleção/Comunidade", - + // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Membros", @@ -535,19 +535,19 @@ // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", "admin.access-control.groups.notification.deleted.success": "Grupo removido com sucesso \"{{name}}\"", - + // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Falha ao remover grupo \"{{name}}\"", - + "admin.access-control.groups.notification.deleted.failure.title": "Falha ao remover grupo \"{{name}}\"", + // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{cause}}\"", - + // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.permanent": "Este grupo é permanente, não pode ser editado ou apagado. Pode adicionar ou remover membros deste grupo nesta página.", - + // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.workflowGroup": "Este grupo não pode ser editado ou apagado porque corresponde a um papel no 'workflow' de depósito em \"{{name}}\" {{comcol}}. Pode apagá-lo na aba \"Atribuir Papéis\" na edição da página {{comcol}}. Pode adicionar ou remover membros nesta página.", - + // "admin.access-control.groups.form.head.create": "Create group", "admin.access-control.groups.form.head.create": "Criar grupo", @@ -556,7 +556,7 @@ // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Nome do grupo", - + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", "admin.access-control.groups.form.groupCommunity": "Comunidade ou Coleção", @@ -610,10 +610,10 @@ // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", "admin.access-control.groups.form.members-list.search.head": "Adicionar utilizador", - + // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", "admin.access-control.groups.form.members-list.button.see-all": "Percorrer todos", - + // "admin.access-control.groups.form.members-list.headMembers": "Current Members", "admin.access-control.groups.form.members-list.headMembers": "Membros atuais", @@ -622,7 +622,7 @@ // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (completo)", - + // "admin.access-control.groups.form.members-list.search.button": "Search", "admin.access-control.groups.form.members-list.search.button": "Pesquisar", @@ -640,7 +640,7 @@ // "admin.access-control.groups.form.members-list.table.netid": "NetID", "admin.access-control.groups.form.members-list.table.netid": "NetID", - + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", "admin.access-control.groups.form.members-list.table.edit": "Remover / Adicionar", @@ -655,10 +655,10 @@ // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro removido com sucesso: \"{{name}}\"", - + // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", - + // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Adicionar membro com o nome \"{{name}}\"", @@ -682,7 +682,7 @@ // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", "admin.access-control.groups.form.subgroups-list.button.see-all": "Percorrer todos", - + // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", "admin.access-control.groups.form.subgroups-list.headSubgroups": "Subgrupos atuais", @@ -694,7 +694,7 @@ // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Nome", - + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Coleção/Comunidade", @@ -718,10 +718,10 @@ // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Subgrupo removido com sucesso: \"{{name}}\"", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Falha ao remover o subgrupo: \"{{name}}\"", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Sem grupo ativo, indique um nome primeiro.", @@ -733,20 +733,20 @@ // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Este grupo ainda não tem subgrupos.", - + // "admin.access-control.groups.form.return": "Back", "admin.access-control.groups.form.return": "Voltar", - + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", "admin.access-control.groups.form.tooltip.editGroupPage": "Nesta página, pode modificar as propriedades e os membros de um grupo. Na secção superior, pode editar o nome e a descrição do grupo, a menos que se trate de um grupo administrativo para uma coleção ou comunidade, em que o nome e a descrição do grupo são auto-gerados e não podem ser editados. Nas seções seguintes, pode editar o nome e a descrição do grupo. Ver [wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+ou+gerir+a+utilizador+grupo) para mais detalhes.", // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Para adicionar ou remover um utilizador de/para este grupo, clique no botão 'Procurar tudo' ou use a barra de pesquisa em baixo para procurar utilizadores (use o menu suspenso, à esquerda da barra de pesquisa, para escolher se pretende pesquisar por metadados ou por e-mail). Depois clique no ícone 'mais' para cada utilizador que deseja adicionar na lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", - + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Para adicionar ou remover um sub-grupo de/para grupo, clique no botão 'Procurar Tudo' ou use a barra de pesquisa em baixo para procurar utilizadores. Depois clique no ícone 'mais' para cada utilizador que deseja adicionar lista em baixo, ou no ícone 'lixo' para cada utilizador que deseja remover. A lista pode conter várias páginas: utilize os controlos de página no final da lista para navegar para as páginas seguintes. Quando estiver pronto, guarde as suas alterações clicando no botão 'Guardar' na seção superior.", - // "admin.search.breadcrumbs": "Administrative Search", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Pesquisa administrativa", // "admin.search.collection.edit": "Edit", @@ -760,13 +760,13 @@ // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Editar", - + // "admin.search.item.make-private": "Make non-discoverable", "admin.search.item.make-private": "Tornar privado", - + // "admin.search.item.make-public": "Make discoverable", "admin.search.item.make-public": "Tornar público", - + // "admin.search.item.move": "Move", "admin.search.item.move": "Mover", @@ -781,64 +781,64 @@ // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Pesquisa administrativa", - + // "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.breadcrumbs": "Gestão do workflow", - + // "admin.workflow.title": "Administer Workflow", "admin.workflow.title": "Gestão do workflow", - + // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Workflow", - + // "admin.workflow.item.workspace": "Workspace", "admin.workflow.item.workspace": "Área de trabalho", - + // "admin.workflow.item.delete": "Delete", - "admin.workflow.item.delete": "Apagar", - + "admin.workflow.item.delete": "Apagar", + // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Devolver", - + // "admin.workflow.item.policies": "Policies", "admin.workflow.item.policies": "Políticas", - + // "admin.workflow.item.supervision": "Supervision", - "admin.workflow.item.supervision": "Supervisão", + "admin.workflow.item.supervision": "Supervisão", // "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.metadata-import.breadcrumbs": "Importação de metadados", - + // "admin.batch-import.breadcrumbs": "Import Batch", "admin.batch-import.breadcrumbs": "Importação em lote (batch)", - + // "admin.metadata-import.title": "Import Metadata", "admin.metadata-import.title": "Importação de metadados", - + // "admin.batch-import.title": "Import Batch", "admin.batch-import.title": "Importação em lote (batch)", - + // "admin.metadata-import.page.header": "Import Metadata", "admin.metadata-import.page.header": "Importação de metadados", - + // "admin.batch-import.page.header": "Import Batch", "admin.batch-import.page.header": "Importação em lote (batch)", - + // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros .csv que contenham operações em lote de metadados", // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", - "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", - + "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Arraste ficheiro .csv para importar metadados", - + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", "admin.batch-import.page.dropMsg": "Arraste ficheiro .zip para importação em lote", - + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", "admin.metadata-import.page.dropMsgReplace": "Arraste ficheiro .csv para substituir metadados a importar", - + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", "admin.batch-import.page.dropMsgReplace": "Arraste ficheiro .zip para substituir importação em lote", @@ -847,13 +847,13 @@ // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Continuar", - + // "admin.metadata-import.page.button.select-collection": "Select Collection", "admin.metadata-import.page.button.select-collection": "Selecione a coleção", - + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Selecione um ficheiro!", - + // "admin.batch-import.page.error.addFile": "Select Zip file first!", "admin.batch-import.page.error.addFile": "Selecione primeiro o ficheiro .zip!", @@ -862,7 +862,7 @@ // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", "admin.metadata-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .csv carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", - + // "advanced-workflow-action.rating.form.rating.label": "Rating", "advanced-workflow-action.rating.form.rating.label": "Classificação", @@ -916,7 +916,7 @@ // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identidade", - + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", @@ -928,7 +928,7 @@ // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remover membro com o nome \"{{name}}\"", - + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Membro adicionado com sucessso: \"{{name}}\"", @@ -942,7 +942,7 @@ "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Falha ao remover o membro: \"{{name}}\"", // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Adicionar membro com nome \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Adicionar membro com nome \"{{name}}\"", // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Atualmente sem grupo ativo, submeter um nome primeiro.", @@ -960,14 +960,14 @@ "admin.batch-import.page.validateOnly.hint": "Quando selecionado, o ficheiro .zip carregado será validado. Irá receber um relatório com as alterações detetadas, porém nenhuma será guardada.", // "admin.batch-import.page.remove": "remove", - "admin.batch-import.page.remove": "Remover", + "admin.batch-import.page.remove": "Remover", // "auth.errors.invalid-user": "Invalid email address or password.", "auth.errors.invalid-user": "Endereço de email ou palavra-chave inválidos.", - + // "auth.messages.expired": "Your session has expired. Please log in again.", "auth.messages.expired": "A sua sessão expirou. Por favor, autentique-se novamente.", - + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", "auth.messages.token-refresh-failed": "A atualização do token da sua sessão falhou. Por favor, autentique-se novamente.", @@ -976,7 +976,7 @@ // "bitstream.download.page.back": "Back", "bitstream.download.page.back": "Voltar", - + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", "bitstream.edit.authorizations.link": "Editar políticas dos bitstreams", @@ -984,7 +984,7 @@ "bitstream.edit.authorizations.title": "Editar políticas dos bitstreams", // "bitstream.edit.return": "Back", - "bitstream.edit.return": "Voltar", + "bitstream.edit.return": "Voltar", // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Ficheiros: ", @@ -1018,21 +1018,21 @@ // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", "bitstream.edit.form.selectedFormat.hint": "Se o formato não se encontrar listado, selecione por favor a opção \"Formato não está na lista\" e faculte detalhes em \"Descreva o novo formato\".", - + // "bitstream.edit.form.selectedFormat.label": "Selected Format", "bitstream.edit.form.selectedFormat.label": "Formato selecionado", - + // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", "bitstream.edit.form.selectedFormat.unknown": "O formato não está na lista", - + // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formato do ficheiro", // "bitstream.edit.form.iiifLabel.label": "IIIF Label", "bitstream.edit.form.iiifLabel.label": "IIIF Label", - + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", - "bitstream.edit.form.iiifLabel.hint": "Etiqueta canvas para esta imagem. Se não for fornecida será utilizada uma etiqueta padrão.", + "bitstream.edit.form.iiifLabel.hint": "Etiqueta canvas para esta imagem. Se não for fornecida será utilizada uma etiqueta padrão.", // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", "bitstream.edit.form.iiifToc.label": "Tabela de conteúdos IIIF", @@ -1047,8 +1047,8 @@ "bitstream.edit.form.iiifWidth.hint": "A largura do canvas normalmente deve corresponder à largura da imagem.", // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", - "bitstream.edit.form.iiifHeight.label": "Altura do canvas IIIF", - + "bitstream.edit.form.iiifHeight.label": "Altura do canvas IIIF", + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", "bitstream.edit.form.iiifHeight.hint": "A altura do canvas normalmente deve corresponder à altura da imagem.", @@ -1060,7 +1060,7 @@ // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Editar ficheiro", - + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", "bitstream-request-a-copy.alert.canDownload1": "Já tem acesso a este ficheiro. Se quiser descarregar o ficheiro, clique ", @@ -1096,7 +1096,7 @@ // "bitstream-request-a-copy.allfiles.label": "Files", "bitstream-request-a-copy.allfiles.label": "Ficheiro(s) pretendido(s):", - + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", "bitstream-request-a-copy.files-all-false.label": "Apenas o ficheiro solicitado", @@ -1108,7 +1108,7 @@ // "bitstream-request-a-copy.return": "Back", "bitstream-request-a-copy.return": "Voltar", - + // "bitstream-request-a-copy.submit": "Request copy", "bitstream-request-a-copy.submit": "Solicitar cópia ao autor", @@ -1119,20 +1119,20 @@ "bitstream-request-a-copy.submit.error": "Ocorreu algum erro no envio do pedido de cópia!", // "browse.back.all-results": "All browse results", - "browse.back.all-results": "Todos os resultados", - + "browse.back.all-results": "Todos os resultados", + // "browse.comcol.by.author": "By Author", "browse.comcol.by.author": "Por autor", - + // "browse.comcol.by.dateissued": "By Issue Date", "browse.comcol.by.dateissued": "Por data de publicação", - + // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Por assunto", - + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Por título", - + // "browse.comcol.head": "Browse", "browse.comcol.head": "Navegar", @@ -1141,28 +1141,28 @@ // "browse.metadata.author": "Author", "browse.metadata.author": "autor", - + // "browse.metadata.dateissued": "Issue Date", "browse.metadata.dateissued": "data de Publicação", - + // "browse.metadata.subject": "Subject", "browse.metadata.subject": "assunto", - + // "browse.metadata.title": "Title", - "browse.metadata.title": "título", + "browse.metadata.title": "título", // "browse.metadata.author.breadcrumbs": "Browse by Author", "browse.metadata.author.breadcrumbs": "Percorrer por autor", - + // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", "browse.metadata.dateissued.breadcrumbs": "Percorrer por data", - + // "browse.metadata.subject.breadcrumbs": "Browse by Subject", "browse.metadata.subject.breadcrumbs": "Percorrer por assunto", - + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Percorrer por título", - + // "pagination.next.button": "Next", "pagination.next.button": "Próximo", @@ -1171,88 +1171,88 @@ // "pagination.next.button.disabled.tooltip": "No more pages of results", "pagination.next.button.disabled.tooltip": "Sem mais páginas de resultados", - + // "browse.startsWith": ", starting with {{ startsWith }}", "browse.startsWith": ", começado por {{ startsWith }}", - + // "browse.startsWith.choose_start": "(Choose start)", "browse.startsWith.choose_start": "(Escolha o início)", // "browse.startsWith.choose_year": "(Choose year)", "browse.startsWith.choose_year": "(Escolha o ano)", - + // "browse.startsWith.choose_year.label": "Choose the issue year", "browse.startsWith.choose_year.label": "Escolha o ano", // "browse.startsWith.jump": "Filter results by year or month", "browse.startsWith.jump": "Filtrar resultados por ano ou mês", - + // "browse.startsWith.months.april": "April", "browse.startsWith.months.april": "abril", - + // "browse.startsWith.months.august": "August", "browse.startsWith.months.august": "agosto", - + // "browse.startsWith.months.december": "December", "browse.startsWith.months.december": "dezembro", - + // "browse.startsWith.months.february": "February", "browse.startsWith.months.february": "fevereiro", - + // "browse.startsWith.months.january": "January", "browse.startsWith.months.january": "janeiro", - + // "browse.startsWith.months.july": "July", "browse.startsWith.months.july": "julho", - + // "browse.startsWith.months.june": "June", "browse.startsWith.months.june": "junho", - + // "browse.startsWith.months.march": "March", "browse.startsWith.months.march": "março", - + // "browse.startsWith.months.may": "May", "browse.startsWith.months.may": "maio", - + // "browse.startsWith.months.none": "(Choose month)", "browse.startsWith.months.none": "(Escolha o mês)", - + // "browse.startsWith.months.none.label": "Choose the issue month", "browse.startsWith.months.none.label": "Escolha o mês", - + // "browse.startsWith.months.november": "November", "browse.startsWith.months.november": "novembro", - + // "browse.startsWith.months.october": "October", "browse.startsWith.months.october": "outubro", - + // "browse.startsWith.months.september": "September", "browse.startsWith.months.september": "setembro", - + // "browse.startsWith.submit": "Browse", "browse.startsWith.submit": "Pesquisar", - + // "browse.startsWith.type_date": "Filter results by date", "browse.startsWith.type_date": "Filtrar resultados por data", - + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", "browse.startsWith.type_date.label": "ou indique uma data (ano-mês):", - + // "browse.startsWith.type_text": "Filter results by typing the first few letters", - "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", - + "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title": "Percorrer {{ collection }} por {{ field }}{{ startsWith }} {{ value }}", // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", "browse.title.page": "Percorrer {{ collection }} por {{ field }} {{ value }}", - + // "search.browse.item-back": "Back to Results", "search.browse.item-back": "Voltar aos resultados", - + // "chips.remove": "Remove chip", "chips.remove": "Remover chip", - + // "claimed-approved-search-result-list-element.title": "Approved", "claimed-approved-search-result-list-element.title": "Aprovado", @@ -1261,16 +1261,16 @@ // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", "claimed-declined-task-search-result-list-element.title": "Declinado, reenviado para a área de trabalho do gestor de revisão", - + // "collection.create.head": "Create a Collection", "collection.create.head": "Criar uma coleção", // "collection.create.notifications.success": "Successfully created the Collection", "collection.create.notifications.success": "Coleção criada com sucesso", - + // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", "collection.create.sub-head": "Criar uma coleção na comunidade {{ parent }}", - + // "collection.curate.header": "Curate Collection: {{collection}}", "collection.curate.header": "Curadoria da coleção: {{collection}}", @@ -1279,16 +1279,16 @@ // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Confirmar", - + // "collection.delete.processing": "Deleting", "collection.delete.processing": "A apagar", - + // "collection.delete.head": "Delete Collection", "collection.delete.head": "Apagar coleção", - + // "collection.delete.notification.fail": "collection could not be deleted", "collection.delete.notification.fail": "Coleção não pode ser apagada", - + // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Apagou a coleção com sucesso", @@ -1300,40 +1300,40 @@ // "collection.edit.head": "Edit Collection", "collection.edit.head": "Editar coleção", - + // "collection.edit.breadcrumbs": "Edit Collection", "collection.edit.breadcrumbs": "Editar coleção", - + // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeamentos", - + // "collection.edit.tabs.item-mapper.title": "collection Edit - Item Mapper", "collection.edit.tabs.item-mapper.title": "Editar coleção - mapeamentos", - + // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Cancelar", - + // "collection.edit.item-mapper.collection": "collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Coleção: \"{{name}}\"", // "collection.edit.item-mapper.confirm": "Map selected items", "collection.edit.item-mapper.confirm": "Mapear itens selecionados", - + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", "collection.edit.item-mapper.description": "Esta é a ferramenta de mapeamento de itens que permite aos administradores de coleções mapear itens de outras coleções para esta. Pode pesquisá-los noutras coleções para os mapear ou navegar na lista dos itens atualmente mapeados.", - + // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", "collection.edit.item-mapper.head": "Mapeador de Itens - Mapear itens noutras coleções", - + // "collection.edit.item-mapper.no-search": "Please enter a query to search", "collection.edit.item-mapper.no-search": "Por favor introduza um termo para pesquisar!", - + // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", "collection.edit.item-mapper.notifications.map.error.content": "Ocorreu erros ao mapear {{amount}} itens.", // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", "collection.edit.item-mapper.notifications.map.error.head": "Erros de mapeamento!", - + // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", "collection.edit.item-mapper.notifications.map.success.content": "Mapeou {{amount}} itens com sucesso.", @@ -1348,31 +1348,31 @@ // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", "collection.edit.item-mapper.notifications.unmap.success.content": "Removeu os mapeamentos de {{amount}} item(ns) com sucesso.", - + // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", "collection.edit.item-mapper.notifications.unmap.success.head": "Remoção de mapeamentos completa", // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Remover mapeamentos selecionados", - + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", "collection.edit.item-mapper.search-form.placeholder": "Pesquisar items...", - + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Navegar por itens mapeados", // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Mapear novos itens", - + // "collection.edit.logo.delete.title": "Delete logo", "collection.edit.logo.delete.title": "Apagar logótipo", - - // "collection.edit.logo.delete-undo.title": "Undo delete", + + // "collection.edit.logo.delete-undo.title": "Undo delete", "collection.edit.logo.delete-undo.title": "Não apagar", // "collection.edit.logo.label": "Collection logo", "collection.edit.logo.label": "Logótipo da coleção", - + // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", "collection.edit.logo.notifications.add.error": "Falha ao carregar o logotipo da coleção. Verifique o ficheiro antes de tentar de novo.", @@ -1381,7 +1381,7 @@ // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", "collection.edit.logo.notifications.delete.success.title": "Logótipo apagado", - + // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", "collection.edit.logo.notifications.delete.success.content": "O logotipo da coleção foi apagado com sucesso", @@ -1390,46 +1390,46 @@ // "collection.edit.logo.upload": "Drop a Collection Logo to upload", "collection.edit.logo.upload": "Arraste um logótipo da coleção para carregar", - + // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Coleção editada com sucesso", - + // "collection.edit.return": "Back", "collection.edit.return": "Voltar", - + // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Curadoria", - - // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", "collection.edit.tabs.curate.title": "Editar coleção - Curadoria", - + // "collection.edit.tabs.authorizations.head": "Authorizations", "collection.edit.tabs.authorizations.head": "Autorizações", // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", "collection.edit.tabs.authorizations.title": "Editar coleção - autorizações", - + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", "collection.edit.item.authorizations.load-bundle-button": "Carregar mais pacotes", // "collection.edit.item.authorizations.load-more-button": "Load more", "collection.edit.item.authorizations.load-more-button": "Carregar mais", - + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", "collection.edit.item.authorizations.show-bitstreams-button": "Mostrar as políticas do bitstream para o pacote", - + // "collection.edit.tabs.metadata.head": "Edit Metadata", "collection.edit.tabs.metadata.head": "Editar metadados", - + // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", "collection.edit.tabs.metadata.title": "Editar coleção - metadados", - + // "collection.edit.tabs.roles.head": "Assign Roles", "collection.edit.tabs.roles.head": "Atribuir perfis", - + // "collection.edit.tabs.roles.title": "Collection Edit - Roles", "collection.edit.tabs.roles.title": "Editar coleção - perfis", - + // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", "collection.edit.tabs.source.external": "Esta coleção agrega conteúdo de uma fonte externa", @@ -1444,7 +1444,7 @@ // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", "collection.edit.tabs.source.form.metadataConfigId": "Formato de metadados", - + // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", "collection.edit.tabs.source.form.oaiSetId": "ID do set OAI-PMH", @@ -1462,10 +1462,10 @@ // "collection.edit.tabs.source.head": "Content Source", "collection.edit.tabs.source.head": "Fonte externa", - + // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "collection.edit.tabs.source.notifications.discarded.content": "As alterações foram ignoradas. Para regravar as alterações clique no botão ´Voltar'", - + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", "collection.edit.tabs.source.notifications.discarded.title": "Alterações descartadas", @@ -1483,7 +1483,7 @@ // "collection.edit.tabs.source.title": "Collection Edit - Content Source", "collection.edit.tabs.source.title": "Editar coleção - conteúdo fonte", - + // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Adicionar", @@ -1498,28 +1498,28 @@ // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Editar", - + // "collection.edit.template.error": "An error occurred retrieving the template item", "collection.edit.template.error": "Ocorreu um erro na recuperação do template do item", - + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", "collection.edit.template.head": "Editar template do item para a coleção \"{{ collection }}\"", - + // "collection.edit.template.label": "Template item", "collection.edit.template.label": "Template do item", - + // "collection.edit.template.loading": "Loading template item...", "collection.edit.template.loading": "A carregar o template do item...", - + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Erro ao apagar o template do item", // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", "collection.edit.template.notifications.delete.success": "Template do item apagado com sucesso", - + // "collection.edit.template.title": "Edit Template Item", "collection.edit.template.title": "Editar template do item", - + // "collection.form.abstract": "Short Description", "collection.form.abstract": "Descrição curta", @@ -1543,25 +1543,25 @@ // "collection.form.title": "Name", "collection.form.title": "Nome", - + // "collection.form.entityType": "Entity Type", "collection.form.entityType": "Tipo de entidade", // "collection.listelement.badge": "collection", "collection.listelement.badge": "coleção", - + // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Entradas recentes", - + // "collection.page.browse.recent.empty": "No items to show", "collection.page.browse.recent.empty": "Nenhum item a exibir", // "collection.page.edit": "Edit this collection", "collection.page.edit": "Editar esta coleção", - + // "collection.page.handle": "Permanent URI for this collection:", "collection.page.handle": "URI permanente para esta coleção:", - + // "collection.page.license": "License", "collection.page.license": "Licença", @@ -1576,94 +1576,94 @@ // "collection.select.table.title": "Title", "collection.select.table.title": "Título", - + // "collection.source.controls.head": "Harvest Controls", "collection.source.controls.head": "Controlos de importação", - + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", "collection.source.controls.test.submit.error": "Algo correu mal ao inicar os testes das configurações", - + // "collection.source.controls.test.failed": "The script to test the settings has failed", "collection.source.controls.test.failed": "O script para testar as configurações falhou!", - + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", "collection.source.controls.test.completed": "O script para testar as configurações terminou com sucesso!", - + // "collection.source.controls.test.submit": "Test configuration", "collection.source.controls.test.submit": "Configuração de teste", - + // "collection.source.controls.test.running": "Testing configuration...", "collection.source.controls.test.running": "A testar as configurações...", - + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", "collection.source.controls.import.submit.success": "A importação iniciou com sucesso.", - + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", "collection.source.controls.import.submit.error": "Algo correu mal ao iniciar a importação", - + // "collection.source.controls.import.submit": "Import now", "collection.source.controls.import.submit": "Importar agora", - + // "collection.source.controls.import.running": "Importing...", "collection.source.controls.import.running": "Importar...", - + // "collection.source.controls.import.failed": "An error occurred during the import", "collection.source.controls.import.failed": "Ocorreu um erro durante a importação", - + // "collection.source.controls.import.completed": "The import completed", "collection.source.controls.import.completed": "A importação encontra-se completa", - + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", "collection.source.controls.reset.submit.success": "A reposição e re-importação iniciou-se com sucesso", - + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", "collection.source.controls.reset.submit.error": "Algo correu mal com a reposição e re-importação", - + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", "collection.source.controls.reset.failed": "Ocorreu um erro durante a reposição e a re-importação", - + // "collection.source.controls.reset.completed": "The reset and reimport completed", "collection.source.controls.reset.completed": "A reposição e a re-importação encontram-se completas", - + // "collection.source.controls.reset.submit": "Reset and reimport", "collection.source.controls.reset.submit": "Repor e re-importar", - + // "collection.source.controls.reset.running": "Resetting and reimporting...", "collection.source.controls.reset.running": "Repor e re-importar...", - + // "collection.source.controls.harvest.status": "Harvest status:", "collection.source.controls.harvest.status": "Estado da importação:", - + // "collection.source.controls.harvest.start": "Harvest start time:", "collection.source.controls.harvest.start": "Hora de início da importação:", - + // "collection.source.controls.harvest.last": "Last time harvested:", "collection.source.controls.harvest.start": "Hora de fim da importação:", - + // "collection.source.controls.harvest.message": "Harvest info:", "collection.source.controls.harvest.message": "Informação sobre a importação:", - + // "collection.source.controls.harvest.no-information": "N/A", "collection.source.controls.harvest.no-information": "N/A", - + // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "As configurações providenciadas foram testadas mas não funcionam.", // "collection.source.update.notifications.error.title": "Server Error", "collection.source.update.notifications.error.title": "Erro no servidor", - + // "communityList.breadcrumbs": "Community List", "communityList.breadcrumbs": "Lista de comunidades", - + // "communityList.tabTitle": "Community List", "communityList.tabTitle": "Lista de comunidades", - + // "communityList.title": "List of Communities", "communityList.title": "Lista de comunidades", - + // "communityList.showMore": "Show More", "communityList.showMore": "Mostrar mais", - + // "community.create.head": "Create a Community", "community.create.head": "Criar uma comunidade", @@ -1675,22 +1675,22 @@ // "community.curate.header": "Curate Community: {{community}}", "community.curate.header": "Curar comunidade: {{community}}", - + // "community.delete.cancel": "Cancel", "community.delete.cancel": "Cancelar", // "community.delete.confirm": "Confirm", "community.delete.confirm": "Confirmar", - + // "community.delete.processing": "Deleting...", "community.delete.processing": "A apagar...", - + // "community.delete.head": "Delete Community", "community.delete.head": "Apagar comunidade", - + // "community.delete.notification.fail": "Community could not be deleted", "community.delete.notification.fail": "Não foi possível apagar a comunidade", - + // "community.delete.notification.success": "Successfully deleted community", "community.delete.notification.success": "Comunidade apagada com sucesso", @@ -1702,37 +1702,37 @@ // "community.edit.head": "Edit Community", "community.edit.head": "Editar comunidade", - + // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Editar Comunidade", - + // "community.edit.logo.delete.title": "Delete logo", "community.edit.logo.delete.title": "Apagar logótipo", // "community.edit.logo.delete-undo.title": "Undo delete", "community.edit.logo.delete-undo.title": "Não apagar logótipo", - + // "community.edit.logo.label": "Community logo", "community.edit.logo.label": "Logótipo da comunidade", - + // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", "community.edit.logo.notifications.add.error": "Falha ao carregar o logótipo da comunidade. Verifique o conteúdo antes de tentar de novo.", - + // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", "community.edit.logo.notifications.add.success": "Logótipo da comunindade carregado com sucesso.", - + // "community.edit.logo.notifications.delete.success.title": "Logo deleted", "community.edit.logo.notifications.delete.success.title": "Logótipo apagado", - + // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", "community.edit.logo.notifications.delete.success.content": "O logótipo da comuindade foi apagado com sucesso", - + // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", "community.edit.logo.notifications.delete.error.title": "Erro ao apagar o logótipo", - + // "community.edit.logo.upload": "Drop a Community Logo to upload", "community.edit.logo.upload": "Arraste um logótipo da comunidade para carregar", - + // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Comunidade editada com sucesso", @@ -1741,115 +1741,115 @@ // "community.edit.notifications.error": "An error occured while editing the Community", "community.edit.notifications.error": "Ocorreu um erro ao editar a comunidade", - + // "community.edit.return": "Back", "community.edit.return": "Voltar", - + // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Curadoria", // "community.edit.tabs.curate.title": "Community Edit - Curate", "community.edit.tabs.curate.title": "Editar comunidade - curadoria", - + // "community.edit.tabs.metadata.head": "Edit Metadata", "community.edit.tabs.metadata.head": "Editar metadados", - + // "community.edit.tabs.metadata.title": "Community Edit - Metadata", "community.edit.tabs.metadata.title": "Editar comunidade - metadados", - + // "community.edit.tabs.roles.head": "Assign Roles", "community.edit.tabs.roles.head": "Atribuir perfis", - + // "community.edit.tabs.roles.title": "Community Edit - Roles", "community.edit.tabs.roles.title": "Editar comunidade - perfis", - + // "community.edit.tabs.authorizations.head": "Authorizations", "community.edit.tabs.authorizations.head": "Autorizações", // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", "community.edit.tabs.authorizations.title": "Editar comunidade - autorizações", - + // "community.listelement.badge": "Community", "community.listelement.badge": "Comunidade", - + // "comcol-role.edit.no-group": "None", "comcol-role.edit.no-group": "Nenhum", // "comcol-role.edit.create": "Create", "comcol-role.edit.create": "Criar", - + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", "comcol-role.edit.create.error.title": "Falha na criação de um grupo para o perfil '{{ role }}'", - + // "comcol-role.edit.restrict": "Restrict", "comcol-role.edit.restrict": "Restrito", // "comcol-role.edit.delete": "Delete", "comcol-role.edit.delete": "Apagar", - + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", "comcol-role.edit.delete.error.title": "Falha na remoção do '{{ role }}' nos perfis do grupo", - + // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Administradores", // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administradores", - + // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.community-admin.description": "Os 'Administradores de comunidades' podem criar 'sub-comunidades' e/ou 'coleções', podem também gerir ou delegar a gestão dessas 'sub-comunidade' ou 'coleções'. Adicionalmente, decidem quem pode depositar itens em coleções, editar metadados (após o depósito) e mapear itens de outras coleções (sujeito a autorização).", - + // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", "comcol-role.edit.collection-admin.description": "Os 'Administradores de coleção' decidem quem pode depositar itens a uma coleção, editar metadados (após o depósito), e mapear itens de outras coleções (sujeito a autorização para essa coleção).", - + // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Depositantes", // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", "comcol-role.edit.submitters.description": "Os 'Utilizadores' e 'Grupos' que possuem permissões de depósito nesta coleção.", - + // "comcol-role.edit.item_read.name": "Default item read access", - "comcol-role.edit.item_read.name": "Acesso de leitura ao item predefinido (DEFAULT_ITEM_READ)", - + "comcol-role.edit.item_read.name": "Acesso de leitura ao item predefinido (DEFAULT_ITEM_READ)", + // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", "comcol-role.edit.item_read.description": "'Utilizadores' e 'Grupos' que podem ver itens depositados nesta coleção. As alterações feitas a este papel não são retroativas. Os itens existentes no sistema ainda poderão ser vistos por aqueles que tiveram acesso de leitura no momento da sua adição.", - + // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", "comcol-role.edit.item_read.anonymous-group": "A leitura de novos itens (Item Read) está predefinida para utilizadores anónimos.", - + // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.name": "Leitura predefinida de ficheiros (DEFAULT_BITSTREAM_READ)", - + // "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.bitstream_read.description": "Os 'Administradores de comunidades' podem criar sub-comunidades e coleções, bem como gerir ou delegar a gestão dessas sub-comunidade ou coleções. Adicionalmente, decidem quem pode depositar itens em qualquer coleção, editar metadados (após depósito) e mapear itens de outras coleções (sujeito a autorização).", - + // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", "comcol-role.edit.bitstream_read.anonymous-group": "A leitura de novos ficheiros (Bitstream Read) está predefinida para utilizadores anónimos.", - + // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Editores", // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.editor.description": "Os 'Editores' podem aceitar ou rejeitar os depósitos e podem editar os seus metadados.", + "comcol-role.edit.editor.description": "Os 'Editores' podem aceitar ou rejeitar os depósitos e podem editar os seus metadados.", // "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.name": "Validadores finais", - + // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", "comcol-role.edit.finaleditor.description": "Os 'Validadores finais' podem editar os metadados de um depósito, mas não os podem rejeitar.", - + // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Revisores", // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", "comcol-role.edit.reviewer.description": "Os 'Revisores' podem aceitar ou rejeitar os depósitos, mas não podem editar os seus metadados.", - + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", "comcol-role.edit.scorereviewers.name": "Pontuar revisores", // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", "comcol-role.edit.scorereviewers.description": "Os 'Revisores' podem dar uma pontuação aos depósitos recebidos, isto irá determinar se o depósito será rejeitado ou não.", - + // "community.form.abstract": "Short Description", "community.form.abstract": "Descrição curta", @@ -1861,7 +1861,7 @@ // "community.form.rights": "Copyright text (HTML)", "community.form.rights": "Texto de Copyright (HTML)", - + // "community.form.tableofcontents": "News (HTML)", "community.form.tableofcontents": "Notícias (HTML)", @@ -1873,7 +1873,7 @@ // "community.page.handle": "Permanent URI for this community", "community.page.handle": "URI permanente desta comunidade:", - + // "community.page.license": "License", "community.page.license": "Licença", @@ -1882,13 +1882,13 @@ // "community.all-lists.head": "Subcommunities and Collections", "community.all-lists.head": "Sub-comunidade e coleções", - + // "community.sub-collection-list.head": "Collections of this Community", "community.sub-collection-list.head": "Coleções desta comunidade", - + // "community.sub-community-list.head": "Communities of this Community", "community.sub-community-list.head": "Comunidades desta comunidade", - + // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Aceitar todos", @@ -1910,12 +1910,12 @@ // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(sempre necessária)", - // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", - "cookies.consent.app.disable-all.description": "Utilize este interruptor para ativar ou desativar todos os serviços.", + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + "cookies.consent.app.disable-all.description": "Utilize este interruptor para ativar ou desativar todos os serviços.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + "cookies.consent.app.disable-all.title": "Ativar ou desativar todos os serviços", - // "cookies.consent.app.disable-all.title": "Enable or disable all services", - "cookies.consent.app.disable-all.title": "Ativar ou desativar todos os serviços", - // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Existem alterações desde a sua última visita, atualize o seu consentimento.", @@ -1932,20 +1932,20 @@ "cookies.consent.save": "Guardar", // "cookies.consent.content-notice.title": "Cookie Consent", - "cookies.consent.content-notice.title": "Consentir cookies", - + "cookies.consent.content-notice.title": "Consentir cookies", + // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", "cookies.consent.content-notice.description": "Recolhemos e processamos informação pessoal para os seguintes propósitos: Autenticação, Guardar Preferências, Termos de Uso e Estatísticas.
    Para saber mais, por favor leia a nossa {privacyPolicy}.", - + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", "cookies.consent.content-notice.description.no-privacy": "Recolhemos e processamos as suas informações pessoais para os seguintes fins: Autenticação, Preferências, Reconhecimento e Estatísticas.", - + // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Pesonalizar", // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", "cookies.consent.content-modal.description": "Aqui pode ver e personalizar a informação pessoal que recolhemos sobre si.", - + // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", "cookies.consent.content-modal.privacy-policy.name": "política de privacidade", @@ -1954,13 +1954,13 @@ // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Informação que recolhemos", - + // "cookies.consent.content-modal.services": "Services", "cookies.consent.content-modal.services": "Serviços", // "cookies.consent.content-modal.service": "Service", "cookies.consent.content-modal.service": "Serviço", - + // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Autenticação", @@ -1978,43 +1978,43 @@ // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os 'Termos de Uso' e 'Consentimentos'", - + // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Permite-nos rastrear dados estatísticos", - + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", "cookies.consent.app.description.google-recaptcha": "Utilizamos o serviço Google reCAPTCHA durante o registo e recuperação de palavra-passe", - + // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funcional", // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Estatísticos", - + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", "cookies.consent.purpose.registration-password-recovery": "Registo e recuperação de senha", - + // "cookies.consent.purpose.sharing": "Sharing", "cookies.consent.purpose.sharing": "Partilha", - // "curation-task.task.citationpage.label": "Generate Citation Page", - "curation-task.task.citationpage.label": "Gerar página de citações", - + // "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Gerar página de citações", + // "curation-task.task.checklinks.label": "Check Links in Metadata", "curation-task.task.checklinks.label": "Verifica ligações nos metadados", - + // "curation-task.task.noop.label": "NOOP", "curation-task.task.noop.label": "NOOP", // "curation-task.task.profileformats.label": "Profile Bitstream Formats", "curation-task.task.profileformats.label": "Perfil dos formatos de ficheiro", - + // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", "curation-task.task.requiredmetadata.label": "Verifica metadados obrigatórios", @@ -2023,16 +2023,16 @@ // "curation-task.task.vscan.label": "Virus Scan", "curation-task.task.vscan.label": "Scan de vírus", - + // "curation-task.task.register-doi.label": "Register DOI", "curation-task.task.register-doi.label": "Registo DOI", - + // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Tarefa:", // "curation.form.submit": "Start", "curation.form.submit": "Iniciar", - + // "curation.form.submit.success.head": "The curation task has been started successfully", "curation.form.submit.success.head": "A tarefa de curadoria iniciou com sucesso", @@ -2044,25 +2044,25 @@ // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Ocorreu um erro ao tentar iniciar a tarefa de curadoria.", - + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", "curation.form.submit.error.invalid-handle": "Não foi possível determinar o handle para este objecto", - + // "curation.form.handle.label": "Handle:", "curation.form.handle.label": "Handle:", // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Dica: Introduza [o-seu-prefixo-handle]/0 para executar a tarefa em todo o repositório (nem todas as tarefas são compatíveis com esta opção)", - + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "deny-request-copy.email.message": "Caro {{ recipientName }},\ em resposta ao seu pedido, lamento informá-lo que não me é possível enviar-lhe uma cópia do(s) Ficheiro(s) que solicitou, relativamente ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\n Com os melhores cumprimentos,\n {{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Caro {{ recipientName }}, Em resposta ao seu pedido, lamento informá-lo que não me é possível enviar-lhe uma cópia do(s) Ficheiro(s) que solicitou, relativamente ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\n Com os melhores cumprimentos,\n {{ authorName }} <{{ authorEmail }}>", // "deny-request-copy.email.subject": "Request copy of document", "deny-request-copy.email.subject": "Solicitar cópia ao autor", // "deny-request-copy.error": "An error occurred", "deny-request-copy.error": "Ocorreu um erro!", - + // "deny-request-copy.header": "Deny document copy request", "deny-request-copy.header": "Declinar o pedido de cópia", @@ -2074,7 +2074,7 @@ // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sem título", - + // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nova coleção", @@ -2083,10 +2083,10 @@ // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Nova comunidade", - - // "dso-selector.create.community.or-divider": "or", - "dso-selector.create.community.or-divider": "ou", - + + // "dso-selector.create.community.or-divider": "or", + "dso-selector.create.community.or-divider": "ou", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Criar uma nova coleção em", @@ -2101,7 +2101,7 @@ // "dso-selector.create.submission.head": "New submission", "dso-selector.create.submission.head": "Novo depósito", - + // "dso-selector.edit.collection.head": "Edit collection", "dso-selector.edit.collection.head": "Editar coleção", @@ -2110,25 +2110,25 @@ // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Editar item", - + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", "dso-selector.error.title": "Ocorreu um erro ao procurar por um(a) {{ type }}", - + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", "dso-selector.export-metadata.dspaceobject.head": "Exportar metadados de", - + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", - "dso-selector.export-batch.dspaceobject.head": "Exportar lote (ZIP) de", + "dso-selector.export-batch.dspaceobject.head": "Exportar lote (ZIP) de", // "dso-selector.import-batch.dspaceobject.head": "Import batch from", - "dso-selector.import-batch.dspaceobject.head": "Importar lote de", - + "dso-selector.import-batch.dspaceobject.head": "Importar lote de", + // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Nenhum(a) {{ type }} encontrado(a)", // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Pesquisar por um(a) {{ type }}", - + // "dso-selector.select.collection.head": "Select a collection", "dso-selector.select.collection.head": "Selecione uma coleção", @@ -2143,7 +2143,7 @@ // "dso-selector.set-scope.community.input-header": "Search for a community or collection", "dso-selector.set-scope.community.input-header": "Pesquisar por uma comunidade ou coleção", - + // "dso-selector.claim.item.head": "Profile tips", "dso-selector.claim.item.head": "Dicas de Perfil", @@ -2155,7 +2155,7 @@ // "dso-selector.claim.item.create-from-scratch": "Create a new one", "dso-selector.claim.item.create-from-scratch": "Criar novo", - + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again", "dso-selector.results-could-not-be-retrieved": "Algo correu mal, por favor repita", @@ -2173,7 +2173,7 @@ // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", "supervision-group-selector.select.type-of-order.option.observer": "OBSERVADOR", - + // "supervision-group-selector.select.group.label": "Select a Group", "supervision-group-selector.select.group.label": "Selecionar um grupo", @@ -2220,8 +2220,8 @@ "confirmation-modal.export-batch.cancel": "Cancelar", // "confirmation-modal.export-batch.confirm": "Export", - "confirmation-modal.export-batch.confirm": "Exportar", - + "confirmation-modal.export-batch.confirm": "Exportar", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "Apagar Utilizador \"{{ dsoName }}\"", @@ -2233,7 +2233,7 @@ // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Apagar", - + // "confirmation-modal.delete-profile.header": "Delete Profile", "confirmation-modal.delete-profile.header": "Apagar perfil", @@ -2244,11 +2244,11 @@ "confirmation-modal.delete-profile.cancel": "Cancelar", // "confirmation-modal.delete-profile.confirm": "Delete", - "confirmation-modal.delete-profile.confirm": "Apagar", + "confirmation-modal.delete-profile.confirm": "Apagar", // "confirmation-modal.delete-subscription.header": "Delete Subscription", "confirmation-modal.delete-subscription.header": "Apagar subscrição", - + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", "confirmation-modal.delete-subscription.info": "Tem a certeza de que pretende apagar a subscrição de \"{{ dsoName }}\"", @@ -2260,64 +2260,64 @@ // "error.bitstream": "Error fetching bitstream", "error.bitstream": "Erro ao aceder ao ficheiro!", - + // "error.browse-by": "Error fetching items", "error.browse-by": "Erro ao carregar itens!", - + // "error.collection": "Error fetching collection", "error.collection": "Erro ao carregar coleção!", - + // "error.collections": "Error fetching collections", "error.collections": "Erro ao carregar coleções!", - + // "error.community": "Error fetching community", "error.community": "Erro ao carregar comunidade!", - + // "error.identifier": "No item found for the identifier", "error.identifier": "Nenhum item encontrado para o identificador!", - + // "error.default": "Error", "error.default": "Erro!", - + // "error.item": "Error fetching item", "error.item": "Erro ao carregar item!", - + // "error.items": "Error fetching items", "error.items": "Erro ao carregar itens!", - + // "error.objects": "Error fetching objects", "error.objects": "Erro ao carregar objetos!", - + // "error.recent-submissions": "Error fetching recent submissions", "error.recent-submissions": "Erro ao carregar depósitos recentes!", - + // "error.search-results": "Error fetching search results", "error.search-results": "Erro ao carregar os resultados da pesquisa!", - + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", "error.invalid-search-query": "A query da pesquisa não é válida! Por favor verifique Solr query syntax best practices for further information about this error.", - + // "error.sub-collections": "Error fetching sub-collections", "error.sub-collections": "Erro ao carregar sub-coleções!", - + // "error.sub-communities": "Error fetching sub-communities", "error.sub-communities": "Erro ao carregar sub-comunidade!", - + // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", "error.submission.sections.init-form-error": "Ocorreu um erro durante a seção de inicialização, por favor verifique sua configuração de 'input-form'. Detalhes estão abaixo :

    ", - + // "error.top-level-communities": "Error fetching top-level communities", "error.top-level-communities": "Erro ao carregar as comunidade de nível superior!", - + // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", "error.validation.license.notgranted": "Deve concordar com esta licença para completar o depósito. Se não estiver de acordo com a licença ou pretende ponderar, pode guardar este trabalho e retomar posteriormente, ou remover definitivamente este depósito.", - + // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", "error.validation.pattern": "Este campo está restrito ao seguinte padrão: {{ pattern }}.", // "error.validation.filerequired": "The file upload is mandatory", "error.validation.filerequired": "O carregamento de ficheiros é obrigatório!", - + // "error.validation.required": "This field is required", "error.validation.required": "Este campo é de preenchimento obrigatório!", @@ -2329,112 +2329,112 @@ // "error.validation.groupExists": "This group already exists", "error.validation.groupExists": "Este grupo já existe!", - + // "feed.description": "Syndication feed", - "feed.description": "Feed", - + "feed.description": "Feed", + // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Erro na obteção de ficheiros para este item!", - + // "footer.copyright": "copyright © 2002-{{ year }}", "footer.copyright": "Copyright © 2003-{{ year }}", - + // "footer.link.dspace": "DSpace software", "footer.link.dspace": "Software DSpace", // "footer.link.lyrasis": "LYRASIS", - "footer.link.lyrasis": "LYRASIS", - + "footer.link.lyrasis": "LYRASIS", + // "footer.link.cookies": "Cookie settings", "footer.link.cookies": "Configurações de Cookies", // "footer.link.privacy-policy": "Privacy policy", "footer.link.privacy-policy": "Política de Privacidade", - // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement":"Termos de Uso", - - // "footer.link.feedback":"Send Feedback", - "footer.link.feedback":"Contacte-nos", - + // "footer.link.end-user-agreement": "End User Agreement", + "footer.link.end-user-agreement": "Termos de Uso", + + // "footer.link.feedback": "Send Feedback", + "footer.link.feedback": "Contacte-nos", + // "forgot-email.form.header": "Forgot Password", - "forgot-email.form.header": "Esqueci a senha", + "forgot-email.form.header": "Esqueci a senha", // "forgot-email.form.info": "Enter the email address associated with the account.", "forgot-email.form.info": "Caso tenha esquecido a sua senha de acesso poderá recuperá-la, para o efeito basta introduzir em baixo o seu endereço de correio electrónico associado.", - + // "forgot-email.form.email": "Email Address *", "forgot-email.form.email": "Endereço de correio eletrónico *", - + // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Indique um endereço de correio eletrónico", - + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", "forgot-email.form.email.error.not-email-form": "Indique um endereço de correio eletrónico válido", - + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", "forgot-email.form.email.hint": "Será enviada uma mensagem para este endereço de correio electrónico com mais instruções", - + // "forgot-email.form.submit": "Reset password", "forgot-email.form.submit": "Repor senha de acesso", - + // "forgot-email.form.success.head": "Password reset email sent", "forgot-email.form.success.head": "Foi enviada mensagem para redefinição da senha de acesso", - + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "forgot-email.form.success.content": "Foi enviado uma mensagem para {{ email }} com instruções e um endereço para validação da sua conta de utilizador.", - + // "forgot-email.form.error.head": "Error when trying to reset password", "forgot-email.form.error.head": "Ocorreu um erro ao tentar redefinir a senha de acesso", // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", - "forgot-email.form.error.content": "Ocorreu um erro ao tentar redefinir a senha de acesso da conta associada com o seguinte endereço de email: {{ email }}", + "forgot-email.form.error.content": "Ocorreu um erro ao tentar redefinir a senha de acesso da conta associada com o seguinte endereço de email: {{ email }}", // "forgot-password.title": "Forgot Password", "forgot-password.title": "Esqueci a senha de acesso", - + // "forgot-password.form.head": "Forgot Password", "forgot-password.form.head": "Esqueci a Senha de acesso", - + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", "forgot-password.form.info": "Introduza uma nova senha na caixa em baixo, e depois confirme introduzindo de novo na segunda caixa. Deverá ter pelo menos 6 caracteres.", - + // "forgot-password.form.card.security": "Security", "forgot-password.form.card.security": "Senha de acesso", - + // "forgot-password.form.identification.header": "Identify", "forgot-password.form.identification.header": "Identificação", // "forgot-password.form.identification.email": "Email address: ", "forgot-password.form.identification.email": "Endereço de correio eletrónico: ", - + // "forgot-password.form.label.password": "Password", "forgot-password.form.label.password": "Palavra-chave", // "forgot-password.form.label.passwordrepeat": "Retype to confirm", "forgot-password.form.label.passwordrepeat": "Insira a senha novamente para confirmar", - + // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", "forgot-password.form.error.empty-password": "Indique uma senha na caixa abaixo.", - + // "forgot-password.form.error.matching-passwords": "The passwords do not match.", - "forgot-password.form.error.matching-passwords": "As palavras de acesso não coincidem.", - + "forgot-password.form.error.matching-passwords": "As palavras de acesso não coincidem.", + // "forgot-password.form.notification.error.title": "Error when trying to submit new password", "forgot-password.form.notification.error.title": "Erro ao submeter nova senha de acesso", - + // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", "forgot-password.form.notification.success.content": "A recuperação da senha foi efetuada com sucesso. Foi iniciada sessão com o utilizador criado.", - + // "forgot-password.form.notification.success.title": "Password reset completed", "forgot-password.form.notification.success.title": "Recuperação da senha efetuada com sucesso", - + // "forgot-password.form.submit": "Submit password", "forgot-password.form.submit": "Enviar senha", - + // "form.add": "Add more", "form.add": "Adicionar mais", - + // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Clique aqui para submeter esta entrada e adicionar uma nova", @@ -2446,13 +2446,13 @@ // "form.clear-help": "Click here to remove the selected value", "form.clear-help": "Clique aqui para apagar o valor selecionado", - + // "form.discard": "Discard", "form.discard": "Cancelar", // "form.drag": "Drag", - "form.drag": "Arrastar", - + "form.drag": "Arrastar", + // "form.edit": "Edit", "form.edit": "Editar", @@ -2479,7 +2479,7 @@ // "form.loading": "Loading...", "form.loading": "Carregando...", - + // "form.lookup": "Lookup", "form.lookup": "Consulta", @@ -2491,7 +2491,7 @@ // "form.no-value": "No value entered", "form.no-value": "Nenhum valor informado", - + // "form.other-information": {}, "form.other-information": {}, @@ -2500,10 +2500,10 @@ // "form.save": "Save", "form.save": "Guardar", - + // "form.save-help": "Save changes", "form.save-help": "Guardar alterações", - + // "form.search": "Search", "form.search": "Pesquisar", @@ -2523,7 +2523,7 @@ "grant-deny-request-copy.email.back": "Voltar", // "grant-deny-request-copy.email.message": "Message", - "grant-deny-request-copy.email.message": "Mensagem", + "grant-deny-request-copy.email.message": "Mensagem", // "grant-deny-request-copy.email.message.empty": "Please enter a message", "grant-deny-request-copy.email.message.empty": "Por favor insira uma mensagem", @@ -2578,9 +2578,9 @@ // "grant-request-copy.success": "Successfully granted item request", "grant-request-copy.success": "Pedido de cópia concedido com sucesso!", - - // "health.breadcrumbs": "Health", - "health.breadcrumbs": "Diagnóstico do sistema", + + // "health.breadcrumbs": "Health", + "health.breadcrumbs": "Diagnóstico do sistema", // "health-page.heading": "Health", "health-page.heading": "Diagnóstico do sistema", @@ -2593,7 +2593,7 @@ // "health-page.error.msg": "The health check service is temporarily unavailable", "health-page.error.msg": "O serviço de diagnóstico está temporariamente indisponível", - + // "health-page.property.status": "Status code", "health-page.property.status": "Código Estado", @@ -2637,35 +2637,35 @@ "health-page.title": "Diagnóstico do sistema", // "health-page.section.no-issues": "No issues detected", - "health-page.section.no-issues": "Nenhum problema detetado", - + "health-page.section.no-issues": "Nenhum problema detetado", + // "home.description": "", "home.description": "", // "home.breadcrumbs": "Home", "home.breadcrumbs": "Página inicial", - + //"home.search-form.placeholder": "Search the repository...", "home.search-form.placeholder": "pesquisar no repositório...", // "home.title": "Home", "home.title": "Página inicial", - + // "home.top-level-communities.head": "Communities in DSpace", "home.top-level-communities.head": "Comunidades", - + // "home.top-level-communities.help": "Select a community to browse its collections.", "home.top-level-communities.help": "Selecione uma comunidade para navegar nas suas coleções", // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept": "Li e aceito os 'Termos de Uso'", - + // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", "info.end-user-agreement.accept.error": "Ocorreu um erro ao aceitar os 'Termos de Uso'", - + // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", "info.end-user-agreement.accept.success": "'Termos de Uso' atualizados com sucesso", - + // "info.end-user-agreement.breadcrumbs": "End User Agreement", "info.end-user-agreement.breadcrumbs": "Termos de Uso", @@ -2689,7 +2689,7 @@ // "info.privacy.title": "Privacy Statement", "info.privacy.title": "Política de Privacidade", - + // "info.feedback.breadcrumbs": "Feedback", "info.feedback.breadcrumbs": "Contacte-nos", @@ -2722,22 +2722,22 @@ // "info.feedback.error.message.required": "A comment is required", "info.feedback.error.message.required": "Deve inserir uma mensagem", - + // "info.feedback.page-label": "Page", "info.feedback.page-label": "Página/URL de contexo:", - // "info.feedback.page_help": "The page related to your feedback", + // "info.feedback.page_help": "The page related to your feedback", "info.feedback.page_help": "Esta é a página/URL que contextualiza o seu contacto.", - + // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Este item é privado", // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Este item foi retirado", - + // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.heading": "Com este editor pode ver e alterar as políticas de um item, bem como alterar políticas de componentes individuais do item: 'pacotes' (bundles) e 'ficheiros' (bitstreams). Em resumo, um item contém 'pacotes' e os pacotes contêm 'ficheiros'. Os pacotes usualmente possuem políticas de ADICIONAR/REMOVER/LER/ESCREVER, por outro lado, os ficheiros apenas possuem políticas de LER/ESCREVER.", - + // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar políticas dos itens", @@ -2745,11 +2745,11 @@ "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", - "item.badge.withdrawn": "Retirado", - + "item.badge.withdrawn": "Retirado", + // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Pacote", - + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", "item.bitstreams.upload.bundle.placeholder": "Selecione um pacote ou insira o nome de um pacote novo", @@ -2773,19 +2773,19 @@ // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", "item.bitstreams.upload.notifications.bundle.created.title": "Pacote criado", - + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", "item.bitstreams.upload.notifications.upload.failed": "O carregamento falhou. Verifique os ficheiro antes de tentar carregar de novo.", - + // "item.bitstreams.upload.title": "Upload bitstream", "item.bitstreams.upload.title": "Carregar ficheiro(s)", - + // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Carregar", // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", "item.edit.bitstreams.bundle.displaying": "Atualmente a mostrar {{ amount }} ficheiros de {{ total }}.", - + // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", "item.edit.bitstreams.bundle.load.all": "Carregar todos ({{ total }})", @@ -2797,7 +2797,7 @@ // "item.edit.bitstreams.discard-button": "Discard", "item.edit.bitstreams.discard-button": "Cancelar", - + // "item.edit.bitstreams.edit.buttons.download": "Download", "item.edit.bitstreams.edit.buttons.download": "Descarregar", @@ -2812,7 +2812,7 @@ // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", "item.edit.bitstreams.edit.buttons.undo": "Cancelar alterações", - + // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", "item.edit.bitstreams.empty": "Este item não possui ficheiros. Carregue um novo ficheiro.", @@ -2863,7 +2863,7 @@ // "item.edit.bitstreams.reinstate-button": "Undo", "item.edit.bitstreams.reinstate-button": "Cancelar", - + // "item.edit.bitstreams.save-button": "Save", "item.edit.bitstreams.save-button": "Guardar", @@ -2890,19 +2890,19 @@ // "item.edit.head": "Edit Item", "item.edit.head": "Editar item", - + // "item.edit.breadcrumbs": "Edit Item", "item.edit.breadcrumbs": "Editar item", - + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", "item.edit.tabs.disabled.tooltip": "Não está autorizado a aceder a esta área!", - + // "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.mapper.head": "Mapeamento de coleção", - + // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", "item.edit.tabs.item-mapper.title": "Editar item - Mapeamento de coleção", - + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", "item.edit.identifiers.doi.status.UNKNOWN": "Desconhecido", @@ -2968,19 +2968,19 @@ // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Mapear item para coleção(ões) selecionada(s)", - + // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", "item.edit.item-mapper.buttons.remove": "Remover mapeamento(s) na(s) coleção(ões) selecionada(s)", - + // "item.edit.item-mapper.cancel": "Cancel", "item.edit.item-mapper.cancel": "Cancelar", // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", "item.edit.item-mapper.description": "Esta ferramenta permite mapear itens para outras coleções. Pode procurar coleções e mapeá-las ou navegar na lista de coleções nas quais o item está atualmente mapeado.", - + // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", "item.edit.item-mapper.head": "Mapeador de item - Mapear itens em coleções", - + // "item.edit.item-mapper.item": "Item: \"{{name}}\"", "item.edit.item-mapper.item": "Item: \"{{name}}\"", @@ -3010,10 +3010,10 @@ // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Completou a remoção de mapeamento", - + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", "item.edit.item-mapper.search-form.placeholder": "Pesquisar coleções...", - + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Navegar nas coleções mapeadas", @@ -3031,7 +3031,7 @@ // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", "item.edit.metadata.edit.buttons.drag": "Arrastar para reordenar", - + // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Editar", @@ -3043,7 +3043,7 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Parar edição", - + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", "item.edit.metadata.edit.buttons.virtual": "Este é um valor de metadados virtual, ou seja, um valor herdado de uma entidade relacionada. Não pode ser modificado diretamente. Adicionar ou remover a relação correspondente no separador 'Relacionamentos'", @@ -3055,13 +3055,13 @@ // "item.edit.metadata.headers.field": "Field", "item.edit.metadata.headers.field": "Campo (metadado)", - + // "item.edit.metadata.headers.language": "Lang", "item.edit.metadata.headers.language": "Idioma", // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Valor", - + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", "item.edit.metadata.metadatafield.error": "Ocorreu um erro ao validar o campo de metadados", @@ -3070,40 +3070,40 @@ // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.metadata.notifications.discarded.content": "As suas alterações foram descartadas. Para restabelecer suas alterações, clique no botão 'Desfazer'", - + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", "item.edit.metadata.notifications.discarded.title": "Mudança descartada", - + // "item.edit.metadata.notifications.error.title": "An error occurred", "item.edit.metadata.notifications.error.title": "Ocorreu um erro!", - + // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", "item.edit.metadata.notifications.invalid.content": "As suas alterações não foram guardadas! Verifique se todos os campos são válidos antes de guardar.", - + // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", "item.edit.metadata.notifications.invalid.title": "Metadado inválido", // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "item.edit.metadata.notifications.outdated.content": "O registo em que está a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", - + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", "item.edit.metadata.notifications.outdated.title": "Alteração desatualizada", // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", "item.edit.metadata.notifications.saved.content": "As alterações que realizou nos metadados deste registo foram salvas.", - + // "item.edit.metadata.notifications.saved.title": "Metadata saved", "item.edit.metadata.notifications.saved.title": "Metadados salvos", // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Desfazer", - + // "item.edit.metadata.reset-order-button": "Undo reorder", "item.edit.metadata.reset-order-button": "Desfazer reordenamento", - + // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Guardar", - + // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Campo", @@ -3112,16 +3112,16 @@ // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Valor", - + // "item.edit.move.cancel": "Back", "item.edit.move.cancel": "Cancelar", - + // "item.edit.move.save-button": "Save", "item.edit.move.save-button": "Guardar", - + // "item.edit.move.discard-button": "Discard", - "item.edit.move.discard-button": "Cancelar", - + "item.edit.move.discard-button": "Cancelar", + // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", "item.edit.move.description": "Selecione a coleção para a qual você deseja mover este item. Para restringir a lista de coleções exibidas, você pode inserir uma consulta de pesquisa na caixa.", @@ -3154,40 +3154,40 @@ // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Cancelar", - + // "item.edit.private.confirm": "Make it non-discoverable", "item.edit.private.confirm": "Tornar Privado", - + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", "item.edit.private.description": "Tem certeza de que este item deve ser tornado privado?", - + // "item.edit.private.error": "An error occurred while making the item non-discoverable", "item.edit.private.error": "Ocorreu um erro ao tornar o item privado", - + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", "item.edit.private.header": "Tornar privado o item: {{ id }}", - + // "item.edit.private.success": "The item is now non-discoverable", "item.edit.private.success": "O item agora é privado", - + // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Cancelar", - + // "item.edit.public.confirm": "Make it discoverable", "item.edit.public.confirm": "Tornar público", - + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", "item.edit.public.description": "Você tem certeza que deseja tornar este item público?", - + // "item.edit.public.error": "An error occurred while making the item discoverable", "item.edit.public.error": "Ocorreu um erro ao tornar o item público", - + // "item.edit.public.header": "Make item discoverable: {{ id }}", "item.edit.public.header": "Tornar público o item: {{ id }}", - + // "item.edit.public.success": "The item is now discoverable", "item.edit.public.success": "O item agora é público!", - + // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Cancelar", @@ -3205,10 +3205,10 @@ // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "O item foi restabelecido com sucesso", - + // "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.discard-button": "Cancelar", - + // "item.edit.relationships.edit.buttons.add": "Add", "item.edit.relationships.edit.buttons.add": "Adicionar", @@ -3217,16 +3217,16 @@ // "item.edit.relationships.edit.buttons.undo": "Undo changes", "item.edit.relationships.edit.buttons.undo": "Cancelar alterações", - + // "item.edit.relationships.no-relationships": "No relationships", "item.edit.relationships.no-relationships": "Sem relações", // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.relationships.notifications.discarded.content": "Suas alterações foram canceladas. Para restabelecer suas alterações, clique no botão 'Cancelar'", - + // "item.edit.relationships.notifications.discarded.title": "Changes discarded", "item.edit.relationships.notifications.discarded.title": "Alterações canceladas", - + // "item.edit.relationships.notifications.failed.title": "Error editing relationships", "item.edit.relationships.notifications.failed.title": "Erro ao apagar relação", @@ -3247,16 +3247,16 @@ // "item.edit.relationships.save-button": "Save", "item.edit.relationships.save-button": "Guardar", - + // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", "item.edit.relationships.no-entity-type": "Adicione o metadado 'dspace.entity.type' para ativar relações neste item!", - - // "item.edit.return": "Back", + + // "item.edit.return": "Back", "item.edit.return": "Voltar", - + // "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.head": "Ficheiros do item", - + // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", "item.edit.tabs.bitstreams.title": "Editar Item - Ficheiros", @@ -3265,28 +3265,28 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Editar item - Curadoria", - + // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadados do item", - + // "item.edit.tabs.metadata.title": "Item Edit - Metadata", "item.edit.tabs.metadata.title": "Editar Item - Metadados", // "item.edit.tabs.relationships.head": "Relationships", "item.edit.tabs.relationships.head": "Relações do item", - + // "item.edit.tabs.relationships.title": "Item Edit - Relationships", "item.edit.tabs.relationships.title": "Editar Item - Relacionamentos", // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", "item.edit.tabs.status.buttons.authorizations.button": "Permissões...", - + // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", "item.edit.tabs.status.buttons.authorizations.label": "Editar políticas de permissões de item", - + // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", "item.edit.tabs.status.buttons.delete.button": "Apagar definitivamente", - + // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", "item.edit.tabs.status.buttons.delete.label": "Eliminar completamente o item", @@ -3295,22 +3295,22 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gerir coleções mapeadas", - + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", "item.edit.tabs.status.buttons.move.button": "Mover este item para outra coleção", - + // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Mover item para outra coleção", - + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", "item.edit.tabs.status.buttons.private.button": "Tornar o item privado...", - + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", "item.edit.tabs.status.buttons.private.label": "Tornar o item privado", - + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", "item.edit.tabs.status.buttons.public.button": "Tornar público o item...", - + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", "item.edit.tabs.status.buttons.public.label": "Tornar público o item", @@ -3319,31 +3319,31 @@ // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Restabelecer item no repositório", - + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Não possui autorizações para realizar esta ação!", - + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", "item.edit.tabs.status.buttons.withdraw.button": "Retirar este item", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Retirar item da vista pública do repositório", - + // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", "item.edit.tabs.status.description": "Bem-vindo à página de gestão de itens. Nesta área, pode retirar, restabelecer, mover ou apagar definitivamente o item. Adicionalmente, também pode atualizar ou adicionar novos metadados / bitstreams percorrendo pelas outras abas.", - + // "item.edit.tabs.status.head": "Status", "item.edit.tabs.status.head": "Estado do item", - + // "item.edit.tabs.status.labels.handle": "Handle", "item.edit.tabs.status.labels.handle": "Handle", // "item.edit.tabs.status.labels.id": "Item Internal ID", "item.edit.tabs.status.labels.id": "ID Interno do item", - + // "item.edit.tabs.status.labels.itemPage": "Item Page", "item.edit.tabs.status.labels.itemPage": "Página do item", - + // "item.edit.tabs.status.labels.lastModified": "Last Modified", "item.edit.tabs.status.labels.lastModified": "Ultima alteração", @@ -3352,13 +3352,13 @@ // "item.edit.tabs.versionhistory.head": "Version History", "item.edit.tabs.versionhistory.head": "Histórico de versões", - + // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", "item.edit.tabs.versionhistory.title": "Edições do Item - Histórico de versões", - + // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", "item.edit.tabs.versionhistory.under-construction": "Editar ou adicionar novas versões ainda não é possível neste interface de utilizador.", - + // "item.edit.tabs.view.head": "View Item", "item.edit.tabs.view.head": "Visualizar Item", @@ -3382,22 +3382,22 @@ // "item.edit.withdraw.success": "The item was withdrawn successfully", "item.edit.withdraw.success": "O item foi retirado com sucesso!", - + // "item.orcid.return": "Back", "item.orcid.return": "Voltar", - + // "item.listelement.badge": "Item", "item.listelement.badge": "Item", // "item.page.description": "Description", "item.page.description": "Descrição", - + // "item.page.journal-issn": "Journal ISSN", "item.page.journal-issn": "ISSN da revista", - + // "item.page.journal-title": "Journal Title", "item.page.journal-title": "Título da revista", - + // "item.page.publisher": "Publisher", "item.page.publisher": "Editora", @@ -3409,19 +3409,19 @@ // "item.search.results.head": "Item Search Results", "item.search.results.head": "Resultados da pesquisa de item", - + // "item.search.title": "Item Search", "item.search.title": "Pesquisa de item", - + // "item.truncatable-part.show-more": "Show more", "item.truncatable-part.show-more": "Mostrar mais", // "item.truncatable-part.show-less": "Collapse", "item.truncatable-part.show-less": "Colapsar", - + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", "workflow-item.search.result.delete-supervision.modal.header": "Eliminar ordem de supervisão", - + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", "workflow-item.search.result.delete-supervision.modal.info": "Tem a certeza de que quer remover a ordem de supervisão", @@ -3454,13 +3454,13 @@ // "item.page.collections": "Collections", "item.page.collections": "Coleções", - + // "item.page.collections.loading": "Loading...", "item.page.collections.loading": "A carregar...", - + // "item.page.collections.load-more": "Load more", "item.page.collections.load-more": "Carregar mais", - + // "item.page.date": "Date", "item.page.date": "Data", @@ -3475,7 +3475,7 @@ // "item.page.filesection.download": "Download", "item.page.filesection.download": "Ver/Abrir", - + // "item.page.filesection.format": "Format:", "item.page.filesection.format": "Formato:", @@ -3493,13 +3493,13 @@ // "item.page.link.simple": "Simple item page", "item.page.link.simple": "Ver registo simples", - + // "item.page.orcid.title": "ORCID", "item.page.orcid.title": "ORCID", // "item.page.orcid.tooltip": "Open ORCID setting page", "item.page.orcid.tooltip": "Abrir página de configuração do ORCID", - + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Artigos deste autor", @@ -3517,10 +3517,10 @@ // "item.page.relationships.isOrgUnitOfPerson": "Authors", "item.page.relationships.isOrgUnitOfPerson": "Autores", - + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", "item.page.relationships.isOrgUnitOfProject": "Projetos de investigação", - + // "item.page.subject": "Keywords", "item.page.subject": "Palavras-chave", @@ -3538,7 +3538,7 @@ // "item.page.filesection.license.bundle": "License bundle", "item.page.filesection.license.bundle": "Licença", - + // "item.page.return": "Back", "item.page.return": "Voltar", @@ -3546,14 +3546,14 @@ "item.page.version.create": "Criar nova versão", // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", - "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", - + "item.page.version.hasDraft": "Um nova versão não pode ser criada porque já se encontra uma submisão em curso no histórico de versões.", + // "item.page.claim.button": "Claim", "item.page.claim.button": "Reivindicar", // "item.page.claim.tooltip": "Claim this item as profile", "item.page.claim.tooltip": "Reivindicar este item como perfil", - + // "item.preview.dc.identifier.uri": "Identifier:", "item.preview.dc.identifier.uri": "Identificador:", @@ -3577,10 +3577,10 @@ // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Título:", - + // "item.preview.dc.type": "Type:", "item.preview.dc.type": "Tipo:", - + // "item.preview.oaire.citation.issue": "Issue", "item.preview.oaire.citation.issue": "Issue", @@ -3588,17 +3588,17 @@ "item.preview.oaire.citation.volume": "Volume", // "item.preview.dc.relation.issn": "ISSN", - "item.preview.dc.relation.issn": "ISSN", - + "item.preview.dc.relation.issn": "ISSN", + // "item.preview.dc.relation.eissn": "EISSN", "item.preview.dc.relation.eissn": "EISSN", // "item.preview.dc.identifier.isbn": "ISBN", - "item.preview.dc.identifier.isbn": "ISBN", - + "item.preview.dc.identifier.isbn": "ISBN", + // "item.preview.dc.identifier.eisbn": "EISBN", "item.preview.dc.identifier.eisbn": "EISBN", - + // "item.preview.dc.identifier.tid": "TID", "item.preview.dc.identifier.tid": "TID", @@ -3609,8 +3609,8 @@ "item.preview.dc.relation.ispartof": "Revista ou Série", // "item.preview.dc.identifier.doi": "DOI", - "item.preview.dc.identifier.doi": "DOI", - + "item.preview.dc.identifier.doi": "DOI", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -3619,7 +3619,7 @@ // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID:", - + // "item.preview.project.funder.name": "Funder:", "item.preview.project.funder.name": "Financiador:", @@ -3634,16 +3634,16 @@ // "item.preview.dc.coverage.spatial": "Jurisdiction:", "item.preview.dc.coverage.spatial": "Jurisdição:", - + // "item.preview.oaire.fundingStream": "Funding Stream:", "item.preview.oaire.fundingStream": "Linha de financiamento:", - + // "item.select.confirm": "Confirm selected", "item.select.confirm": "Confirmar seleção", // "item.select.empty": "No items to show", "item.select.empty": "Nenhum item para mostrar.", - + // "item.select.table.author": "Author", "item.select.table.author": "Autor", @@ -3652,19 +3652,19 @@ // "item.select.table.title": "Title", "item.select.table.title": "Título", - + // "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.empty": "Ainda não existem outras versões deste item.", - + // "item.version.history.head": "Version History", "item.version.history.head": "Histórico de versões", - + // "item.version.history.return": "Back", "item.version.history.return": "Voltar", // "item.version.history.selected": "Selected version", "item.version.history.selected": "Versão selecionada", - + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", "item.version.history.selected.alert": "Está a ver a versão {{version}} do item.", @@ -3712,16 +3712,16 @@ // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", "item.version.history.table.action.hasDraft": "Uma nova versão não pode ser criada porque se encontra um depósito em curso no histórico de versões", - + // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Esta não é a última versão deste item. A última versão pode ser encontrada aqui.", - + // "item.version.create.modal.header": "New version", "item.version.create.modal.header": "Nova versão", // "item.version.create.modal.text": "Create a new version for this item", "item.version.create.modal.text": "Criar uma nova versão para este item", - + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", "item.version.create.modal.text.startingFrom": "Iniciar a partir da versão {{version}}", @@ -3742,16 +3742,16 @@ // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", "item.version.create.modal.form.summary.placeholder": "Inserir o sumário para a nova versão", - - // "item.version.create.modal.submitted.header": "Creating new version...", - "item.version.create.modal.submitted.header": "Criar uma nova versão...", - // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Criar uma nova versão...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", "item.version.create.modal.submitted.text": "A nova versão está a ser criada. Isto pode demorar algum tempo se o item tiver muitas relações.", // "item.version.create.notification.success": "New version has been created with version number {{version}}", "item.version.create.notification.success": "Nova versão foi criada com o número {{version}}", - + // "item.version.create.notification.failure": "New version has not been created", "item.version.create.notification.failure": "Nova versão não foi criada", @@ -3763,7 +3763,7 @@ // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", "item.version.delete.modal.text": "Pretende remover a versão {{version}}?", - + // "item.version.delete.modal.button.confirm": "Delete", "item.version.delete.modal.button.confirm": "Remover", @@ -3775,7 +3775,7 @@ // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", "item.version.delete.modal.button.cancel.tooltip": "Não remover esta versão", - + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", "item.version.delete.notification.success": "A versão número {{version}} foi removida", @@ -3787,12 +3787,12 @@ // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", "item.version.edit.notification.failure": "O sumário da versão número {{version}} não foi alterado", - + // "itemtemplate.edit.metadata.add-button": "Add", "itemtemplate.edit.metadata.add-button": "Adicionar", // "itemtemplate.edit.metadata.discard-button": "Discard", - "itemtemplate.edit.metadata.discard-button": 'Rejeitar', + "itemtemplate.edit.metadata.discard-button": "Rejeitar", // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirmar", @@ -3868,7 +3868,7 @@ // "itemtemplate.edit.metadata.save-button": "Save", "itemtemplate.edit.metadata.save-button": "Guardar", - + // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Revista", @@ -3889,19 +3889,19 @@ // "journal.page.titleprefix": "Journal: ", "journal.page.titleprefix": "Revista: ", - + // "journal.search.results.head": "Journal Search Results", "journal.search.results.head": "Resultado da pesquisa de revistas", - + // "journal-relationships.search.results.head": "Journal Search Results", "journal-relationships.search.results.head": "Resultado da pesquisa de revistas", - + // "journal.search.title": "Journal Search", "journal.search.title": "Pesquisa de revistas", - + // "journalissue.listelement.badge": "Journal Issue", "journalissue.listelement.badge": "Número de revista", - + // "journalissue.page.description": "Description", "journalissue.page.description": "Descrição", @@ -3910,25 +3910,25 @@ // "journalissue.page.issuedate": "Issue Date", "journalissue.page.issuedate": "Data de publicação", - + // "journalissue.page.journal-issn": "Journal ISSN", "journalissue.page.journal-issn": "ISSN da revista", - + // "journalissue.page.journal-title": "Journal Title", "journalissue.page.journal-title": "Título da revista", - + // "journalissue.page.keyword": "Keywords", "journalissue.page.keyword": "Palavras-chave", // "journalissue.page.number": "Number", "journalissue.page.number": "Número de páginas", - + // "journalissue.page.titleprefix": "Journal Issue: ", "journalissue.page.titleprefix": "Número de revista: ", - + // "journalvolume.listelement.badge": "Journal Volume", "journalvolume.listelement.badge": "Volume de revista", - + // "journalvolume.page.description": "Description", "journalvolume.page.description": "Descrição", @@ -3937,13 +3937,13 @@ // "journalvolume.page.issuedate": "Issue Date", "journalvolume.page.issuedate": "Data de publicação", - + // "journalvolume.page.titleprefix": "Journal Volume: ", "journalvolume.page.titleprefix": "Volume de revista: ", - + // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Volume", - + // "iiifsearchable.listelement.badge": "Document Media", "iiifsearchable.listelement.badge": "Media do documeo", @@ -3974,9 +3974,9 @@ // "iiif.page.issue": "Issue: ", "iiif.page.issue": "Número: ", - // "iiif.page.description": "Description: ", - "iiif.page.description": "Description: ", - + // "iiif.page.description": "Description: ", + "iiif.page.description": "Description: ", + // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "A carregar ficheiro...", @@ -4018,7 +4018,7 @@ // "loading.recent-submissions": "Loading recent submissions...", "loading.recent-submissions": "A carregar depósitos recentes...", - + // "loading.search-results": "Loading search results...", "loading.search-results": "A carregar resultados de pesquisa...", @@ -4042,22 +4042,22 @@ // "login.form.new-user": "New user? Click here to register.", "login.form.new-user": "Novo utilizador? Clique aqui para se registar.", - + // "login.form.or-divider": "or", "login.form.or-divider": "ou", - + // "login.form.oidc": "Log in with OIDC", "login.form.oidc": "Entrar com OIDC", - + // "login.form.orcid": "Log in with ORCID", "login.form.orcid": "Entrar com ORCID", - + // "login.form.password": "Password", "login.form.password": "Palavra-chave", // "login.form.shibboleth": "Log in with Shibboleth", "login.form.shibboleth": "Entrar com autenticação federada", - + // "login.form.submit": "Log in", "login.form.submit": "Entrar", @@ -4066,16 +4066,16 @@ // "login.breadcrumbs": "Login", "login.breadcrumbs": "Entrar", - + // "logout.form.header": "Log out from DSpace", "logout.form.header": "Sair do repositório", - + // "logout.form.submit": "Log out", "logout.form.submit": "Sair", // "logout.title": "Logout", "logout.title": "Sair", - + // "menu.header.admin": "Management", "menu.header.admin": "Administração", @@ -4084,10 +4084,10 @@ // "menu.header.admin.description": "Management menu", "menu.header.admin.description": "Menu de administração", - + // "menu.section.access_control": "Access Control", "menu.section.access_control": "Controlo de acesso", - + // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Autorizações", @@ -4095,47 +4095,47 @@ "menu.section.access_control_groups": "Grupos", // "menu.section.access_control_people": "People", - "menu.section.access_control_people": "Pessoas", - + "menu.section.access_control_people": "Pessoas", + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Pesquisa administrativa", - + // "menu.section.browse_community": "This Community", "menu.section.browse_community": "Esta comunidade", - + // "menu.section.browse_community_by_author": "By Author", "menu.section.browse_community_by_author": "Por autor", - + // "menu.section.browse_community_by_issue_date": "By Issue Date", "menu.section.browse_community_by_issue_date": "Por data de publicação", - + // "menu.section.browse_community_by_title": "By Title", "menu.section.browse_community_by_title": "Por título", - + // "menu.section.browse_global": "All of DSpace", "menu.section.browse_global": "Percorrer repositório", - + // "menu.section.browse_global_by_author": "By Author", "menu.section.browse_global_by_author": "Por autor", - + // "menu.section.browse_global_by_dateissued": "By Issue Date", "menu.section.browse_global_by_dateissued": "Por data de publicação", - + // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Por assunto", - + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Por título", - + // "menu.section.browse_global_communities_and_collections": "Communities & Collections", "menu.section.browse_global_communities_and_collections": "Comunidades & Coleções", - + // "menu.section.control_panel": "Control Panel", "menu.section.control_panel": "Painel de controle", - + // "menu.section.curation_task": "Curation Task", "menu.section.curation_task": "Tarefas de curadoria", - + // "menu.section.edit": "Edit", "menu.section.edit": "Editar", @@ -4162,10 +4162,10 @@ // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metadados", - + // "menu.section.export_batch": "Batch Export (ZIP)", "menu.section.export_batch": "Importação em lote (ZIP)", - + // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Secção do menu Controle de Acesso", @@ -4174,10 +4174,10 @@ // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Secção do menu Painel de Controlo", - + // "menu.section.icon.curation_tasks": "Curation Task menu section", "menu.section.icon.curation_tasks": "Secção do menu tarefas de curadoria", - + // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Secção do menu Editar", @@ -4186,10 +4186,10 @@ // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Secção do menu Pesquisar", - + // "menu.section.icon.health": "Health check menu section", "menu.section.icon.health": "Seção do menu Diagnóstico do sistema", - + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Secção do menu Importar", @@ -4198,31 +4198,31 @@ // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Fixar barra lateral", - + // "menu.section.icon.processes": "Processes Health", "menu.section.icon.processes": "Processos diagnóstico", - + // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Secção do menu Registos", // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Secção do menu Tarefas de Estatísticas", - + // "menu.section.icon.workflow": "Administer workflow menu section", "menu.section.icon.workflow": "Menu administração de tarefas", - + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Soltar barra lateral", - + // "menu.section.import": "Import", "menu.section.import": "Importar", - + // "menu.section.import_batch": "Batch import (ZIP)", "menu.section.import_batch": "Importação em lote (ZIP)", - + // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metadados", - + // "menu.section.new": "New", "menu.section.new": "Novo", @@ -4237,10 +4237,10 @@ // "menu.section.new_item_version": "Item Version", "menu.section.new_item_version": "Versão do item", - + // "menu.section.new_process": "Process", "menu.section.new_process": "Processos", - + // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Fixar barra lateral", @@ -4249,10 +4249,10 @@ // "menu.section.processes": "Processes", "menu.section.processes": "Processos", - + // "menu.section.health": "Health", "menu.section.health": "Diagnóstico do sistema", - + // "menu.section.registries": "Registries", "menu.section.registries": "Registos", @@ -4267,55 +4267,55 @@ // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Tarefa de estatísticas", - + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Alternar secção controle de acesso", - + // "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.control_panel": "Alternar secção painel de controle", - + // "menu.section.toggle.curation_task": "Toggle Curation Task section", "menu.section.toggle.curation_task": "Alternar secção tarefas de curadoria", - + // "menu.section.toggle.edit": "Toggle Edit section", "menu.section.toggle.edit": "Alternar secção editar", - + // "menu.section.toggle.export": "Toggle Export section", "menu.section.toggle.export": "Alternar secção exportar", - + // "menu.section.toggle.find": "Toggle Find section", "menu.section.toggle.find": "Alternar secção pesquisa", - + // "menu.section.toggle.import": "Toggle Import section", "menu.section.toggle.import": "Alternar secção importar", - + // "menu.section.toggle.new": "Toggle New section", "menu.section.toggle.new": "Alternar nova secção", - + // "menu.section.toggle.registries": "Toggle Registries section", "menu.section.toggle.registries": "Alternar secção registos", - + // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", "menu.section.toggle.statistics_task": "Alternar secção tarefas de estatísticas", - + // "menu.section.workflow": "Administer Workflow", "menu.section.workflow": "Gestão do workflow", - + // "metadata-export-search.tooltip": "Export search results as CSV", "metadata-export-search.tooltip": "Exportar resultados de pesquisa em CSV", - - // "metadata-export-search.submit.success": "The export was started successfully", + + // "metadata-export-search.submit.success": "The export was started successfully", "metadata-export-search.submit.success": "A exportação foi iniciada com sucesso", - + // "metadata-export-search.submit.error": "Starting the export has failed", "metadata-export-search.submit.error": "O início da exportação falhou!", - + // "mydspace.breadcrumbs": "MyDSpace", - "mydspace.breadcrumbs": "Área Pessoal", - + "mydspace.breadcrumbs": "Área Pessoal", + // "mydspace.description": "", "mydspace.description": "", - + // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Selecione esta opção para enviar uma mensagem para o depositante do item.", @@ -4357,7 +4357,7 @@ // "mydspace.new-submission": "New submission", "mydspace.new-submission": "Novo depósito", - + // "mydspace.new-submission-external": "Import metadata from external source", "mydspace.new-submission-external": "Importar metadados de fontes externas", @@ -4366,7 +4366,7 @@ // "mydspace.results.head": "Your submissions", "mydspace.results.head": "Meus depósitos", - + // "mydspace.results.no-abstract": "No Abstract", "mydspace.results.no-abstract": "Sem Resumo", @@ -4375,13 +4375,13 @@ // "mydspace.results.no-collections": "No Collections", "mydspace.results.no-collections": "Sem coleções", - + // "mydspace.results.no-date": "No Date", "mydspace.results.no-date": "Sem data", - + // "mydspace.results.no-files": "No Files", "mydspace.results.no-files": "Sem ficheiros", - + // "mydspace.results.no-results": "There were no items to show", "mydspace.results.no-results": "Não havia itens a mostrar", @@ -4392,32 +4392,32 @@ "mydspace.results.no-uri": "Sem URI", // "mydspace.search-form.placeholder": "Search in mydspace...", - "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", - + "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", + // "mydspace.show.workflow": "Workflow tasks", "mydspace.show.workflow": "Todas as tarefas", // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Meus depósitos", - + // "mydspace.show.supervisedWorkspace": "Supervised items", "mydspace.show.supervisedWorkspace": "Itens supervisionados", - + // "mydspace.status.archived": "Archived", "mydspace.status.archived": "Depósito aceite", - + // "mydspace.status.validation": "Validation", "mydspace.status.validation": "Em validação", - + // "mydspace.status.waiting-for-controller": "Waiting for controller", "mydspace.status.waiting-for-controller": "Aguarda validador", - + // "mydspace.status.workflow": "Workflow", "mydspace.status.workflow": "Em fluxo de trabalho", - + // "mydspace.status.workspace": "Workspace", "mydspace.status.workspace": "Depósito por terminar", - + // "mydspace.title": "MyDSpace", "mydspace.title": "Área Pessoal", @@ -4435,31 +4435,31 @@ // "mydspace.view-btn": "View", "mydspace.view-btn": "Ver", - + // "nav.browse.header": "All of DSpace", "nav.browse.header": "Tudo no repositório", - + // "nav.community-browse.header": "By Community", "nav.community-browse.header": "Por comunidade", - + // "nav.context-help-toggle": "Toggle context help", "nav.context-help-toggle": "Alternar ajuda contextual", // "nav.language": "Language switch", "nav.language": "Escolher idioma", - + // "nav.login": "Log In", "nav.login": "Entrar", - + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", "nav.user-profile-menu-and-logout": "Menu perfil do utilizador e sair", - + // "nav.logout": "Log Out", "nav.logout": "Sair", - + // "nav.main.description": "Main navigation bar", "nav.main.description": "Barra de naveção principal", - + // "nav.mydspace": "MyDSpace", "nav.mydspace": "Área Pessoal", @@ -4476,8 +4476,8 @@ "nav.stop-impersonating": "Deixar de assumir o papel do utilizador", // "nav.subscriptions": "Subscriptions", - "nav.subscriptions": "Subscrições de alertas", - + "nav.subscriptions": "Subscrições de alertas", + // "nav.toggle": "Toggle navigation", "nav.toggle": "Alternar a navegação", @@ -4486,13 +4486,13 @@ // "none.listelement.badge": "Item", "none.listelement.badge": "Item", - + // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Organização", - + // "orgunit.listelement.no-title": "Untitled", "orgunit.listelement.no-title": "Sem título", - + // "orgunit.page.city": "City", "orgunit.page.city": "Cidade", @@ -4513,10 +4513,10 @@ // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organização: ", - + // "pagination.options.description": "Pagination options", - "pagination.options.description": "Opções de paginação", - + "pagination.options.description": "Opções de paginação", + // "pagination.results-per-page": "Results Per Page", "pagination.results-per-page": "Resultados por página", @@ -4528,7 +4528,7 @@ // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Opções de ordenação", - + // "person.listelement.badge": "Person", "person.listelement.badge": "Pessoa", @@ -4555,7 +4555,7 @@ // "person.page.name": "Name", "person.page.name": "Nome", - + // "person.page.link.full": "Show all metadata", "person.page.link.full": "Mostrar todos os metadados", @@ -4570,19 +4570,19 @@ // "person.search.results.head": "Person Search Results", "person.search.results.head": "Resultados da pesquisa de pessoas", - + // "person-relationships.search.results.head": "Person Search Results", "person-relationships.search.results.head": "Resultados da pesquisa de pessoas", - + // "person.search.title": "Person Search", "person.search.title": "Pesquisar pessoa", - + // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Parâmetros", // "process.new.cancel": "Cancel", "process.new.cancel": "Cancelar", - + // "process.new.submit": "Save", "process.new.submit": "Guardar", @@ -4678,7 +4678,7 @@ // "process.detail.create": "Create similar process", "process.detail.create": "Criar processo similar", - + // "process.detail.actions": "Actions", "process.detail.actions": "Ações", @@ -4700,21 +4700,21 @@ // "process.detail.delete.success": "The process was successfully deleted.", "process.detail.delete.success": "O processo foi removido com sucesso.", - // "process.detail.delete.error": "Something went wrong when deleting the process", - "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", - + // "process.detail.delete.error": "Something went wrong when deleting the process", + "process.detail.delete.error": "Ocorreu algum erro ao remover o processo", + // "process.overview.table.finish": "Finish time (UTC)", "process.overview.table.finish": "Hora de término (UTC)", - + // "process.overview.table.id": "Process ID", "process.overview.table.id": "ID do Processo", // "process.overview.table.name": "Name", "process.overview.table.name": "Nome", - + // "process.overview.table.start": "Start time (UTC)", "process.overview.table.start": "Hora de início (UTC)", - + // "process.overview.table.status": "Status", "process.overview.table.status": "Estado", @@ -4723,13 +4723,13 @@ // "process.overview.title": "Processes Overview", "process.overview.title": "Resumo dos processos", - + // "process.overview.breadcrumbs": "Processes Overview", "process.overview.breadcrumbs": "Resumo dos processos", - + // "process.overview.new": "New", "process.overview.new": "Novo", - + // "process.overview.table.actions": "Actions", "process.overview.table.actions": "Ações", @@ -4756,34 +4756,34 @@ // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", "process.bulk.delete.success": "{{count}} processso(s) foram removidos com sucesso", - + // "profile.breadcrumbs": "Update Profile", "profile.breadcrumbs": "Atualizar perfil", - + // "profile.card.identify": "Identify", "profile.card.identify": "Identificação", // "profile.card.security": "Security", "profile.card.security": "Senha de acesso", - + // "profile.form.submit": "Save", "profile.form.submit": "Atualizar perfil", - + // "profile.groups.head": "Authorization groups you belong to", "profile.groups.head": "Os seus grupos", - + // "profile.special.groups.head": "Authorization special groups you belong to", "profile.special.groups.head": "Autorização de grupos especiais aos quais pertence", // "profile.head": "Update Profile", "profile.head": "Atualizar perfil", - + // "profile.metadata.form.error.firstname.required": "First Name is required", "profile.metadata.form.error.firstname.required": "O preenchimento do nome é um elemento obrigatório!", - + // "profile.metadata.form.error.lastname.required": "Last Name is required", "profile.metadata.form.error.lastname.required": "O preenchiento do apelido é um elemento obrigatório!", - + // "profile.metadata.form.label.email": "Email Address", "profile.metadata.form.label.email": "Endereço de correio eletrónico", @@ -4813,46 +4813,46 @@ // "profile.security.form.error.matching-passwords": "The passwords do not match.", "profile.security.form.error.matching-passwords": "As senhas não coincidem.", - + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", "profile.security.form.info": "Opcionalmente, pode criar uma nova senha introduzindo-a primeira caixa de texto e confirmando-a na segunda caixa de texto.", - + // "profile.security.form.label.password": "Password", "profile.security.form.label.password": "Senha", - + // "profile.security.form.label.passwordrepeat": "Retype to confirm", "profile.security.form.label.passwordrepeat": "Insira novamente a senha para confirmar", - + // "profile.security.form.label.current-password": "Current password", "profile.security.form.label.current-password": "Senha atual", - + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", "profile.security.form.notifications.success.content": "As alterações da senha foram guardadas.", - + // "profile.security.form.notifications.success.title": "Password saved", "profile.security.form.notifications.success.title": "Senha guardada", - + // "profile.security.form.notifications.error.title": "Error changing passwords", "profile.security.form.notifications.error.title": "Erro ao mudar a senha", - + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", "profile.security.form.notifications.error.change-failed": "Ocorreu um erro ao tentar alterar a senha. Verifique se a senha atual está correcta.", - + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", "profile.security.form.notifications.error.not-same": "As senhas fornecidas não coincidem.", - + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", "profile.security.form.notifications.error.general": "Por favor preencha os campos obrigatórios no formulário de segurança.", - + // "profile.title": "Update Profile", "profile.title": "Atualizar perfil", - + // "profile.card.researcher": "Researcher Profile", "profile.card.researcher": "Perfil do investigador", - + // "project.listelement.badge": "Research Project", "project.listelement.badge": "Projeto de investigação", - + // "project.page.contributor": "Contributors", "project.page.contributor": "Contribuidores", @@ -4884,8 +4884,8 @@ "project.search.results.head": "Resultados da pesquisa de projetos", // "project-relationships.search.results.head": "Project Search Results", - "project-relationships.search.results.head": "Resultados da pesquisa de projetos", - + "project-relationships.search.results.head": "Resultados da pesquisa de projetos", + // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Publicação", @@ -4897,10 +4897,10 @@ // "publication.page.journal-issn": "Journal ISSN", "publication.page.journal-issn": "ISSN da revista", - + // "publication.page.journal-title": "Journal Title", "publication.page.journal-title": "Título da revista", - + // "publication.page.publisher": "Publisher", "publication.page.publisher": "Editora", @@ -4912,10 +4912,10 @@ // "publication.search.results.head": "Publication Search Results", "publication.search.resuts.head": "Resultados da pesquisa de publicações", - + // "publication-relationships.search.results.head": "Publication Search Results", "publication-relationships.search.results.head": "Resultados da pesquisa de publicações", - + // "publication.search.title": "Publication Search", "publication.search.title": "Pesquisa de publicações", @@ -4927,10 +4927,10 @@ // "media-viewer.playlist": "Playlist", "media-viewer.playlist": "Playlist", - + // "register-email.title": "New user registration", "register-email.title": "Registo de novo utilizador", - + // "register-page.create-profile.header": "Create Profile", "register-page.create-profile.header": "Criar perfil", @@ -4939,31 +4939,31 @@ // "register-page.create-profile.identification.email": "Email Address", "register-page.create-profile.identification.email": "Endereço de correio eletrónico", - + // "register-page.create-profile.identification.first-name": "First Name *", "register-page.create-profile.identification.first-name": "Nome *", // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", "register-page.create-profile.identification.first-name.error": "Inclua um nome", - + // "register-page.create-profile.identification.last-name": "Last Name *", "register-page.create-profile.identification.last-name": "Apelido *", // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", "register-page.create-profile.identification.last-name.error": "Inclua um apelido", - + // "register-page.create-profile.identification.contact": "Contact Telephone", "register-page.create-profile.identification.contact": "Contacto telefónico", - + // "register-page.create-profile.identification.language": "Language", "register-page.create-profile.identification.language": "Idioma", // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Segurança", - + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", "register-page.create-profile.security.info": "Insira uma palavra-chave na caixa abaixo, e confirme colocando-a de novo da segunda caixa.", - + // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Palavra-chave *", @@ -4981,33 +4981,33 @@ // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", "register-page.create-profile.submit.error.content": "Ocorreu um erro ao registar o utilizador.", - + // "register-page.create-profile.submit.error.head": "Registration failed", "register-page.create-profile.submit.error.head": "Falha no registo", - + // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", "register-page.create-profile.submit.success.content": "O registo foi criado com sucesso. Foi iniciada sessão com o Utilizador criado.", // "register-page.create-profile.submit.success.head": "Registration completed", "register-page.create-profile.submit.success.head": "Registo finalizado com sucesso", - + // "register-page.registration.header": "New user registration", "register-page.registration.header": "Registo de novo utilizador", - + // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", "register-page.registration.info": "Crie uma conta de utilizador para subscrever novos conteúdos das coleções e depositar itens no repositório.", - + // "register-page.registration.email": "Email Address *", "register-page.registration.email": "Endereço de correio eletrónico *", - + // "register-page.registration.email.error.required": "Please fill in an email address", "register-page.registration.email.error.required": "Insira um endereço de correio eletrónico", - + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", "register-page.registration.email.error.not-email-form": "Insira um endereço de correio eletrónico válido.", // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", - "register-page.registration.email.error.not-valid-domain": "Usar endereço de correio eletrónico com domínios permitidos: {{ domains }}", + "register-page.registration.email.error.not-valid-domain": "Usar endereço de correio eletrónico com domínios permitidos: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Este endereço de correio eletrónico será verificado e usado para iniciar sessão.", @@ -5017,7 +5017,7 @@ // "register-page.registration.success.head": "Verification email sent", "register-page.registration.success.head": "Enviado email de verificação", - + // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "register-page.registration.success.content": "Foi enviado um email para {{ email }} com instruções e um endereço especial para confirmação.", @@ -5026,7 +5026,7 @@ // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Ocorreu um erro ao registar o seguinte endereço de correio eletrónico: {{ email }}", - + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", "register-page.registration.error.recaptcha": "Ocorreu um erro ao tentar autenticar com o recaptcha", @@ -5034,8 +5034,8 @@ "register-page.registration.google-recaptcha.must-accept-cookies": "Para se registar deve aceitar o registo e a senha de recuperação (Google reCaptcha) cookies.", // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", - "register-page.registration.error.maildomain": "Este endereço de e-mail não consta da lista de domínios que podem ser registados. Os domínios permitidos são {{ domains }}", - + "register-page.registration.error.maildomain": "Este endereço de e-mail não consta da lista de domínios que podem ser registados. Os domínios permitidos são {{ domains }}", + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", "register-page.registration.google-recaptcha.open-cookie-settings": "Configurações de Open cookie", @@ -5046,11 +5046,11 @@ "register-page.registration.google-recaptcha.notification.message.error": "Ocorreu um erro na verificação do reCaptcha", // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", - "register-page.registration.google-recaptcha.notification.message.expired": "Verificação expirou. Por favor verifique novamente.", - + "register-page.registration.google-recaptcha.notification.message.expired": "Verificação expirou. Por favor verifique novamente.", + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", "register-page.registration.info.maildomain": "As contas podem ser registadas para os endereços de email os domínios", - + // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", "relationships.add.error.relationship-type.content": "Não foi encontrado uma licação adequada no tipo de relação {{ type }} entre os dois itens", @@ -5080,13 +5080,13 @@ // "relationships.isOrgUnitOf": "Organizational Units", "relationships.isOrgUnitOf": "Unidades organizacionais", - + // "relationships.isPersonOf": "Authors", "relationships.isPersonOf": "Autores", // "relationships.isProjectOf": "Research Projects", "relationships.isProjectOf": "Projetos de investigação", - + // "relationships.isPublicationOf": "Publications", "relationships.isPublicationOf": "Publicações", @@ -5095,31 +5095,31 @@ // "relationships.isSingleJournalOf": "Journal", "relationships.isSingleJournalOf": "Revista", - + // "relationships.isSingleVolumeOf": "Journal Volume", "relationships.isSingleVolumeOf": "Volume de revista", - + // "relationships.isVolumeOf": "Journal Volumes", "relationships.isVolumeOf": "Volumes da revista", - + // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Contribuidores", - + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", "relationships.isContributorOf.OrgUnit": "Colaborador (Unidade organizacional)", // "relationships.isContributorOf.Person": "Contributor", "relationships.isContributorOf.Person": "Contribuidor", - + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", - "relationships.isFundingAgencyOf.OrgUnit": "Financiador", - + "relationships.isFundingAgencyOf.OrgUnit": "Financiador", + // "repository.image.logo": "Repository logo", - "repository.image.logo": "Logótipo do repositório", - + "repository.image.logo": "Logótipo do repositório", + // "repository.title.prefix": "DSpace Angular :: ", - "repository.title.prefix": "Repositório :: ", - + "repository.title.prefix": "Repositório :: ", + // "repository.title.prefixDSpace": "DSpace Angular ::", "repository.title.prefixDSpace": "Repositório ::", @@ -5173,13 +5173,13 @@ // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Ocorreu um erro ao editar a política de recurso.", - + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", "resource-policies.edit.page.target-failure.content": "Ocorreu um erro durante a edição da (ePerson ou grupo) da política de recursos.", // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", - "resource-policies.edit.page.other-failure.content": "Ocorreu um erro durante a edição da política de recursos. A (ePerson ou grupo) foi actualizado com sucesso.", - + "resource-policies.edit.page.other-failure.content": "Ocorreu um erro durante a edição da política de recursos. A (ePerson ou grupo) foi actualizado com sucesso.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "Operação bem sucedida", @@ -5188,19 +5188,19 @@ // "resource-policies.form.action-type.label": "Select the action type", "resource-policies.form.action-type.label": "Selecione o tipo de ação", - + // "resource-policies.form.action-type.required": "You must select the resource policy action.", "resource-policies.form.action-type.required": "Deve selecionar a ação da política de recurso.", // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", "resource-policies.form.eperson-group-list.label": "O utilizador ou grupo ao qual serão atribuídas as permissões", - + // "resource-policies.form.eperson-group-list.select.btn": "Select", "resource-policies.form.eperson-group-list.select.btn": "Seleccionar", // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", "resource-policies.form.eperson-group-list.tab.eperson": "Pesquisar um utilizador", - + // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", "resource-policies.form.eperson-group-list.tab.group": "Pesquisar um grupo", @@ -5209,31 +5209,31 @@ // "resource-policies.form.eperson-group-list.table.headers.id": "ID", "resource-policies.form.eperson-group-list.table.headers.id": "ID", - - // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Nome", - + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", "resource-policies.form.eperson-group-list.modal.header": "Não pode mudar de tipo", - + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Não é possível substituir um utilizador por um grupo.", // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Não é possível substituir um grupo por uma ePerson.", - + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", "resource-policies.form.eperson-group-list.modal.text2": "Eliminar a política actual de recursos e criar uma nova política com o tipo desejado.", // "resource-policies.form.eperson-group-list.modal.close": "Ok", "resource-policies.form.eperson-group-list.modal.close": "Ok", - + // "resource-policies.form.date.end.label": "End Date", "resource-policies.form.date.end.label": "Data de fim", - + // "resource-policies.form.date.start.label": "Start Date", "resource-policies.form.date.start.label": "Data de início", - + // "resource-policies.form.description.label": "Description", "resource-policies.form.description.label": "Descrição", @@ -5242,7 +5242,7 @@ // "resource-policies.form.policy-type.label": "Select the policy type", "resource-policies.form.policy-type.label": "Selecione o tipo de política", - + // "resource-policies.form.policy-type.required": "You must select the resource policy type.", "resource-policies.form.policy-type.required": "Deve selecionar um tipo de política de recurso.", @@ -5251,10 +5251,10 @@ // "resource-policies.table.headers.date.end": "End Date", "resource-policies.table.headers.date.end": "Data de término", - + // "resource-policies.table.headers.date.start": "Start Date", "resource-policies.table.headers.date.start": "Data de início", - + // "resource-policies.table.headers.edit": "Edit", "resource-policies.table.headers.edit": "Editar", @@ -5281,16 +5281,16 @@ // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", "resource-policies.table.headers.title.for.bitstream": "Política de ficheiros", - + // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", "resource-policies.table.headers.title.for.bundle": "Políticas para pacote", - + // "resource-policies.table.headers.title.for.item": "Policies for Item", "resource-policies.table.headers.title.for.item": "Políticas para item", - + // "resource-policies.table.headers.title.for.community": "Policies for Community", "resource-policies.table.headers.title.for.community": "Políticas para comunidade", - + // "resource-policies.table.headers.title.for.collection": "Policies for Collection", "resource-policies.table.headers.title.for.collection": "Políticas para coleção", @@ -5302,13 +5302,13 @@ // "search.title": "Search", "search.title": "Pesquisa", - + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Pesquisar", - + // "search.search-form.placeholder": "Search the repository ...", "search.search-form.placeholder": "Pesquisar no repositório...", - + // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Autor", @@ -5320,10 +5320,10 @@ // "search.filters.applied.f.dateSubmitted": "Date submitted", "search.filters.applied.f.dateSubmitted": "Data de depósito", - + // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Privado", - + // "search.filters.applied.f.entityType": "Item type", "search.filters.applied.f.entityType": "Tipo de item", @@ -5350,10 +5350,10 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Início data de nascimento", - + // "search.filters.applied.f.supervisedBy": "Supervised by", "search.filters.applied.f.supervisedBy": "Supervisionado por", - + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Retirado", @@ -5362,7 +5362,7 @@ // "search.filters.filter.author.placeholder": "Author name", "search.filters.filter.author.placeholder": "Nome do autor", - + // "search.filters.filter.author.label": "Search author name", "search.filters.filter.author.label": "Pesquisar por nome", @@ -5371,28 +5371,28 @@ // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Data de nascimento", - + // "search.filters.filter.birthDate.label": "Search birth date", "search.filters.filter.birthDate.label": "Procurar data de nascimento", - + // "search.filters.filter.collapse": "Collapse filter", "search.filters.filter.collapse": "Fechar filtro", - + // "search.filters.filter.creativeDatePublished.head": "Date Published", "search.filters.filter.creativeDatePublished.head": "Data de publicação", // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", - "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", - + "search.filters.filter.creativeDatePublished.placeholder": "Data de publicação", + // "search.filters.filter.creativeDatePublished.label": "Search date published", "search.filters.filter.creativeDatePublished.label": "Procurar data de publicação", - + // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Editor", // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Editor", - + // "search.filters.filter.creativeWorkEditor.label": "Search editor", "search.filters.filter.creativeWorkEditor.label": "Procurar editor", @@ -5401,7 +5401,7 @@ // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Assunto", - + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", "search.filters.filter.creativeWorkKeywords.label": "Procurar assuntos", @@ -5410,34 +5410,34 @@ // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Editora", - + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", "search.filters.filter.creativeWorkPublisher.label": "Procurar editora", - + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Data", - + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", "search.filters.filter.dateIssued.max.placeholder": "Data máxima", - + // "search.filters.filter.dateIssued.max.label": "End", "search.filters.filter.dateIssued.max.label": "Fim", // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", "search.filters.filter.dateIssued.min.placeholder": "Data mínima", - + // "search.filters.filter.dateIssued.min.label": "Start", "search.filters.filter.dateIssued.min.label": "Início", - + // "search.filters.filter.dateSubmitted.head": "Date submitted", "search.filters.filter.dateSubmitted.head": "Data de depósito", - + // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", "search.filters.filter.dateSubmitted.placeholder": "Data de depósito", - + // "search.filters.filter.dateSubmitted.label": "Search date submitted", "search.filters.filter.dateSubmitted.label": "Procurar data de depósito", - + // "search.filters.filter.discoverable.head": "Non-discoverable", "search.filters.filter.discoverable.head": "Privado", @@ -5446,37 +5446,37 @@ // "search.filters.filter.entityType.head": "Item Type", "search.filters.filter.entityType.head": "Tipo de item", - + // "search.filters.filter.entityType.placeholder": "Item Type", - "search.filters.filter.entityType.placeholder": "Tipo de item", - + "search.filters.filter.entityType.placeholder": "Tipo de item", + // "search.filters.filter.entityType.label": "Search item type", "search.filters.filter.entityType.label": "Pesquisar por tipo", // "search.filters.filter.expand": "Expand filter", - "search.filters.filter.expand": "Expandir filtro", - + "search.filters.filter.expand": "Expandir filtro", + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", "search.filters.filter.has_content_in_original_bundle.head": "Tem ficheiros", - + // "search.filters.filter.itemtype.head": "Type", "search.filters.filter.itemtype.head": "Tipo de item depositado", - + // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Tipo", - + // "search.filters.filter.itemtype.label": "Search type", "search.filters.filter.itemtype.label": "Procurar por tipo", - + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Cargo", // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Cargo", - + // "search.filters.filter.jobTitle.label": "Search job title", "search.filters.filter.jobTitle.label": "Procurar cargo", - + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Idioma conhecido", @@ -5485,22 +5485,22 @@ // "search.filters.filter.knowsLanguage.label": "Search known language", "search.filters.filter.knowsLanguage.label": "Procurar idiomas conhecidos", - + // "search.filters.filter.namedresourcetype.head": "Status", "search.filters.filter.namedresourcetype.head": "Estado do depósito", - + // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Estado", - + // "search.filters.filter.namedresourcetype.label": "Search status", "search.filters.filter.namedresourcetype.label": "Pesquisa por estado", - + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Pessoas", - + // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Pessoas", - + // "search.filters.filter.objectpeople.label": "Search people", "search.filters.filter.objectpeople.label": "Procurar pessoas", @@ -5509,7 +5509,7 @@ // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "País", - + // "search.filters.filter.organizationAddressCountry.label": "Search country", "search.filters.filter.organizationAddressCountry.label": "Procurar país", @@ -5518,28 +5518,28 @@ // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Cidade", - + // "search.filters.filter.organizationAddressLocality.label": "Search city", "search.filters.filter.organizationAddressLocality.label": "Procurar cidade", - + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", "search.filters.filter.organizationFoundingDate.head": "Data de fundação", - + // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", "search.filters.filter.organizationFoundingDate.placeholder": "Data de fundação", - + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", "search.filters.filter.organizationFoundingDate.label": "Procurar data de fundação", - + // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Âmbito", // "search.filters.filter.scope.placeholder": "Scope filter", "search.filters.filter.scope.placeholder": "Filtrar âmbito", - + // "search.filters.filter.scope.label": "Search scope filter", "search.filters.filter.scope.label": "Filtro do âmbito da pesquisa", - + // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Mostrar menos", @@ -5560,7 +5560,7 @@ // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Depositante", - + // "search.filters.filter.submitter.label": "Search submitter", "search.filters.filter.submitter.label": "Procurar depositante", @@ -5575,13 +5575,13 @@ // "search.filters.filter.supervisedBy.label": "search Supervised By", "search.filters.filter.supervisedBy.label": "pesquisar supervisionado por", - + // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Número de revista", - + // "search.filters.entityType.JournalVolume": "Journal Volume", "search.filters.entityType.JournalVolume": "Volume de revista", - + // "search.filters.entityType.OrgUnit": "Organizational Unit", "search.filters.entityType.OrgUnit": "Organização", @@ -5608,22 +5608,22 @@ // "search.filters.reset": "Reset filters", "search.filters.reset": "Limpar filtros", - + // "search.filters.search.submit": "Submit", "search.filters.search.submit": "Enviar", // "search.form.search": "Search", "search.form.search": "Pesquisar", - + // "search.form.search_dspace": "All repository", "search.form.search_dspace": "Pesquisar tudo", - + // "search.form.scope.all": "All of DSpace", "search.form.scope.all": "Pesquisar tudo", - + // "search.results.head": "Search Results", "search.results.head": "Resultados da pesquisa", - + // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", "search.results.no-results": "Sua pesquisa não retornou resultados. Tem dificuldade em encontrar o que procura? Tente incluir ", @@ -5632,10 +5632,10 @@ // "search.results.empty": "Your search returned no results.", "search.results.empty": "A sua pesquisa não retornou resultados.", - + // "search.results.view-result": "View", "search.results.view-result": "Ver", - + // "search.results.response.500": "An error occurred during query execution, please try again later", "search.results.response.500": "Ocorreu um erro durante a execução da consulta, por favor tente novamente mais tarde", @@ -5683,16 +5683,16 @@ // "sorting.dc.title.ASC": "Title Ascending", "sorting.dc.title.ASC": "Título ascendente", - + // "sorting.dc.title.DESC": "Title Descending", "sorting.dc.title.DESC": "Título descendente", - + // "sorting.score.ASC": "Least Relevant", "sorting.score.ASC": "Menos relevante", - + // "sorting.score.DESC": "Most Relevant", "sorting.score.DESC": "Mais relevante", - + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", "sorting.dc.date.issued.ASC": "Data de publicação ascendente", @@ -5703,8 +5703,8 @@ "sorting.dc.date.accessioned.ASC": "Data de disponibilização ascendente", // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", - "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", - + "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", + // "sorting.lastModified.ASC": "Last modified Ascending", "sorting.lastModified.ASC": "Última modificação ascendente", @@ -5714,7 +5714,7 @@ // "statistics.title": "Statistics", "statistics.title": "Estatísticas", - // "statistics.header": "Statistics for {{ scope }}", + // "statistics.header": "Statistics for {{ scope }}", "statistics.header": "Estatísticas para {{ scope }}", // "statistics.breadcrumbs": "Statistics", @@ -5728,34 +5728,34 @@ // "statistics.table.title.TotalVisits": "Total visits", "statistics.table.title.TotalVisits": "Total de visitas", - + // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", "statistics.table.title.TotalVisitsPerMonth": "Total de visitas por mês", - + // "statistics.table.title.TotalDownloads": "File Visits", "statistics.table.title.TotalDownloads": "Downloads", // "statistics.table.title.TopCountries": "Top country views", "statistics.table.title.TopCountries": "Top de consultas por país", - + // "statistics.table.title.TopCities": "Top city views", "statistics.table.title.TopCities": "Top de consultas por cidade", - + // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", - + // "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.breadcrumbs": "Editar depósito", - + // "submission.edit.title": "Edit Submission", "submission.edit.title": "Editar depósito", - + // "submission.general.cancel": "Cancel", "submission.general.cancel": "Cancelar", - + // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", "submission.general.cannot_submit": "Não possui permissões para fazer um novo depósito.", - + // "submission.general.deposit": "Deposit", "submission.general.deposit": "Depositar", @@ -5769,23 +5769,23 @@ "submission.general.discard.confirm.submit": "Sim, tenho certeza", // "submission.general.discard.confirm.title": "Discard submission", - "submission.general.discard.confirm.title": "Cancelar depósito", - + "submission.general.discard.confirm.title": "Cancelar depósito", + // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Cancelar", - + // "submission.general.info.saved": "Saved", "submission.general.info.saved": "Informação guardada", - + // "submission.general.info.pending-changes": "Unsaved changes", "submission.general.info.pending-changes": "Alterações não guardadas", - + // "submission.general.save": "Save", "submission.general.save": "Guardar", // "submission.general.save-later": "Save for later", "submission.general.save-later": "Guardar e fechar", - + // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Importar metadados de uma fonte externa", @@ -5794,28 +5794,28 @@ // "submission.import-external.title.Journal": "Import a journal from an external source", "submission.import-external.title.Journal": "Importar revista de uma fonte externa", - + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", "submission.import-external.title.JournalIssue": "Importar o número de um revista de um fonte externa", - - // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", - "submission.import-external.title.JournalVolume": "Importar o volume de uma revista de fonte externa", - + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importar o volume de uma revista de fonte externa", + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", "submission.import-external.title.OrgUnit": "Importar editora de uma fonte externa", - + // "submission.import-external.title.Person": "Import a person from an external source", "submission.import-external.title.Person": "Importar pessoa de uma fonte externa", - + // "submission.import-external.title.Project": "Import a project from an external source", - "submission.import-external.title.Project": "Importar projeto de uma fonte externa", - - // "submission.import-external.title.Publication": "Import a publication from an external source", - "submission.import-external.title.Publication": "Importar uma publicação de uma fonte externa", - + "submission.import-external.title.Project": "Importar projeto de uma fonte externa", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importar uma publicação de uma fonte externa", + // "submission.import-external.title.none": "Import metadata from an external source", "submission.import-external.title.none": "Importar metadados de uma fonte externa", - + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", "submission.import-external.page.hint": "Pesquise itens abaixo disponíveis na internet para que sejam importados para o repositório.", @@ -5836,7 +5836,7 @@ // "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.arxiv": "arXiv", - + // "submission.import-external.source.ads": "NASA/ADS", "submission.import-external.source.ads": "NASA/ADS", @@ -5845,7 +5845,7 @@ // "submission.import-external.source.crossref": "CrossRef", "submission.import-external.source.crossref": "CrossRef", - + // "submission.import-external.source.datacite": "DataCite", "submission.import-external.source.datacite": "DataCite", @@ -5865,38 +5865,38 @@ "submission.import-external.source.orcidWorks": "ORCID", // "submission.import-external.source.epo": "European Patent Office (EPO)", - "submission.import-external.source.epo": "European Patent Office (EPO)", - + "submission.import-external.source.epo": "European Patent Office (EPO)", + // "submission.import-external.source.loading": "Loading ...", "submission.import-external.source.loading": "A carregar ...", - + // "submission.import-external.source.sherpaJournal": "SHERPA Journals", "submission.import-external.source.sherpaJournal": "Revistas Sherpa Romeo por nome", - + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", "submission.import-external.source.sherpaJournalIssn": "Revistas Sherpa Romeo por ISSN", - + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", "submission.import-external.source.sherpaPublisher": "Editoras Sherpa Romeo", - + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", "submission.import-external.source.openAIREFunding": "Financiamento via API OpenAIRE", - + // "submission.import-external.source.orcid": "ORCID", "submission.import-external.source.orcid": "ORCID", - + // "submission.import-external.source.pubmed": "PubMed", "submission.import-external.source.pubmed": "PubMed", - + // "submission.import-external.source.pubmedeu": "PubMed Europe", "submission.import-external.source.pubmedeu": "PubMed Europa", - + // "submission.import-external.source.lcname": "Library of Congress Names", "submission.import-external.source.lcname": "Nomes da Library of Congress", // "submission.import-external.preview.title": "Item Preview", "submission.import-external.preview.title": "Pré-visualização do item", - + // "submission.import-external.preview.title.Publication": "Publication Preview", "submission.import-external.preview.title.Publication": "Pré-visualização da publicação", @@ -5913,17 +5913,17 @@ "submission.import-external.preview.title.Person": "Pré-visualização dos dados pessoais a importar", // "submission.import-external.preview.title.Project": "Project Preview", - "submission.import-external.preview.title.Project": "Pré-visualização do dados do projeto a importar", - + "submission.import-external.preview.title.Project": "Pré-visualização do dados do projeto a importar", + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", "submission.import-external.preview.subtitle": "Os seguintes metadados foram importados de uma fonte externa. Serão pré-preenchidos quando iniciar o depósito.", - + // "submission.import-external.preview.button.import": "Start submission", "submission.import-external.preview.button.import": "Iniciar depósito", - + // "submission.import-external.preview.error.import.title": "Submission error", "submission.import-external.preview.error.import.title": "Erro no depósito", - + // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", "submission.import-external.preview.error.import.body": "Ocorreu um erro durante o processo de importação de metadados de uma fonte externa.", @@ -5935,19 +5935,19 @@ // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importar autor remoto", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importar revista remota", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importar número de revista remoto", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importar volume de revista remoto", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Projeto", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Importar item remoto", @@ -5976,20 +5976,20 @@ "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importar projeto remoto", // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importar publicação remota", - + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importar publicação remota", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova entidade adicionada!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nova entidade adicionada!", // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", - + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Projeto", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", - + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Financiamento API OpenAIRE", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importar autor remoto", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Adicionado com sucesso um autor local à seleção", @@ -6007,7 +6007,7 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Selecione a coleção para onde pretende importar as novas entradas", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entidades", @@ -6016,40 +6016,40 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "A importar de LC Name", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "A importar do ORCID", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "A importar revista do Sherpa", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "A importar editora do Sherpa", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "A importar da PubMed", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "A importar do arXiv", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importar", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importar revista remota", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Revista local adicionada com sucesso à seleção", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importada e adicionada com sucesso uma revista externa à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importar número de revista remota", // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Número de revista local adicionado com sucesso à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Importado e adicionado um número de revista externa com sucesso à seleção", @@ -6058,31 +6058,31 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Volume de revista local adicionado com sucesso à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importado e adicionado um volume de revista externa com sucesso à seleção", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Selecione uma correspondência local:", - + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselecionar todos", - + // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselecionar página", - + // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", "submission.sections.describe.relationship-lookup.search-tab.loading": "A carregar...", - + // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Termos da pesquisa", // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Pesquisar", - + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar...", - + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Pesquisar...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Selecionar todos", @@ -6094,43 +6094,43 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autores locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Projetos locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Publicações locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autores locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unidades organizacionais locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacotes de dados locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Ficheiros de dados locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Revistas locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Números de revistas locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Números de revista locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Volumes de revistas locais ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Volumes de revistas locais ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Revistas do Sherpa ({{ count }})", @@ -6141,8 +6141,8 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomes LC ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", @@ -6153,38 +6153,38 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por agências de financiamento", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por financiamento", - + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Pesquisar por financiamento", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Pesquisar por unidades organizacionais", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Via API OpenAIRE", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Via API OpenAIRE", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projetos", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Financiador do projeto", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publicação do author", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Financiamento API OpenAIRE", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Projeto", - + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projetos", - + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Financiador do projeto", - + //"submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", - + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Pesquisar...", + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Seleção atual ({{ count }})", @@ -6193,7 +6193,7 @@ // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.JournalIssue": "Pesquisar números de revista", - + // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volumes de Revistas", @@ -6211,31 +6211,31 @@ // "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Project": "Pesquisar projetos", - + // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", "submission.sections.describe.relationship-lookup.title.Publication": "Publicações", // "submission.sections.describe.relationship-lookup.title.Person": "Authors", "submission.sections.describe.relationship-lookup.title.Person": "Pesquisar autores", - + // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", "submission.sections.describe.relationship-lookup.title.OrgUnit": "Pesquisar unidades organizacionais", - + // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacote de dados", - + // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", "submission.sections.describe.relationship-lookup.title.DataFile": "Ficheiros de dados", - + // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agência de financiamento", - + // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Financiamento", // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Organização principal", - + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publicação", @@ -6253,22 +6253,22 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Revistas selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume de revistas selecionadas", // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Projetos selecionados", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Publicações selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autores selecionados", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unidades organizacionais selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Pacotes de dados selecionados", @@ -6277,46 +6277,46 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Revistas selecionadas", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Número selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume de revista selecionado", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agência de financiamento selecionada", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Financiamento selecionado", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Número selecionado", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Organização selecionada", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Resultados da pesquisa", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Resultados da pesquisa", @@ -6333,11 +6333,11 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Resultados da pesquisa", // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", - + "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuros depósitos? Se não, pode usar apenas neste depósito.", - + // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar um Nome alternativo", @@ -6349,10 +6349,10 @@ // "submission.sections.ccLicense.select": "Select a license type…", "submission.sections.ccLicense.select": "Selecionar tipo de licença…", - + // "submission.sections.ccLicense.change": "Change your license type…", "submission.sections.ccLicense.change": "Alterar tipo de licença…", - + // "submission.sections.ccLicense.none": "No licenses available", "submission.sections.ccLicense.none": "Sem licenças disponíveis", @@ -6364,58 +6364,58 @@ // "submission.sections.ccLicense.confirmation": "I grant the license above", "submission.sections.ccLicense.confirmation": "Concedo a licença abaixo indicada", - + // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Adicionar mais", - + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", - "submission.sections.general.cannot_deposit": "O depósito não pode ser preenchido devido a erros no formulário.
    Por favor preencha todos os campos necessários para completar o depósito.", - + "submission.sections.general.cannot_deposit": "O depósito não pode ser preenchido devido a erros no formulário.
    Por favor preencha todos os campos necessários para completar o depósito.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Coleção", // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", "submission.sections.general.deposit_error_notice": "Ocorreu um problema durante o depósito do item, por favor tente novamente mais tarde.", - + // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", "submission.sections.general.deposit_success_notice": "Depositado com sucesso.", - + // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", "submission.sections.general.discard_error_notice": "Ocorreu um problema ao cancelar o item, por favor tente novamente mais tarde.", - + // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", "submission.sections.general.discard_success_notice": "Depósito cancelado com sucesso.", - + // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", "submission.sections.general.metadata-extracted": "Novos metadados foram extraídos e adicionados à secção {{sectionId}}.", - + // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", "submission.sections.general.metadata-extracted-new-section": "Nova Secção {{sectionId}} foi adicionada a dubmissão.", // "submission.sections.general.no-collection": "No collection found", "submission.sections.general.no-collection": "Não foi encontrada nenhuma coleção", - + // "submission.sections.general.no-sections": "No options available", "submission.sections.general.no-sections": "Sem opções disponíveis", // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", "submission.sections.general.save_error_notice": "Ocorreu um problema ao guardar o item, por favor tente novamente mais tarde.", - + // "submission.sections.general.save_success_notice": "Submission saved successfully.", "submission.sections.general.save_success_notice": "Depósito guardado com sucesso.", - + // "submission.sections.general.search-collection": "Search for a collection", "submission.sections.general.search-collection": "Pesquisar uma coleção", // "submission.sections.general.sections_not_valid": "There are incomplete sections.", "submission.sections.general.sections_not_valid": "Subsistem seções incompletas.", - + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", "submission.sections.identifiers.info": "Serão criados os seguintes identificadores para o seu item:", // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", "submission.sections.identifiers.no_handle": "Não foram gerados 'handles' para este item.", - + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", "submission.sections.identifiers.no_doi": "Não foram gerados DOIs para este item.", @@ -6427,13 +6427,13 @@ // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", "submission.sections.identifiers.otherIdentifiers_label": "Outros identificadores: ", - - // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", "submission.sections.submit.progressbar.accessCondition": "Condições de acesso do item", - + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", "submission.sections.submit.progressbar.CClicense": "Associar uma licença Creative Commons", - + // "submission.sections.submit.progressbar.describe.recycle": "Recycle", "submission.sections.submit.progressbar.describe.recycle": "Reciclar", @@ -6448,25 +6448,25 @@ // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Potenciais duplicados", - + // "submission.sections.submit.progressbar.identifiers": "Identifiers", "submission.sections.submit.progressbar.identifiers": "Identificadores", - + // "submission.sections.submit.progressbar.license": "Deposit license", "submission.sections.submit.progressbar.license": "Licença de distribuição não-exclusiva do repositório", - + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", - "submission.sections.submit.progressbar.sherpapolicy": "[Ajuda em contexto] Informação SHERPA sobre políticas de editoras e revistas face ao auto-arquivo em repositórios.", - + "submission.sections.submit.progressbar.sherpapolicy": "[Ajuda em contexto] Informação SHERPA sobre políticas de editoras e revistas face ao auto-arquivo em repositórios.", + // "submission.sections.submit.progressbar.upload": "Upload files", "submission.sections.submit.progressbar.upload": "Carregar ficheiro(s)", - + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", "submission.sections.submit.progressbar.sherpaPolicies": "Informação sobre a política de auto arquivo dos editores", - + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", "submission.sections.sherpa-policy.title-empty": "Não foi encontrada informação disponível sobre política desta editora. Se o seu trabalho tem um ISSN associado, por favor, introduza-o em cima para poder visualizar as políticas de auto arquivo associadas.", - + // "submission.sections.status.errors.title": "Errors", "submission.sections.status.errors.title": "Erros", @@ -6484,12 +6484,12 @@ // "submission.sections.status.warnings.aria": "has warnings", "submission.sections.status.warnings.aria": "tem avisos", - + // "submission.sections.status.info.title": "Additional Information", "submission.sections.status.info.title": "Informação adicional", // "submission.sections.status.info.aria": "Additional Information", - "submission.sections.status.info.aria": "Informação adicional", + "submission.sections.status.info.aria": "Informação adicional", // "submission.sections.toggle.open": "Open section", "submission.sections.toggle.open": "Seção aberta", @@ -6499,10 +6499,10 @@ // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", "submission.sections.toggle.aria.open": "Expandir seção {{sectionHeader}}", - + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", "submission.sections.toggle.aria.close": "Fechar seção {{sectionHeader}}", - + // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Cancelar", @@ -6514,40 +6514,40 @@ // "submission.sections.upload.delete.confirm.title": "Delete bitstream", "submission.sections.upload.delete.confirm.title": "Remover ficheiro", - + // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Remover", - + // "submission.sections.upload.download.title": "Download bitstream", "submission.sections.upload.download.title": "Descarregar ficheiro", - + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", "submission.sections.upload.drop-message": "Arraste para aqui o(s) ficheiro(s) que pretende anexar a este registo", - + // "submission.sections.upload.edit.title": "Edit bitstream", "submission.sections.upload.edit.title": "Editar ficheiro", - + // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Tipo de condição de acesso", - + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", "submission.sections.upload.form.access-condition-hint": "Selecione um tipo de acesso a aplicar ao ficheiro assim que o item seja depositado", - + // "submission.sections.upload.form.date-required": "Date is required.", - "submission.sections.upload.form.date-required": "Data necessária.", - + "submission.sections.upload.form.date-required": "Data necessária.", + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", "submission.sections.upload.form.date-required-from": "A data de início é obrigatória.", - - // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", - "submission.sections.upload.form.date-required-until": "A data de fim é obrigatória.", - + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "A data de fim é obrigatória.", + // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Acesso permitido a partir de", - + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", "submission.sections.upload.form.from-hint": "Selecione a data a partir da qual o tipo de acesso é aplicável", - + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "De", @@ -6559,28 +6559,28 @@ // "submission.sections.upload.form.until-label": "Grant access until", "submission.sections.upload.form.until-label": "conceder acesso até", - + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", "submission.sections.upload.form.until-hint": "Selecione a data até a qual o tipo de acesso será aplicado", - + // "submission.sections.upload.form.until-placeholder": "Until", - "submission.sections.upload.form.until-placeholder": "Até", + "submission.sections.upload.form.until-placeholder": "Até", // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", "submission.sections.upload.header.policy.default.nolist": "Arquivos enviados na coleção {{collectionName}} serão acessiveis de acordo com o(s) seguinte(s) grupo(s):", // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Por favor note que os ficheiros enviados à coleção {{collectionName}} serão acessíveis, de acordo com o que está explicitamente definido no ficheiro, no(s) seguinte(s) grupo(s):", - + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Aqui encontra o(s) ficheiro(s) carregado(s) neste registo. Pode atualizar os metadados do(s) ficheiro(s), definir as suas condições de acesso ou carregar ficheiros adicionais arrastando-os em qualquer local da página.", - + // "submission.sections.upload.no-entry": "No", "submission.sections.upload.no-entry": "Não", // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", "submission.sections.upload.no-file-uploaded": "Nenhum ficheiro carregado!", - + // "submission.sections.upload.save-metadata": "Save metadata", "submission.sections.upload.save-metadata": "Guardar metadados", @@ -6592,19 +6592,19 @@ // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Enviado com sucesso", - + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", - "submission.sections.accesses.form.discoverable-description": "Quando selecionado, este item será pesquisável na pesquisa/navegação. Se não estiver selecionado, o item apenas estará disponível através uma ligação direta (link) e não aparecerá na pesquisa/navegação.", - + "submission.sections.accesses.form.discoverable-description": "Quando selecionado, este item será pesquisável na pesquisa/navegação. Se não estiver selecionado, o item apenas estará disponível através uma ligação direta (link) e não aparecerá na pesquisa/navegação.", + // "submission.sections.accesses.form.discoverable-label": "Discoverable", "submission.sections.accesses.form.discoverable-label": "Recuperável", - + // "submission.sections.accesses.form.access-condition-label": "Access condition type", "submission.sections.accesses.form.access-condition-label": "Tipo de acesso", - + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", "submission.sections.accesses.form.access-condition-hint": "Selecione um tipo de acesso para aplicar ao item no momento do seu depósito ", - + // "submission.sections.accesses.form.date-required": "Date is required.", "submission.sections.accesses.form.date-required": "O preenchimento da data é obrigatório.", @@ -6628,16 +6628,16 @@ // "submission.sections.accesses.form.group-required": "Group is required.", "submission.sections.accesses.form.group-required": "A indicação de um grupo é obrigátória.", - + // "submission.sections.accesses.form.until-label": "Grant access until", "submission.sections.accesses.form.until-label": "Conceder acesso até", // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", "submission.sections.accesses.form.until-hint": "Selecione a data até a qual o tipo de acesso é aplicável", - + // "submission.sections.accesses.form.until-placeholder": "Until", - "submission.sections.accesses.form.until-placeholder": "Até", - + "submission.sections.accesses.form.until-placeholder": "Até", + // "submission.sections.license.granted-label": "I confirm the license above", "submission.sections.license.granted-label": "Confirmo a licença", @@ -6676,7 +6676,7 @@ // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", "submission.sections.sherpa.publisher.policy.openaccess": "As 'vias' de acesso aberto permitidas pela política desta revista estão listadas em baixo, tendo em consideração as versões do artigo (ex. 'Versão final publicada', 'Versão aceite do autor', 'Versão submetida'). Clique numa via para obter mais detalhes.", - + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", "submission.sections.sherpa.publisher.policy.more.information": "Para mais informações, consulte por favor os seguintes links:", @@ -6685,25 +6685,25 @@ // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", "submission.sections.sherpa.publisher.policy.embargo": "Embargo", - + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", "submission.sections.sherpa.publisher.policy.noembargo": "Sem embargo", // "submission.sections.sherpa.publisher.policy.nolocation": "None", "submission.sections.sherpa.publisher.policy.nolocation": "Nenhuma", - + // "submission.sections.sherpa.publisher.policy.license": "License", "submission.sections.sherpa.publisher.policy.license": "Licença", // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", "submission.sections.sherpa.publisher.policy.prerequisites": "Pré-requisitos", - + // "submission.sections.sherpa.publisher.policy.location": "Location", "submission.sections.sherpa.publisher.policy.location": "Localização", // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", "submission.sections.sherpa.publisher.policy.conditions": "Condições", - + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", "submission.sections.sherpa.publisher.policy.refresh": "Atualizar", @@ -6715,7 +6715,7 @@ // "submission.sections.sherpa.record.information.date.created": "Date Created", "submission.sections.sherpa.record.information.date.created": "Data de Criação", - + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", "submission.sections.sherpa.record.information.date.modified": "Última modificação", @@ -6727,31 +6727,31 @@ // "submission.submit.breadcrumbs": "New submission", "submission.submit.breadcrumbs": "Novos depósitos", - + // "submission.submit.title": "New submission", "submission.submit.title": "Novo depósito", // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Remover", - + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", "submission.workflow.generic.delete-help": "Se pretende remover definitivamente este item, selecione 'Apagar'. Será solicitada confirmação.", - + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", "submission.workflow.generic.edit-help": "Selecione esta opção para modificar os metadados do item", - + // "submission.workflow.generic.view": "View", "submission.workflow.generic.view": "Visualizar", // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.view-help": "Visualizar os metadados do item", - + "submission.workflow.generic.view-help": "Visualizar os metadados do item", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", "submission.workflow.generic.submit_select_reviewer": "Selecionar revisor", - + // "submission.workflow.generic.submit_select_reviewer-help": "", "submission.workflow.generic.submit_select_reviewer-help": "", @@ -6766,22 +6766,22 @@ // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", "submission.workflow.tasks.claimed.approve_help": "Se reviu o item e está conformidade para inclusão na coleção, selecione 'Aprovar'.", - + // "submission.workflow.tasks.claimed.edit": "Edit", "submission.workflow.tasks.claimed.edit": "Editar", // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Selecione esta opção para modificar os metadados do item.", - + // "submission.workflow.tasks.claimed.decline": "Decline", "submission.workflow.tasks.claimed.decline": "Declinar", // "submission.workflow.tasks.claimed.decline_help": "", "submission.workflow.tasks.claimed.decline_help": "", - + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", "submission.workflow.tasks.claimed.reject.reason.info": "Informe em seguida o motivo da rejeição do depósito, indicando se o depositante pode corrigir algum problema e reenviar o depósito.", - + // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", "submission.workflow.tasks.claimed.reject.reason.placeholder": "Descreva o motivo da rejeição", @@ -6805,33 +6805,33 @@ // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "ocorreu um erro durante a operação...", - + // "submission.workflow.tasks.generic.processing": "Processing...", "submission.workflow.tasks.generic.processing": "A processar...", - + // "submission.workflow.tasks.generic.submitter": "Submitter", "submission.workflow.tasks.generic.submitter": "Depositante", - + // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Operação realizada com sucesso", - + // "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim": "Assumir", - + // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", "submission.workflow.tasks.pool.claim_help": "Assumir esta tarefa", - + // "submission.workflow.tasks.pool.hide-detail": "Hide detail", "submission.workflow.tasks.pool.hide-detail": "Ocultar detalhes", // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Mostrar detalhes", - + // "submission.workspace.generic.view": "View", "submission.workspace.generic.view": "Ver", // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", - "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", + "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", // "subscriptions.title": "subscriptions", "subscriptions.title": "Subscrições de alertas", @@ -6946,16 +6946,16 @@ // "thumbnail.project.alt": "Project Logo", "thumbnail.project.alt": "Logótipo do projeto", - + // "thumbnail.project.placeholder": "Project Placeholder Image", "thumbnail.project.placeholder": "Imagem do projeto", // "thumbnail.orgunit.alt": "OrgUnit Logo", "thumbnail.orgunit.alt": "Logótipo da unidade", - + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", "thumbnail.orgunit.placeholder": "Imagem da unidade", - + // "thumbnail.person.alt": "Profile Picture", "thumbnail.person.alt": "Foto do perfil", @@ -6976,7 +6976,7 @@ // "vocabulary-treeview.search.form.search": "Search", "vocabulary-treeview.search.form.search": "pesquisar", - + // "vocabulary-treeview.search.no-result": "There were no items to show", "vocabulary-treeview.search.no-result": "Não existem itens para mostrar", @@ -6987,23 +6987,23 @@ "vocabulary-treeview.tree.description.srsc": "Categorias de Assuntos de Investigação", // "vocabulary-treeview.info": "Select a subject to add as search filter", - "vocabulary-treeview.info": "Selecione um assunto para adicionar como filtro de pesquisa", - + "vocabulary-treeview.info": "Selecione um assunto para adicionar como filtro de pesquisa", + // "uploader.browse": "browse", "uploader.browse": "navegue para o(s) carregar.", - + // "uploader.drag-message": "Drag & Drop your files here", "uploader.drag-message": "Clique e arraste o(s) seu(s) ficheiro(s) para aqui", - + // "uploader.delete.btn-title": "Delete", "uploader.delete.btn-title": "Apagar", // "uploader.or": ", or ", "uploader.or": " ou", - + // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", "uploader.processing": "A processar o(s) ficheiro(s) carregado(s)... (agora é seguro fechar esta página)", - + // "uploader.queue-length": "Queue length", "uploader.queue-length": "Tamanho da fila", @@ -7015,16 +7015,16 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Selecione os tipos para os quais pretende guardar os metadados virtuais como metadados reais", - + // "supervisedWorkspace.search.results.head": "Supervised Items", "supervisedWorkspace.search.results.head": "Itens supervisionados", - + // "workspace.search.results.head": "Your submissions", "workspace.search.results.head": "Os meus depósitos", - + // "workflowAdmin.search.results.head": "Administer Workflow", "workflowAdmin.search.results.head": "Gestão do workflow", - + // "workflow.search.results.head": "Workflow tasks", "workflow.search.results.head": "Tarefas em workflow", @@ -7036,7 +7036,7 @@ // "workflow-item.edit.title": "Edit workflowitem", "workflow-item.edit.title": "Editar item em processamento", - + // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Apagado", @@ -7051,10 +7051,10 @@ // "workflow-item.delete.title": "Delete workflow item", "workflow-item.delete.title": "Apagar item do workflow", - + // "workflow-item.delete.header": "Delete workflow item", "workflow-item.delete.header": "Apagar item do workflow", - + // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Cancelar", @@ -7081,19 +7081,19 @@ // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Cancelar", - + // "workflow-item.send-back.button.confirm": "Send back", "workflow-item.send-back.button.confirm": "Devolver", - + // "workflow-item.view.breadcrumbs": "Workflow View", "workflow-item.view.breadcrumbs": "Vista das tarefas", - + // "workspace-item.view.breadcrumbs": "Workspace View", "workspace-item.view.breadcrumbs": "Vista das tarefas", - + // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista das tarefas", - + // "workflow-item.advanced.title": "Advanced workflow", "workflow-item.advanced.title": "Fluxo de trabalho avançado", @@ -7144,36 +7144,36 @@ // "workflow-item.scorereviewaction.button.confirm": "Confirm", "workflow-item.scorereviewaction.button.confirm": "Confirmar", - + // "idle-modal.header": "Session will expire soon", "idle-modal.header": "A sua sessão vai expirar em breve!", - + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", "idle-modal.info": "Por razões de segurança, as sessões de utilizador expiram depois de {{ timeToExpire }} minutos de inatividade. A sua sessão expira em breve. Gostaria de a prolongar ou sair?", // "idle-modal.log-out": "Log out", "idle-modal.log-out": "Desligar", - + // "idle-modal.extend-session": "Extend session", "idle-modal.extend-session": "Prolongar sessão", - + // "researcher.profile.action.processing": "Processing...", "researcher.profile.action.processing": "A processar...", // "researcher.profile.associated": "Researcher profile associated", - "researcher.profile.associated": "Perfil do investigador associado", + "researcher.profile.associated": "Perfil do investigador associado", // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", - "researcher.profile.change-visibility.fail": "Ocorre um erro inesperado ao alterar a visibilidade do perfil", + "researcher.profile.change-visibility.fail": "Ocorre um erro inesperado ao alterar a visibilidade do perfil", // "researcher.profile.create.new": "Create new", - "researcher.profile.create.new": "Criar novo", + "researcher.profile.create.new": "Criar novo", // "researcher.profile.create.success": "Researcher profile created successfully", - "researcher.profile.create.success": "Perfil do investigador criado com sucesso", + "researcher.profile.create.success": "Perfil do investigador criado com sucesso", // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", - "researcher.profile.create.fail": "Ocorre um erro durante a criação do perfil do investigador", + "researcher.profile.create.fail": "Ocorre um erro durante a criação do perfil do investigador", // "researcher.profile.delete": "Delete", "researcher.profile.delete": "Remover", @@ -7185,47 +7185,47 @@ "researcher.profile.hide": "Esconder", // "researcher.profile.not.associated": "Researcher profile not yet associated", - "researcher.profile.not.associated": "Perfil do investigador ainda não associado", + "researcher.profile.not.associated": "Perfil do investigador ainda não associado", // "researcher.profile.view": "View", "researcher.profile.view": "Ver", - + // "researcher.profile.private.visibility": "PRIVATE", "researcher.profile.private.visibility": "PRIVADO", - + // "researcher.profile.public.visibility": "PUBLIC", "researcher.profile.public.visibility": "PÚBLICO", - + // "researcher.profile.status": "Status:", "researcher.profile.status": "Estado:", // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", "researcherprofile.claim.not-authorized": "Não possui autorização para reinvindicar este artigo. Para mais pormenores, contactar o(s) administrador(es).", - + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", "researcherprofile.error.claim.body": "Ocorreu um erro ao reclamar o perfil, por favor tente novamente mais tarde", - + // "researcherprofile.error.claim.title": "Error", - "researcherprofile.error.claim.title": "Erro", + "researcherprofile.error.claim.title": "Erro", // "researcherprofile.success.claim.body": "Profile claimed with success", "researcherprofile.success.claim.body": "Perfil reivindicado com sucesso", // "researcherprofile.success.claim.title": "Success", "researcherprofile.success.claim.title": "Sucesso", - + // "person.page.orcid.create": "Create an ORCID iD", "person.page.orcid.create": "Criar um ORCID iD", // "person.page.orcid.granted-authorizations": "Granted authorizations", - "person.page.orcid.granted-authorizations": "Autorizações concedidas", + "person.page.orcid.granted-authorizations": "Autorizações concedidas", // "person.page.orcid.grant-authorizations": "Grant authorizations", "person.page.orcid.grant-authorizations": "Conceder autorizações", - + // "person.page.orcid.link": "Connect to ORCID iD", "person.page.orcid.link": "Ligar ao ORCID iD", - + // "person.page.orcid.link.processing": "Linking profile to ORCID...", "person.page.orcid.link.processing": "Ligação do perfil ao ORCID...", @@ -7234,9 +7234,9 @@ // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", "person.page.orcid.orcid-not-linked-message": "O ORCID iD deste perfil ({{{ orcid }}) ainda não foi ligado a uma conta no registo do ORCID ou a ligação está expirada.", - + // "person.page.orcid.unlink": "Disconnect from ORCID", - "person.page.orcid.unlink": "Desligar do ORCID", + "person.page.orcid.unlink": "Desligar do ORCID", // "person.page.orcid.unlink.processing": "Processing...", "person.page.orcid.unlink.processing": "A processar...", @@ -7251,11 +7251,11 @@ "person.page.orcid.no-missing-authorizations-message": "Óptimo! Esta caixa está vazia, pelo que lhe foram concedidas todos as permissões de acesso para utilizar todas as funções oferecidas pela sua instituição.", // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", - "person.page.orcid.no-orcid-message": "Ainda não foi associado nenhum ORCID iD. Ao clicar no botão abaixo, é possível ligar este perfil a uma conta ORCID.", - + "person.page.orcid.no-orcid-message": "Ainda não foi associado nenhum ORCID iD. Ao clicar no botão abaixo, é possível ligar este perfil a uma conta ORCID.", + // "person.page.orcid.profile-preferences": "Profile preferences", "person.page.orcid.profile-preferences": "Preferências de perfil", - + // "person.page.orcid.funding-preferences": "Funding preferences", "person.page.orcid.funding-preferences": "Preferências de financiamento", @@ -7272,14 +7272,14 @@ "person.page.orcid.sync-profile.affiliation": "Afiliação", // "person.page.orcid.sync-profile.biographical": "Biographical data", - "person.page.orcid.sync-profile.biographical": "Dados biográficos", + "person.page.orcid.sync-profile.biographical": "Dados biográficos", // "person.page.orcid.sync-profile.education": "Education", "person.page.orcid.sync-profile.education": "Educação", - + // "person.page.orcid.sync-profile.identifiers": "Identifiers", "person.page.orcid.sync-profile.identifiers": "Identificadores", - + // "person.page.orcid.sync-fundings.all": "All fundings", "person.page.orcid.sync-fundings.all": "Todos financiamentos", @@ -7288,16 +7288,16 @@ // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", "person.page.orcid.sync-fundings.my_selected": "Financiamentos selecionados", - + // "person.page.orcid.sync-fundings.disabled": "Disabled", - "person.page.orcid.sync-fundings.disabled": "Desligado", + "person.page.orcid.sync-fundings.disabled": "Desligado", // "person.page.orcid.sync-publications.all": "All publications", "person.page.orcid.sync-publications.all": "Todas as publicações", - + // "person.page.orcid.sync-publications.mine": "My publications", "person.page.orcid.sync-publications.mine": "As minhas publicações", - + // "person.page.orcid.sync-publications.my_selected": "Selected publications", "person.page.orcid.sync-publications.my_selected": "Publicações selecionadas", @@ -7314,16 +7314,16 @@ "person.page.orcid.sync-queue.discard.success": "O registo da fila do ORCID foi descartado com sucesso", // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", - "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", + "person.page.orcid.sync-queue.empty-message": "O registo de filas do ORCID está vazio", // "person.page.orcid.sync-queue.table.header.type": "Type", - "person.page.orcid.sync-queue.table.header.type": "Tipo", + "person.page.orcid.sync-queue.table.header.type": "Tipo", // "person.page.orcid.sync-queue.table.header.description": "Description", - "person.page.orcid.sync-queue.table.header.description": "Descrição", + "person.page.orcid.sync-queue.table.header.description": "Descrição", // "person.page.orcid.sync-queue.table.header.action": "Action", - "person.page.orcid.sync-queue.table.header.action": "Ação", + "person.page.orcid.sync-queue.table.header.action": "Ação", // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", "person.page.orcid.sync-queue.description.affiliation": "Afiliações", @@ -7342,7 +7342,7 @@ // "person.page.orcid.sync-queue.description.qualification": "Qualifications", "person.page.orcid.sync-queue.description.qualification": "Qualificações", - + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", "person.page.orcid.sync-queue.description.researcher_urls": "URLS dos investigadores", @@ -7366,15 +7366,15 @@ // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", "person.page.orcid.sync-queue.tooltip.affiliation": "Afiliação", - + // "person.page.orcid.sync-queue.tooltip.education": "Education", "person.page.orcid.sync-queue.tooltip.education": "Educação", // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", "person.page.orcid.sync-queue.tooltip.qualification": "Qualificação", - + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", - "person.page.orcid.sync-queue.tooltip.other_names": "Outro nome", + "person.page.orcid.sync-queue.tooltip.other_names": "Outro nome", // "person.page.orcid.sync-queue.tooltip.country": "Country", "person.page.orcid.sync-queue.tooltip.country": "País", @@ -7383,10 +7383,10 @@ "person.page.orcid.sync-queue.tooltip.keywords": "Palavra-chave", // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", - "person.page.orcid.sync-queue.tooltip.external_ids": "Identificadores externos", + "person.page.orcid.sync-queue.tooltip.external_ids": "Identificadores externos", // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", - "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL do investigador", // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", "person.page.orcid.sync-queue.send": "Sincronizar com o registo ORCID", @@ -7399,9 +7399,9 @@ // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", "person.page.orcid.sync-queue.send.bad-request-error": "A submissão ao ORCID falhou porque o recurso enviado para o registo do ORCID não é válido", - + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", - "person.page.orcid.sync-queue.send.error": "A submissão ao ORCID falhou", + "person.page.orcid.sync-queue.send.error": "A submissão ao ORCID falhou", // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", "person.page.orcid.sync-queue.send.conflict-error": "A submissão ao ORCID falhou porque o recurso já existe no registo do ORCID", @@ -7425,22 +7425,22 @@ "person.page.orcid.sync-queue.send.validation-error.title.required": "O título é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", - "person.page.orcid.sync-queue.send.validation-error.type.required": "O campo 'dc.type' é obrigatório", + "person.page.orcid.sync-queue.send.validation-error.type.required": "O campo 'dc.type' é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", - "person.page.orcid.sync-queue.send.validation-error.start-date.required": "A data de início é obrigatória", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "A data de início é obrigatória", // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", - "person.page.orcid.sync-queue.send.validation-error.funder.required": "O financiador é obrigatório", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "O financiador é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", "person.page.orcid.sync-queue.send.validation-error.country.invalid": "País inválido (2 dígitos ISO 3166)", - // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", "person.page.orcid.sync-queue.send.validation-error.organization.required": "A organização é obrigatória", - + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "O nome da organização é obrigatório", // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "A data de publicação deve ser um ano após 1900", @@ -7464,23 +7464,23 @@ "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Os identificadores da organização requerem uma fonte", // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "A fonte de um dos identificadores da organização é inválida. As fontes suportadas são RINGGOLD, GRID, LEI e FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "A fonte de um dos identificadores da organização é inválida. As fontes suportadas são RINGGOLD, GRID, LEI e FUNDREF", // "person.page.orcid.synchronization-mode": "Synchronization mode", - "person.page.orcid.synchronization-mode": "Modo sincronização", + "person.page.orcid.synchronization-mode": "Modo sincronização", // "person.page.orcid.synchronization-mode.batch": "Batch", - "person.page.orcid.synchronization-mode.batch": "Lote", + "person.page.orcid.synchronization-mode.batch": "Lote", // "person.page.orcid.synchronization-mode.label": "Synchronization mode", "person.page.orcid.synchronization-mode.label": "Modo sincronização", - + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include 'Manual' (you must send your data to ORCID manually), or 'Batch' (the system will send your data to ORCID via a scheduled script).", "person.page.orcid.synchronization-mode-message": "Por favor, selecione a forma como deseja que a sincronização com ORCID ocorra. As opções incluem 'Manual' (deve enviar os seus dados para o ORCID manualmente), ou 'Batch' (o sistema enviará os seus dados para o ORCID através de um script agendado).", - + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", "person.page.orcid.synchronization-mode-funding-message": "Selecione se pretende enviar as suas entidades ligadas de 'Projeto' para a lista de informação de financiamento do seu registo ORCID.", - + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", "person.page.orcid.synchronization-mode-publication-message": "Selecione se pretende enviar as suas entidades ligadas de 'Publicação' associadas à lista de obras do seu registo ORCID.", @@ -7494,7 +7494,7 @@ "person.page.orcid.synchronization-settings-update.error": "A atualização das definições de sincronização falhou", // "person.page.orcid.synchronization-mode.manual": "Manual", - "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manual", // "person.page.orcid.scope.authenticate": "Get your ORCID iD", "person.page.orcid.scope.authenticate": "Obtenha o seu ORCID iD", @@ -7510,22 +7510,22 @@ // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", "person.page.orcid.unlink.success": "A desconexão entre o perfil e o registo ORCID foi bem sucedida", - + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", "person.page.orcid.unlink.error": "Ocorreu um erro ao desligar o perfil e o registo ORCID. Tente novamente.", // "person.orcid.sync.setting": "ORCID Synchronization settings", - "person.orcid.sync.setting": "Definições de sincronização ORCID", - + "person.orcid.sync.setting": "Definições de sincronização ORCID", + // "person.orcid.registry.queue": "ORCID Registry Queue", "person.orcid.registry.queue": "Fila de registo ORCID", - + // "person.orcid.registry.auth": "ORCID Authorizations", - "person.orcid.registry.auth": "Autorizações ORCID", - + "person.orcid.registry.auth": "Autorizações ORCID", + // "home.recent-submissions.head": "Recent Submissions", "home.recent-submissions.head": "Entradas recentes", - + // "listable-notification-object.default-message": "This object couldn't be retrieved", "listable-notification-object.default-message": "Este objeto não pode ser recuperado", @@ -7543,7 +7543,7 @@ // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", "system-wide-alert-banner.countdown.minutes": "{{minutos}} minuto(s):", - + // "menu.section.system-wide-alert": "System-wide Alert", "menu.section.system-wide-alert": "Alertas gerais do sistema", @@ -7591,101 +7591,100 @@ // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", "system-wide-alert.form.create.error": "Algo correu mal ao criar o alerta geral do sistema", - + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", "admin.system-wide-alert.breadcrumbs": "Alertas gerais do sistema", - + // "admin.system-wide-alert.title": "System-wide Alerts", - "admin.system-wide-alert.title": "Alertas gerais do sistema", - - - - // Other strings... + "admin.system-wide-alert.title": "Alertas gerais do sistema", + + + + // Other strings... // Missing, Duplicate or Redundant ??? - + // NOT FOUND 30-05-2023 - - + + // "datafile.listelement.badge": "Data file", "datafile.listelement.badge": "Ficheiro de dados", - + // "datapackage.listelement.badge": "Data package", - "datapackage.listelement.badge": "Pacote de dados", + "datapackage.listelement.badge": "Pacote de dados", // "browse.next.button": "Next", "browse.next.button": "Próximo", // "browse.previous.button": "Previous", - "browse.previous.button": "Anterior", - + "browse.previous.button": "Anterior", + // "curation-task.task.registerdoi.label": "DOI check", "curation-task.task.registerdoi.label": "Verificação de DOIs", - + // "mydspace.general.text-here": "here", "mydspace.general.text-here": "aqui", - + // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", "mydspace.upload.upload-successful": "Novo item de espaço de trabalho criado. Clique {{here}} para o editar.", - + // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", "profile.security.form.notifications.error.not-long-enough": "A senha deve ter pelo menos 6 caracteres.", - + // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", "register-page.create-profile.security.error.password-length": "A senha deve possuir pelo menos 6 caracteres.", - + // "search.form.search_mydspace": "Search MyDSpace", "search.form.search_mydspace": "Pesquisar na Área Pessoal", - + // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", "forgot-password.form.error.password-length": "A senha deve ter pelo menos 6 caracteres.", - + // "search.filters.entityType.Publication": "Publicação", "search.filters.entityType.Publication": "Publicação", - + // "search.filters.entityType.Person": "Pessoa", "search.filters.entityType.Person": "Pessoa", - + // "search.filters.entityType.Project": "Projecto", "search.filters.entityType.Project": "Projeto", - + // "search.filters.entityType.Journal": "Revista", "search.filters.entityType.Journal": "Revista", - + // "search.filters.entityType.DataFile": "Data File", "search.filters.entityType.DataFile": "Ficheiro de dados", - + // "forgot-email.form.google-recaptcha.must-accept-cookies": "Must accept cookies", - "forgot-email.form.google-recaptcha.must-accept-cookies": "Deve aceitar cookies", - + "forgot-email.form.google-recaptcha.must-accept-cookies": "Deve aceitar cookies", + // "forgot-email.form.google-recaptcha.open-cookie-settings": "Cookie settings", - "forgot-email.form.google-recaptcha.open-cookie-settings": "Configurar cookies", - + "forgot-email.form.google-recaptcha.open-cookie-settings": "Configurar cookies", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Successfully imported and added external project to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Importado com sucesso e adicionado autor à seleção", // "search.filters.namedresourcetype.Archived": "Archived", "search.filters.namedresourcetype.Archived": "Aceites", - + // "search.filters.namedresourcetype.Workspace": "Workspace", "search.filters.namedresourcetype.Workspace": "Por terminar", - + // "search.filters.namedresourcetype.Workflow": "Workflow", "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", - + // "search.filters.namedresourcetype.Validation": "Validation", "search.filters.namedresourcetype.Validation": "Em validação", - + // "orgunit.search.results.head": "Organizational Unit Search Results", "orgunit.search.results.head": "Resultados da pesquisa de organizações", - + // "orgunit-relationships.search.results.head": "Organizational Unit Search Results", "orgunit-relationships.search.results.head": "Resultados da pesquisa de organizações", - + // "journalissue.search.results.head": "Journal Issue Search Results", "journalissue.search.results.head": "Resultados da pesquisa de números", - + // "journalissue-relationships.search.results.head": "Journal Issue Search Results", "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", - } From 29f283b35e7ed8f2fae3b451e5f4eccdaaba3310 Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 20:11:38 +0100 Subject: [PATCH 731/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 8dff07a387..735cb4df4c 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -4261,8 +4261,8 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadados", - - // "menu.section.statistics": "Statistics", + + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estatísticas", // "menu.section.statistics_task": "Statistics Task", From c84db3ce3dabd5fe3b8884d4be9ba6ed1b5be665 Mon Sep 17 00:00:00 2001 From: rsaraivac <122451983+rsaraivac@users.noreply.github.com> Date: Wed, 31 May 2023 20:34:21 +0100 Subject: [PATCH 732/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 735cb4df4c..74b1ff3e68 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -4261,7 +4261,7 @@ // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metadados", - + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Estatísticas", From 43e1e6d22bf97d94b531abc99e93d7f1440dc7be Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 1 Jun 2023 10:56:44 +0200 Subject: [PATCH 733/833] add noreferrer to license link --- .../cc-license/submission-section-cc-licenses.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html index bdde0ff470..20743540a8 100644 --- a/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html +++ b/src/app/submission/sections/cc-license/submission-section-cc-licenses.component.html @@ -128,7 +128,7 @@
    {{ 'submission.sections.ccLicense.link' | translate }}
    - + {{ licenseLink }}
    From d1dff0553d9a2b7b8af1ac9856be4367b8a8cc4a Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 1 Jun 2023 11:00:26 +0200 Subject: [PATCH 734/833] fix lint error --- src/app/core/services/browser.referrer.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/core/services/browser.referrer.service.ts b/src/app/core/services/browser.referrer.service.ts index 5aae750599..64be95d241 100644 --- a/src/app/core/services/browser.referrer.service.ts +++ b/src/app/core/services/browser.referrer.service.ts @@ -1,7 +1,7 @@ import { ReferrerService } from './referrer.service'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { isEmpty, hasNoValue } from '../../shared/empty.util'; +import { hasNoValue } from '../../shared/empty.util'; import { URLCombiner } from '../url-combiner/url-combiner'; import { Inject, Injectable } from '@angular/core'; import { DOCUMENT } from '@angular/common'; From c1dcebbd049d420f88a2a0b90cca8ae6f33fd340 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 1 Jun 2023 15:27:11 +0200 Subject: [PATCH 735/833] Fix: fix validation and translation Show/hide the datepicker based on the value --- .../access-control-array-form.component.html | 119 ++++++++------- .../access-control-array-form.component.scss | 7 + ...ccess-control-array-form.component.spec.ts | 53 ++++--- .../access-control-array-form.component.ts | 137 +++++++----------- .../control-max-end-date.pipe.ts | 26 ---- .../control-max-start-date.pipe.ts | 27 ---- .../access-control-array-form/to-date.pipe.ts | 23 +++ ...cess-control-form-container.component.html | 4 +- .../access-control-form.module.ts | 38 +++-- src/assets/i18n/en.json5 | 22 +-- 10 files changed, 214 insertions(+), 242 deletions(-) delete mode 100644 src/app/shared/access-control-form-container/access-control-array-form/control-max-end-date.pipe.ts delete mode 100644 src/app/shared/access-control-form-container/access-control-array-form/control-max-start-date.pipe.ts create mode 100644 src/app/shared/access-control-form-container/access-control-array-form/to-date.pipe.ts diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 9460fb4ffe..9158bc3576 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,65 +1,87 @@ - -
    + +
    {{'access-control-no-access-conditions-warning-message' | translate}}
    - -
    + +
    - - - {{'access-control-option-note' | translate}} + + {{'access-control-option-note' | translate}} +
    -
    - - -
    - +
    + +
    + +
    + +
    - {{'access-control-option-start-date-note' | translate}} + + {{'access-control-option-start-date-note' | translate}} +
    -
    - - -
    - +
    + +
    + +
    + +
    - {{'access-control-option-end-date-note' | translate}} + + {{'access-control-option-end-date-note' | translate}} +
    @@ -68,18 +90,17 @@
    - - - - -
    -
    - -
    -
    -
    - - - - - - From 97673471f7aadee954bf4a06cd9038c40d1f8a53 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 1 Jun 2023 12:20:59 -0400 Subject: [PATCH 741/833] Remove inherited input declarations. --- .../file/section-upload-file.component.ts | 73 +------------------ 1 file changed, 1 insertion(+), 72 deletions(-) diff --git a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts index 00431cbbe2..369af4e36c 100644 --- a/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts +++ b/src/themes/custom/app/submission/sections/upload/file/section-upload-file.component.ts @@ -1,13 +1,4 @@ -import { - Component, Input, ViewChild -} from '@angular/core'; - -import { - SubmissionFormsModel -} from 'src/app/core/config/models/config-submission-forms.model'; -import { - SubmissionSectionUploadFileEditComponent -} from 'src/app/submission/sections/upload/file/edit/section-upload-file-edit.component'; +import { Component } from '@angular/core'; import { SubmissionSectionUploadFileComponent as BaseComponent } from 'src/app/submission/sections/upload/file/section-upload-file.component'; @@ -24,66 +15,4 @@ import { }) export class SubmissionSectionUploadFileComponent extends BaseComponent { - - /** - * The list of available access condition - * @type {Array} - */ - @Input() availableAccessConditionOptions: any[]; - - /** - * The submission id - * @type {string} - */ - @Input() collectionId: string; - - /** - * Define if collection access conditions policy type : - * POLICY_DEFAULT_NO_LIST : is not possible to define additional access group/s for the single file - * POLICY_DEFAULT_WITH_LIST : is possible to define additional access group/s for the single file - * @type {number} - */ - @Input() collectionPolicyType: number; - - /** - * The configuration for the bitstream's metadata form - * @type {SubmissionFormsModel} - */ - @Input() configMetadataForm: SubmissionFormsModel; - - /** - * The bitstream id - * @type {string} - */ - @Input() fileId: string; - - /** - * The bitstream array key - * @type {string} - */ - @Input() fileIndex: string; - - /** - * The bitstream id - * @type {string} - */ - @Input() fileName: string; - - /** - * The section id - * @type {string} - */ - @Input() sectionId: string; - - /** - * The submission id - * @type {string} - */ - @Input() submissionId: string; - - /** - * The [[SubmissionSectionUploadFileEditComponent]] reference - * @type {SubmissionSectionUploadFileEditComponent} - */ - @ViewChild(SubmissionSectionUploadFileEditComponent) fileEditComp: SubmissionSectionUploadFileEditComponent; } From 86e1333025a26af288d44b213d1746c335da8930 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Fri, 5 May 2023 11:50:45 -0700 Subject: [PATCH 742/833] Possible fix for browse-by-date links --- src/app/shared/starts-with/date/starts-with-date.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/shared/starts-with/date/starts-with-date.component.ts b/src/app/shared/starts-with/date/starts-with-date.component.ts index d65d12b413..89d9361b6a 100644 --- a/src/app/shared/starts-with/date/starts-with-date.component.ts +++ b/src/app/shared/starts-with/date/starts-with-date.component.ts @@ -131,7 +131,6 @@ export class StartsWithDateComponent extends StartsWithAbstractComponent { } else { this.startsWithYear = +startsWith; } - this.setStartsWithParam(false); } /** From 8e450402af8ea6af0d038d04af666bdd0b560600 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 1 Jun 2023 08:46:25 -0700 Subject: [PATCH 743/833] Removed unnecessary route navigation. --- src/app/shared/starts-with/starts-with-abstract.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/shared/starts-with/starts-with-abstract.component.ts b/src/app/shared/starts-with/starts-with-abstract.component.ts index 26140dcc6d..ad9c56c970 100644 --- a/src/app/shared/starts-with/starts-with-abstract.component.ts +++ b/src/app/shared/starts-with/starts-with-abstract.component.ts @@ -70,7 +70,6 @@ export abstract class StartsWithAbstractComponent implements OnInit, OnDestroy { */ setStartsWith(startsWith: string) { this.startsWith = startsWith; - this.setStartsWithParam(false); } /** From dd548c20e9c9cf0144a5ee60f003f65f36238546 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 1 Jun 2023 13:48:17 -0400 Subject: [PATCH 744/833] Add blank custom versions to 'custom' theme. --- .../deny-request-copy.component.html | 0 .../deny-request-copy.component.scss | 1 + .../deny-request-copy.component.ts | 15 +++++++++++++++ .../email-request-copy.component.html | 14 ++++++++++++++ .../email-request-copy.component.scss | 0 .../email-request-copy.component.ts | 15 +++++++++++++++ .../grant-request-copy.component.html | 0 .../grant-request-copy.component.scss | 0 .../grant-request-copy.component.ts | 15 +++++++++++++++ src/themes/custom/lazy-theme.module.ts | 12 ++++++++++++ 10 files changed, 72 insertions(+) create mode 100644 src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.html create mode 100644 src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss create mode 100644 src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts create mode 100644 src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html create mode 100644 src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.scss create mode 100644 src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts create mode 100644 src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.html create mode 100644 src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.scss create mode 100644 src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.html b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.scss @@ -0,0 +1 @@ + diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts new file mode 100644 index 0000000000..fb65aae9bc --- /dev/null +++ b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + DenyRequestCopyComponent as BaseComponent +} from 'src/app/request-copy/deny-request-copy/deny-request-copy.component'; + +@Component({ + selector: 'ds-deny-request-copy', + // styleUrls: ['./deny-request-copy.component.scss'], + styleUrls: [], + // templateUrl: './deny-request-copy.component.html', + templateUrl: './../../request-copy/deny-request-copy/deny-request-copy.component.html', +}) +export class DenyRequestCopyComponent + extends BaseComponent { +} diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html new file mode 100644 index 0000000000..072f4d4a52 --- /dev/null +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html @@ -0,0 +1,14 @@ + + + + + TODO supply a title + + + + +
    TODO write content
    + + diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.scss b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts new file mode 100644 index 0000000000..d4da93a99f --- /dev/null +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + EmailRequestCopyComponent as BaseComponent +} from 'src/app/request-copy/email-request-copy/email-request-copy.component'; + +@Component({ + selector: 'ds-email-request-copy', + // styleUrls: ['./email-request-copy.component.scss'], + styleUrls: [], + // templateUrl: './email-request-copy.component.html', + templateUrl: './../../request-copy/email-request-copy/email-request-copy.component.html', +}) +export class EmailRequestCopyComponent + extends BaseComponent { +} diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.html b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.scss b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts new file mode 100644 index 0000000000..20d0ae90c1 --- /dev/null +++ b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { + GrantRequestCopyComponent as BaseComponent +} from 'src/app/request-copy/grant-request-copy/grant-request-copy.component'; + +@Component({ + selector: 'ds-grant-request-copy', + // styleUrls: ['./grant-request-copy.component.scss'], + styleUrls: [], + // templateUrl: './grant-request-copy.component.html', + templateUrl: './../../request-copy/grant-request-copy/grant-request-copy.component.html', +}) +export class GrantRequestCopyComponent + extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index b1290cc634..e055018db1 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -145,6 +145,15 @@ import { MediaViewerVideoComponent } from './app/item-page/media-viewer/media-viewer-video/media-viewer-video.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; +import { + DenyRequestCopyComponent +} from './app/request-copy/deny-request-copy/deny-request-copy.component'; +import { + EmailRequestCopyComponent +} from './app/request-copy/email-request-copy/email-request-copy.component'; +import { + GrantRequestCopyComponent +} from './app/request-copy/grant-request-copy/grant-request-copy.component'; const DECLARATIONS = [ FileSectionComponent, @@ -212,6 +221,9 @@ const DECLARATIONS = [ MediaViewerComponent, MediaViewerImageComponent, MediaViewerVideoComponent, + DenyRequestCopyComponent, + EmailRequestCopyComponent, + GrantRequestCopyComponent, ]; @NgModule({ From da245b88b8bce2bce566b745c7120a816b713dac Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Fri, 2 Jun 2023 12:59:20 +0300 Subject: [PATCH 745/833] src/assets/i18n: fix English permission string The current message is not correct English. Note, there seems to be a mix of "don't" and "do not" language. Perhaps we should harmonize that eventually. --- src/assets/i18n/en.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 93418dc189..b1959c5f95 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4061,7 +4061,7 @@ "submission.general.cancel": "Cancel", - "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.deposit": "Deposit", From 9d08cac56603dda7d0271f9af826c12082d85e35 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 2 Jun 2023 13:31:53 +0200 Subject: [PATCH 746/833] 101623: Reset in Treeview also resets selectedItems + Provide TreeviewService in root --- src/app/browse-by/browse-by-page.module.ts | 2 +- .../vocabularies/vocabulary.service.ts | 6 ++++-- src/app/shared/form/form.module.ts | 2 -- .../vocabulary-treeview.component.html | 2 ++ .../vocabulary-treeview.component.spec.ts | 10 ++++++++++ .../vocabulary-treeview.component.ts | 17 +++++++++++++++-- .../vocabulary-treeview.service.ts | 4 +++- src/modules/app/browser-app.module.ts | 5 ----- 8 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/app/browse-by/browse-by-page.module.ts b/src/app/browse-by/browse-by-page.module.ts index fea6668b3c..2f4ae433c9 100644 --- a/src/app/browse-by/browse-by-page.module.ts +++ b/src/app/browse-by/browse-by-page.module.ts @@ -13,7 +13,7 @@ import { BrowseByGuard } from './browse-by-guard'; providers: [ ItemDataService, BrowseService, - BrowseByGuard + BrowseByGuard, ] }) export class BrowseByPageModule { diff --git a/src/app/core/submission/vocabularies/vocabulary.service.ts b/src/app/core/submission/vocabularies/vocabulary.service.ts index f2c1747658..1ff5b30ee0 100644 --- a/src/app/core/submission/vocabularies/vocabulary.service.ts +++ b/src/app/core/submission/vocabularies/vocabulary.service.ts @@ -223,13 +223,15 @@ export class VocabularyService { * no valid cached version. Defaults to true * @param reRequestOnStale Whether or not the request should automatically be re- * requested after the response becomes stale + * @param constructId Whether constructing the full vocabularyDetail ID + * ({vocabularyName}:{detailName}) is still necessary * @param linksToFollow List of {@link FollowLinkConfig} that indicate which * {@link HALLink}s should be automatically resolved * @return {Observable>} * Return an observable that emits VocabularyEntryDetail object */ - findEntryDetailById(id: string, name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { - const findId = `${name}:${id}`; + findEntryDetailById(id: string, name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, constructId: boolean = true, ...linksToFollow: FollowLinkConfig[]): Observable> { + const findId: string = (constructId ? `${name}:${id}` : id); return this.vocabularyEntryDetailDataService.findById(findId, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 6e3fc33832..c2fc4c855e 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -32,7 +32,6 @@ import { NumberPickerComponent } from './number-picker/number-picker.component'; import { AuthorityConfidenceStateDirective } from './directives/authority-confidence-state.directive'; import { SortablejsModule } from 'ngx-sortablejs'; import { VocabularyTreeviewComponent } from './vocabulary-treeview/vocabulary-treeview.component'; -import { VocabularyTreeviewService } from './vocabulary-treeview/vocabulary-treeview.service'; import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal/vocabulary-treeview-modal.component'; import { FormBuilderService } from './builder/form-builder.service'; import { DsDynamicTypeBindRelationService } from './builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; @@ -104,7 +103,6 @@ const DIRECTIVES = [ useValue: dsDynamicFormControlMapFn }, ...DYNAMIC_MATCHER_PROVIDERS, - VocabularyTreeviewService, DynamicFormLayoutService, DynamicFormService, DynamicFormValidationService, diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 9cbc0146a1..fb7d162008 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -33,6 +33,7 @@ > @@ -65,6 +66,7 @@ container="body"> diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts index 9ca8d7ab8b..97a21b724b 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts @@ -21,6 +21,7 @@ import { AuthTokenInfo } from '../../../core/auth/models/auth-token-info.model'; import { authReducer } from '../../../core/auth/auth.reducer'; import { storeModuleConfig } from '../../../app.reducer'; import { By } from '@angular/platform-browser'; +import { VocabularyService } from '../../../core/submission/vocabularies/vocabulary.service'; describe('VocabularyTreeviewComponent test suite', () => { @@ -49,6 +50,14 @@ describe('VocabularyTreeviewComponent test suite', () => { restoreNodes: jasmine.createSpy('restoreNodes'), cleanTree: jasmine.createSpy('cleanTree'), }); + const vocabularyServiceStub = jasmine.createSpyObj('VocabularyService', { + getVocabularyEntriesByValue: jasmine.createSpy('getVocabularyEntriesByValue'), + getEntryDetailParent: jasmine.createSpy('getEntryDetailParent'), + findEntryDetailById: jasmine.createSpy('findEntryDetailById'), + searchTopEntries: jasmine.createSpy('searchTopEntries'), + getEntryDetailChildren: jasmine.createSpy('getEntryDetailChildren'), + clearSearchTopRequests: jasmine.createSpy('clearSearchTopRequests') + }); initialState = { core: { @@ -77,6 +86,7 @@ describe('VocabularyTreeviewComponent test suite', () => { ], providers: [ { provide: VocabularyTreeviewService, useValue: vocabularyTreeviewServiceStub }, + { provide: VocabularyService, useValue: vocabularyServiceStub }, { provide: NgbActiveModal, useValue: modalStub }, provideMockStore({ initialState }), ChangeDetectorRef, diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 891a825745..017416e8c2 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -17,6 +17,8 @@ import { VocabularyTreeFlattener } from './vocabulary-tree-flattener'; import { VocabularyTreeFlatDataSource } from './vocabulary-tree-flat-data-source'; import { CoreState } from '../../../core/core-state.model'; import { lowerCase } from 'lodash/string'; +import { VocabularyService } from '../../../core/submission/vocabularies/vocabulary.service'; +import { getFirstSucceededRemoteDataPayload } from '../../../core/shared/operators'; /** * Component that shows a hierarchical vocabulary in a tree view @@ -114,11 +116,13 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { * Initialize instance variables * * @param {VocabularyTreeviewService} vocabularyTreeviewService + * @param {vocabularyService} vocabularyService * @param {Store} store * @param {TranslateService} translate */ constructor( private vocabularyTreeviewService: VocabularyTreeviewService, + private vocabularyService: VocabularyService, private store: Store, private translate: TranslateService ) { @@ -284,13 +288,22 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { * Reset tree resulting from a previous search */ reset() { + this.searchText = ''; + for (const item of this.selectedItems) { + this.subs.push(this.vocabularyService.findEntryDetailById(item, this.vocabularyOptions.name, true, true, false).pipe( + getFirstSucceededRemoteDataPayload(), + ).subscribe((detail: VocabularyEntryDetail) => { + this.deselect.emit(detail); + })); + this.nodeMap.get(item).isSelected = false; + } + this.selectedItems = []; + if (isNotEmpty(this.storedNodeMap)) { this.nodeMap = this.storedNodeMap; this.storedNodeMap = new Map(); this.vocabularyTreeviewService.restoreNodes(); } - - this.searchText = ''; } /** diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts index d400615f1e..f524af4c0e 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service.ts @@ -25,7 +25,9 @@ import { VocabularyEntryDetail } from '../../../core/submission/vocabularies/mod /** * A service that provides methods to deal with vocabulary tree */ -@Injectable() +@Injectable({ + providedIn: 'root' +}) export class VocabularyTreeviewService { /** diff --git a/src/modules/app/browser-app.module.ts b/src/modules/app/browser-app.module.ts index 4cdf7fbe2f..68e328a8d5 100644 --- a/src/modules/app/browser-app.module.ts +++ b/src/modules/app/browser-app.module.ts @@ -31,7 +31,6 @@ import { GoogleAnalyticsService } from '../../app/statistics/google-analytics.se import { AuthRequestService } from '../../app/core/auth/auth-request.service'; import { BrowserAuthRequestService } from '../../app/core/auth/browser-auth-request.service'; import { BrowserInitService } from './browser-init.service'; -import { VocabularyTreeviewService } from 'src/app/shared/form/vocabulary-treeview/vocabulary-treeview.service'; export const REQ_KEY = makeStateKey('req'); @@ -111,10 +110,6 @@ export function getRequest(transferState: TransferState): any { { provide: LocationToken, useFactory: locationProvider, - }, - { - provide: VocabularyTreeviewService, - useClass: VocabularyTreeviewService, } ] }) From 4cf69eb9c9b1233bbeeb13efcfe271946094add8 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 2 Jun 2023 19:36:53 +0200 Subject: [PATCH 747/833] 101623: Fix reset emit nog working for BrowseByTaxonomyPage --- .../browse-by-taxonomy-page.component.spec.ts | 2 ++ .../browse-by-taxonomy-page.component.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts index 484992afbf..c724017b1f 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -47,6 +47,8 @@ describe('BrowseByTaxonomyPageComponent', () => { detail2 = new VocabularyEntryDetail(); detail1.value = 'HUMANITIES and RELIGION'; detail2.value = 'TECHNOLOGY'; + detail1.id = 'id-1'; + detail2.id = 'id-2'; }); it('should create', () => { diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index d568a97fd7..cf6345bf39 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -98,7 +98,7 @@ export class BrowseByTaxonomyPageComponent implements OnInit, OnDestroy { * @param detail VocabularyEntryDetail to be removed */ onDeselect(detail: VocabularyEntryDetail): void { - this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); + this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry.id !== detail.id; }); this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); this.updateQueryParams(); } From 165bdf77972639cca75776b32cb145feeea42a3d Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Thu, 25 May 2023 15:43:18 +0300 Subject: [PATCH 748/833] src/assets: add i18n string for publisher Add string for publisher in live import item preview. Requires: https://github.com/DSpace/DSpace/pull/8866 --- src/assets/i18n/en.json5 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 88b5e17a01..d9516b22b9 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2536,6 +2536,8 @@ "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.publisher": "Publisher:", + "item.preview.person.familyName": "Surname:", "item.preview.person.givenName": "Name:", From 092608f6cbb114a81a34a685fefec8e5cbed2bed Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 5 Jun 2023 15:11:01 +0200 Subject: [PATCH 749/833] [CST-5729] Remove additional error message --- src/app/core/data/signposting-data.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index fca22ec383..d051ecf8db 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -29,7 +29,6 @@ export class SignpostingDataService { return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { - console.error(err); return observableOf([]); }), map((res: RawRestResponse) => res.statusCode === 200 ? res.payload as SignpostingLink[] : []) From 2824469dc56510027cead4858d22404e07f6cf64 Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Mon, 5 Jun 2023 14:41:55 +0100 Subject: [PATCH 750/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 160 +++++++++++++++++++++++++----------- 1 file changed, 110 insertions(+), 50 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index 74b1ff3e68..e89ff0bc60 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,6 +1,6 @@ { - // Dspace v7.5 > i18n pt-PT > reviewed 30-05-2023 + // Dspace v7.x > i18n pt-PT > reviewed 05-06-2023 // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", @@ -842,7 +842,7 @@ // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", "admin.batch-import.page.dropMsgReplace": "Arraste ficheiro .zip para substituir importação em lote", - // "admin.metadata-import.page.button.return": "Return", + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Voltar", // "admin.metadata-import.page.button.proceed": "Proceed", @@ -1286,7 +1286,7 @@ // "collection.delete.head": "Delete Collection", "collection.delete.head": "Apagar coleção", - // "collection.delete.notification.fail": "collection could not be deleted", + // "collection.delete.notification.fail": "Collection could not be deleted", "collection.delete.notification.fail": "Coleção não pode ser apagada", // "collection.delete.notification.success": "Successfully deleted collection", @@ -1307,13 +1307,13 @@ // "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.mapper.head": "Mapeamentos", - // "collection.edit.tabs.item-mapper.title": "collection Edit - Item Mapper", + // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", "collection.edit.tabs.item-mapper.title": "Editar coleção - mapeamentos", // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Cancelar", - // "collection.edit.item-mapper.collection": "collection: \"{{name}}\"", + // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Coleção: \"{{name}}\"", // "collection.edit.item-mapper.confirm": "Map selected items", @@ -1547,8 +1547,8 @@ // "collection.form.entityType": "Entity Type", "collection.form.entityType": "Tipo de entidade", - // "collection.listelement.badge": "collection", - "collection.listelement.badge": "coleção", + // "collection.listelement.badge": "Collection", + "collection.listelement.badge": "Coleção", // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Entradas recentes", @@ -2074,6 +2074,9 @@ // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sem título", + + // "dso.name.unnamed": "Unnamed", + "dso.name.unnamed": "Sem nome", // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Nova coleção", @@ -2159,7 +2162,7 @@ // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again", "dso-selector.results-could-not-be-retrieved": "Algo correu mal, por favor repita", - // "supervision-group-selector.header": "supervision Group Selector", + // "supervision-group-selector.header": "Supervision Group Selector", "supervision-group-selector.header": "Seletor de grupos de supervisão", // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", @@ -2192,8 +2195,8 @@ // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", "supervision-group-selector.notification.create.success.title": "Criada com sucesso ordem de supervisão para o grupo {{ name }}", - // "supervision-group-selector.notification.create.failure.title": "error", - "supervision-group-selector.notification.create.failure.title": "erro", + // "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.failure.title": "Erro", // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", "supervision-group-selector.notification.create.already-existing": "Já existe uma ordem de supervisão sobre este item para grupo selecionado", @@ -2491,9 +2494,24 @@ // "form.no-value": "No value entered", "form.no-value": "Nenhum valor informado", + + // "form.other-information.email": "Email", + "form.other-information.email": "Email", + + // "form.other-information.first-name": "First Name", + "form.other-information.first-name": "Nome", + + // "form.other-information.insolr": "In Solr Index", + "form.other-information.insolr": "No índice SOLR", + + // "form.other-information.institution": "Institution", + "form.other-information.institution": "Instituição", + + // "form.other-information.last-name": "Last Name", + "form.other-information.last-name": "Apelido", - // "form.other-information": {}, - "form.other-information": {}, + // "form.other-information.orcid": "ORCID", + "form.other-information.orcid": "ORCID", // "form.remove": "Remove", "form.remove": "Apagar", @@ -2513,6 +2531,9 @@ // "form.submit": "Save", "form.submit": "Guardar", + // "form.create": "Create", + "form.create": "Criar", + // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Largue o item na nova posição", @@ -2741,7 +2762,7 @@ // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Editar políticas dos itens", - // "item.badge.private": "Private", + // "item.badge.private": "Non-discoverable", "item.badge.private": "Privado", // "item.badge.withdrawn": "Withdrawn", @@ -2960,8 +2981,8 @@ // "item.edit.register-doi.success": "DOI queued for registration successfully.", "item.edit.register-doi.success": "DOI colocado em fila de espera para o registo com sucesso.", - // "item.edit.register-doi.error": "error registering DOI", - "item.edit.register-doi.error": "erro ao registar DOI", + // "item.edit.register-doi.error": "Error registering DOI", + "item.edit.register-doi.error": "Erro ao registar DOI", // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", "item.edit.register-doi.to-update": "O seguinte DOI já foi criado e será colocado em fila de espera para registo online", @@ -3265,6 +3286,9 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Editar item - Curadoria", + + // "item.edit.curate.title": "Curate Item: {{item}}", + "item.edit.curate.title": "Curar item: {{item}}", // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadados do item", @@ -3836,7 +3860,7 @@ // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "itemtemplate.edit.metadata.notifications.discarded.content": "As sua alterações foram descartadas. Para repor as suas alterações clique no botão 'Desfazer'", - // "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", "itemtemplate.edit.metadata.notifications.discarded.title": "Alterações descartadas", // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", @@ -3851,7 +3875,7 @@ // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "itemtemplate.edit.metadata.notifications.outdated.content": "O modelo do item que está atualmente a trabalhar foi alterado por outro utilizador. As suas alterações serão descartadas para evitar conflitos", - // "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", "itemtemplate.edit.metadata.notifications.outdated.title": "Alterações desatualizadas", // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", @@ -4217,7 +4241,7 @@ // "menu.section.import": "Import", "menu.section.import": "Importar", - // "menu.section.import_batch": "Batch import (ZIP)", + // "menu.section.import_batch": "Batch Import (ZIP)", "menu.section.import_batch": "Importação em lote (ZIP)", // "menu.section.import_metadata": "Metadata", @@ -4403,20 +4427,20 @@ // "mydspace.show.supervisedWorkspace": "Supervised items", "mydspace.show.supervisedWorkspace": "Itens supervisionados", - // "mydspace.status.archived": "Archived", - "mydspace.status.archived": "Depósito aceite", - - // "mydspace.status.validation": "Validation", - "mydspace.status.validation": "Em validação", - - // "mydspace.status.waiting-for-controller": "Waiting for controller", - "mydspace.status.waiting-for-controller": "Aguarda validador", - - // "mydspace.status.workflow": "Workflow", - "mydspace.status.workflow": "Em fluxo de trabalho", - - // "mydspace.status.workspace": "Workspace", - "mydspace.status.workspace": "Depósito por terminar", + // "mydspace.status.mydspaceArchived": "Archived", + "mydspace.status.mydspaceArchived": "Depósito aceite", + + // "mydspace.status.mydspaceValidation": "Validation", + "mydspace.status.mydspaceValidation": "Em validação", + + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", + "mydspace.status.mydspaceWaitingController": "Aguarda validador", + + // "mydspace.status.mydspaceWorkflow": "Workflow", + "mydspace.status.mydspaceWorkflow": "Em fluxo de trabalho", + + // "mydspace.status.mydspaceWorkspace": "Workspace", + "mydspace.status.mydspaceWorkspace": "Depósito por terminar", // "mydspace.title": "MyDSpace", "mydspace.title": "Área Pessoal", @@ -4468,6 +4492,9 @@ // "nav.search": "Search", "nav.search": "Pesquisar", + + // "nav.search.button": "Submit search", + "nav.search.button": "Pesquisar", // "nav.statistics.header": "Statistics", "nav.statistics.header": "Estatísticas", @@ -4624,6 +4651,9 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Ocorreu um erro ao criar este processo", + + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + "process.new.notification.error.max-upload.content": "O ficheiro excede o tamanho máximo de carregamento!", // "process.new.header": "Create a new process", "process.new.header": "Criar um novo processo", @@ -5324,7 +5354,7 @@ // "search.filters.applied.f.discoverable": "Non-discoverable", "search.filters.applied.f.discoverable": "Privado", - // "search.filters.applied.f.entityType": "Item type", + // "search.filters.applied.f.entityType": "Item Type", "search.filters.applied.f.entityType": "Tipo de item", // "search.filters.applied.f.has_content_in_original_bundle": "Has files", @@ -5564,7 +5594,7 @@ // "search.filters.filter.submitter.label": "Search submitter", "search.filters.filter.submitter.label": "Procurar depositante", - // "search.filters.filter.show-tree": "browse {{ name }} tree", + // "search.filters.filter.show-tree": "Browse {{ name }} tree", "search.filters.filter.show-tree": "Percorrer por hierarquia de {{ name }}", // "search.filters.filter.supervisedBy.head": "Supervised By", @@ -5573,8 +5603,8 @@ // "search.filters.filter.supervisedBy.placeholder": "Supervised By", "search.filters.filter.supervisedBy.placeholder": "Supervisionado por", - // "search.filters.filter.supervisedBy.label": "search Supervised By", - "search.filters.filter.supervisedBy.label": "pesquisar supervisionado por", + // "search.filters.filter.supervisedBy.label": "Search Supervised By", + "search.filters.filter.supervisedBy.label": "Pesquisar supervisionado por", // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Número de revista", @@ -5743,6 +5773,9 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", + + // "statistics.table.no-name": "(object name could not be loaded)", + "statistics.table.no-name": "(não foi possível carregar o nome do objeto)", // "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.breadcrumbs": "Editar depósito", @@ -6335,8 +6368,8 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title": "Resultados da pesquisa", - // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por outros em futuros depósitos? Se não, pode usar apenas neste depósito.", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don't you can still use it for this submission.", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Pretende guardar \"{{ value }}\" como um nome alternativo para esta pessoa permitindo a sua reutilização por si e outros em futuros depósitos? Se não, pode usar apenas neste depósito.", // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Guardar um Nome alternativo", @@ -6733,10 +6766,10 @@ // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Remover", - - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", - "submission.workflow.generic.delete-help": "Se pretende remover definitivamente este item, selecione 'Apagar'. Será solicitada confirmação.", - + + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Selecione esta opção para rejeitar este item. Ser-lhe-á pedida confirmação.", + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", @@ -6832,17 +6865,20 @@ // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", + + // "submitter.empty": "N/A", + "submitter.empty": "N/E", - // "subscriptions.title": "subscriptions", + // "subscriptions.title": "Subscriptions", "subscriptions.title": "Subscrições de alertas", - // "subscriptions.item": "subscriptions for items", + // "subscriptions.item": "Subscriptions for items", "subscriptions.item": "Subscrições para itens", - // "subscriptions.collection": "subscriptions for collections", + // "subscriptions.collection": "Subscriptions for collections", "subscriptions.collection": "Subscrições para coleções", - // "subscriptions.community": "subscriptions for communities", + // "subscriptions.community": "Subscriptions for communities", "subscriptions.community": "Subscrições para comunidades", // "subscriptions.subscription_type": "Subscription type", @@ -6863,7 +6899,7 @@ // "subscriptions.tooltip": "Subscribe", "subscriptions.tooltip": "Subscrever", - // "subscriptions.modal.title": "subscriptions", + // "subscriptions.modal.title": "Subscriptions", "subscriptions.modal.title": "Subscrições de alertas", // "subscriptions.modal.type-frequency": "Type and frequency", @@ -6872,7 +6908,7 @@ // "subscriptions.modal.close": "Close", "subscriptions.modal.close": "Fechar", - // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \// "subscriptions\" page under your user profile", + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", "subscriptions.modal.delete-info": "Para remover esta subscrição, por favor aceda à página de 'subscrições' debaixo do seu perfil de utilizador", // "subscriptions.modal.new-subscription-form.type.content": "Content", @@ -6890,7 +6926,7 @@ // "subscriptions.modal.new-subscription-form.submit": "Submit", "subscriptions.modal.new-subscription-form.submit": "Submeter", - // "subscriptions.modal.new-subscription-form.processing": "processing...", + // "subscriptions.modal.new-subscription-form.processing": "Processing...", "subscriptions.modal.new-subscription-form.processing": "A processar...", // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", @@ -7093,6 +7129,30 @@ // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista das tarefas", + + // "workspace-item.delete.breadcrumbs": "Workspace Delete", + "workspace-item.delete.breadcrumbs": "Apagar da área de trabalho", + + // "workspace-item.delete.header": "Delete workspace item", + "workspace-item.delete.header": "Apagar item da área de trabalho", + + // "workspace-item.delete.button.confirm": "Delete", + "workspace-item.delete.button.confirm": "Apagar", + + // "workspace-item.delete.button.cancel": "Cancel", + "workspace-item.delete.button.cancel": "Cancelar", + + // "workspace-item.delete.notification.success.title": "Deleted", + "workspace-item.delete.notification.success.title": "Apagado", + + // "workspace-item.delete.title": "This workspace item was successfully deleted", + "workspace-item.delete.title": "Este item foi removido da área de trabalho com êxito", + + // "workspace-item.delete.notification.error.title": "Something went wrong", + "workspace-item.delete.notification.error.title": "Ocorreu algum erro!", + + // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", + "workspace-item.delete.notification.error.content": "Não foi possível remover o item da área de trabalho", // "workflow-item.advanced.title": "Advanced workflow", "workflow-item.advanced.title": "Fluxo de trabalho avançado", @@ -7577,7 +7637,7 @@ // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", "system-wide-alert.form.label.countdownTo.hint": "Dica: Defina um temporizador de contagem decrescente. Quando ativado, pode ser definida uma data no futuro e o 'banner' de alerta geral do sistema irá realizar uma contagem decrescente para a data definida. Quando este temporizador terminar, desaparecerá do alerta. O servidor NÃO pára automaticamente.", - // "system-wide-alert.form.label.preview": "system-wide alert preview", + // "system-wide-alert.form.label.preview": "System-wide alert preview", "system-wide-alert.form.label.preview": "Pré-visualização de alerta geral do sistema", // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", From 3f343dbd60a33100209feca76168168b972d1702 Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:29:47 +0100 Subject: [PATCH 751/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index e89ff0bc60..d623b2d431 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,6 +1,6 @@ { - // Dspace v7.x > i18n pt-PT > reviewed 05-06-2023 + // Dspace v7.x > i18n pt-PT > last reviewed 05-06-2023 // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", From 72be58aa2a597bf72bd72f4322b9affe053e06ae Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Tue, 6 Jun 2023 11:50:35 +0100 Subject: [PATCH 752/833] Update pt-PT.json5 --- src/assets/i18n/pt-PT.json5 | 52 ++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index d623b2d431..c622c4c257 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -2074,7 +2074,7 @@ // "dso.name.untitled": "Untitled", "dso.name.untitled": "Sem título", - + // "dso.name.unnamed": "Unnamed", "dso.name.unnamed": "Sem nome", @@ -2494,19 +2494,19 @@ // "form.no-value": "No value entered", "form.no-value": "Nenhum valor informado", - + // "form.other-information.email": "Email", "form.other-information.email": "Email", - + // "form.other-information.first-name": "First Name", "form.other-information.first-name": "Nome", - + // "form.other-information.insolr": "In Solr Index", "form.other-information.insolr": "No índice SOLR", - + // "form.other-information.institution": "Institution", - "form.other-information.institution": "Instituição", - + "form.other-information.institution": "Instituição", + // "form.other-information.last-name": "Last Name", "form.other-information.last-name": "Apelido", @@ -2533,7 +2533,7 @@ // "form.create": "Create", "form.create": "Criar", - + // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Largue o item na nova posição", @@ -3286,7 +3286,7 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Editar item - Curadoria", - + // "item.edit.curate.title": "Curate Item: {{item}}", "item.edit.curate.title": "Curar item: {{item}}", @@ -4429,16 +4429,16 @@ // "mydspace.status.mydspaceArchived": "Archived", "mydspace.status.mydspaceArchived": "Depósito aceite", - + // "mydspace.status.mydspaceValidation": "Validation", "mydspace.status.mydspaceValidation": "Em validação", - + // "mydspace.status.mydspaceWaitingController": "Waiting for controller", "mydspace.status.mydspaceWaitingController": "Aguarda validador", - + // "mydspace.status.mydspaceWorkflow": "Workflow", "mydspace.status.mydspaceWorkflow": "Em fluxo de trabalho", - + // "mydspace.status.mydspaceWorkspace": "Workspace", "mydspace.status.mydspaceWorkspace": "Depósito por terminar", @@ -4492,7 +4492,7 @@ // "nav.search": "Search", "nav.search": "Pesquisar", - + // "nav.search.button": "Submit search", "nav.search.button": "Pesquisar", @@ -4651,7 +4651,7 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Ocorreu um erro ao criar este processo", - + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", "process.new.notification.error.max-upload.content": "O ficheiro excede o tamanho máximo de carregamento!", @@ -5773,7 +5773,7 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Consultas", - + // "statistics.table.no-name": "(object name could not be loaded)", "statistics.table.no-name": "(não foi possível carregar o nome do objeto)", @@ -6766,10 +6766,10 @@ // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Remover", - + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", "submission.workflow.generic.delete-help": "Selecione esta opção para rejeitar este item. Ser-lhe-á pedida confirmação.", - + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", @@ -6865,7 +6865,7 @@ // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", "submission.workspace.generic.view-help": "Selecione esta opção para ver os metadados do item.", - + // "submitter.empty": "N/A", "submitter.empty": "N/E", @@ -7129,28 +7129,28 @@ // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista das tarefas", - + // "workspace-item.delete.breadcrumbs": "Workspace Delete", "workspace-item.delete.breadcrumbs": "Apagar da área de trabalho", - + // "workspace-item.delete.header": "Delete workspace item", "workspace-item.delete.header": "Apagar item da área de trabalho", // "workspace-item.delete.button.confirm": "Delete", "workspace-item.delete.button.confirm": "Apagar", - + // "workspace-item.delete.button.cancel": "Cancel", "workspace-item.delete.button.cancel": "Cancelar", - + // "workspace-item.delete.notification.success.title": "Deleted", "workspace-item.delete.notification.success.title": "Apagado", - + // "workspace-item.delete.title": "This workspace item was successfully deleted", "workspace-item.delete.title": "Este item foi removido da área de trabalho com êxito", - + // "workspace-item.delete.notification.error.title": "Something went wrong", "workspace-item.delete.notification.error.title": "Ocorreu algum erro!", - + // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", "workspace-item.delete.notification.error.content": "Não foi possível remover o item da área de trabalho", From dbccda4330eb7ece591cfab4795bfa75e786e958 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Tue, 6 Jun 2023 14:13:13 +0200 Subject: [PATCH 753/833] rollback change for orcid sync settings --- .../orcid-sync-settings/orcid-sync-settings.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 1aec416d62..0bcbc295ac 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -156,8 +156,7 @@ export class OrcidSyncSettingsComponent implements OnInit { } }), ).subscribe((remoteData: RemoteData) => { - // hasSucceeded is true if the response is success or successStale - if (remoteData.hasSucceeded) { + if (remoteData.isSuccess) { this.notificationsService.success(this.translateService.get(this.messagePrefix + '.synchronization-settings-update.success')); this.settingsUpdated.emit(); } else { From 3611f375632682fe1137a3b56dbffe903b2577c4 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 6 Jun 2023 14:42:49 +0200 Subject: [PATCH 754/833] [DURACOM-151] Fixed EPerson deletion --- .../epeople-registry.component.ts | 17 +++-- .../eperson-form/eperson-form.component.ts | 65 +++++++++++-------- src/app/core/data/request.service.ts | 4 +- 3 files changed, 50 insertions(+), 36 deletions(-) diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.ts b/src/app/access-control/epeople-registry/epeople-registry.component.ts index 706dcab690..fb045ebb88 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.ts @@ -287,14 +287,17 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { /** * This method will set everything to stale, which will cause the lists on this page to update. */ - reset() { + reset(): void { this.epersonService.getBrowseEndpoint().pipe( - take(1) - ).subscribe((href: string) => { - this.requestService.setStaleByHrefSubstring(href).pipe(take(1)).subscribe(() => { - this.epersonService.cancelEditEPerson(); - this.isEPersonFormShown = false; - }); + take(1), + switchMap((href: string) => { + return this.requestService.setStaleByHrefSubstring(href).pipe( + take(1), + ); + }) + ).subscribe(()=>{ + this.epersonService.cancelEditEPerson(); + this.isEPersonFormShown = false; }); } } diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index c60de00aed..1fd0e05ccb 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -8,7 +8,7 @@ import { } from '@ng-dynamic-forms/core'; import { TranslateService } from '@ngx-translate/core'; import { combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; -import { debounceTime, switchMap, take } from 'rxjs/operators'; +import { debounceTime, finalize, map, switchMap, take } from 'rxjs/operators'; import { PaginatedList } from '../../../core/data/paginated-list.model'; import { RemoteData } from '../../../core/data/remote-data'; import { EPersonDataService } from '../../../core/eperson/eperson-data.service'; @@ -463,31 +463,43 @@ export class EPersonFormComponent implements OnInit, OnDestroy { * Deletes the EPerson from the Repository. The EPerson will be the only that this form is showing. * It'll either show a success or error message depending on whether the delete was successful or not. */ - delete() { - this.epersonService.getActiveEPerson().pipe(take(1)).subscribe((eperson: EPerson) => { - const modalRef = this.modalService.open(ConfirmationModalComponent); - modalRef.componentInstance.dso = eperson; - modalRef.componentInstance.headerLabel = 'confirmation-modal.delete-eperson.header'; - modalRef.componentInstance.infoLabel = 'confirmation-modal.delete-eperson.info'; - modalRef.componentInstance.cancelLabel = 'confirmation-modal.delete-eperson.cancel'; - modalRef.componentInstance.confirmLabel = 'confirmation-modal.delete-eperson.confirm'; - modalRef.componentInstance.brandColor = 'danger'; - modalRef.componentInstance.confirmIcon = 'fas fa-trash'; - modalRef.componentInstance.response.pipe(take(1)).subscribe((confirm: boolean) => { - if (confirm) { - if (hasValue(eperson.id)) { - this.epersonService.deleteEPerson(eperson).pipe(getFirstCompletedRemoteData()).subscribe((restResponse: RemoteData) => { - if (restResponse.hasSucceeded) { - this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); - this.submitForm.emit(); - } else { - this.notificationsService.error('Error occured when trying to delete EPerson with id: ' + eperson.id + ' with code: ' + restResponse.statusCode + ' and message: ' + restResponse.errorMessage); - } - this.cancelForm.emit(); - }); - } - } - }); + delete(): void { + this.epersonService.getActiveEPerson().pipe( + take(1), + switchMap((eperson: EPerson) => { + const modalRef = this.modalService.open(ConfirmationModalComponent); + modalRef.componentInstance.dso = eperson; + modalRef.componentInstance.headerLabel = 'confirmation-modal.delete-eperson.header'; + modalRef.componentInstance.infoLabel = 'confirmation-modal.delete-eperson.info'; + modalRef.componentInstance.cancelLabel = 'confirmation-modal.delete-eperson.cancel'; + modalRef.componentInstance.confirmLabel = 'confirmation-modal.delete-eperson.confirm'; + modalRef.componentInstance.brandColor = 'danger'; + modalRef.componentInstance.confirmIcon = 'fas fa-trash'; + + return modalRef.componentInstance.response.pipe( + take(1), + switchMap((confirm: boolean) => { + if (confirm && hasValue(eperson.id)) { + this.canDelete$ = observableOf(false); + return this.epersonService.deleteEPerson(eperson).pipe( + getFirstCompletedRemoteData(), + map((restResponse: RemoteData) => ({ restResponse, eperson })) + ); + } else { + return observableOf(null); + } + }), + finalize(() => this.canDelete$ = observableOf(true)) + ); + }) + ).subscribe(({ restResponse, eperson }: { restResponse: RemoteData | null, eperson: EPerson }) => { + if (restResponse?.hasSucceeded) { + this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); + this.submitForm.emit(); + } else { + this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${eperson?.id} with code: ${restResponse?.statusCode} and message: ${restResponse?.errorMessage}`); + } + this.cancelForm.emit(); }); } @@ -523,7 +535,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy { * Cancel the current edit when component is destroyed & unsub all subscriptions */ ngOnDestroy(): void { - this.onCancel(); this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); this.paginationService.clearPagination(this.config.id); if (hasValue(this.emailValueChangeSubscribe)) { diff --git a/src/app/core/data/request.service.ts b/src/app/core/data/request.service.ts index 94a6020975..78f53ffe3a 100644 --- a/src/app/core/data/request.service.ts +++ b/src/app/core/data/request.service.ts @@ -328,10 +328,10 @@ export class RequestService { this.store.dispatch(new RequestStaleAction(uuid)); return this.getByUUID(uuid).pipe( + take(1), map((request: RequestEntry) => isStale(request.state)), filter((stale: boolean) => stale), - take(1), - ); + ); } /** From 1b2d9829edf11c8d4b427981f2e0dad2dbac5abe Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 6 Jun 2023 15:35:54 +0200 Subject: [PATCH 755/833] [DURACOM-151] unit test fix --- src/app/core/data/request.service.spec.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/app/core/data/request.service.spec.ts b/src/app/core/data/request.service.spec.ts index 108a588881..8509f60eb7 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/src/app/core/data/request.service.spec.ts @@ -627,11 +627,8 @@ describe('RequestService', () => { it('should return an Observable that emits true as soon as the request is stale', fakeAsync(() => { dispatchSpy.and.callFake(() => { /* empty */ }); // don't actually set as stale - getByUUIDSpy.and.returnValue(cold('a-b--c--d-', { // but fake the state in the cache - a: { state: RequestEntryState.ResponsePending }, - b: { state: RequestEntryState.Success }, - c: { state: RequestEntryState.SuccessStale }, - d: { state: RequestEntryState.Error }, + getByUUIDSpy.and.returnValue(cold('-----(a|)', { // but fake the state in the cache + a: { state: RequestEntryState.SuccessStale }, })); const done$ = service.setStaleByUUID('something'); From 3fdef20dc2555d1760e53bdbfe4c37d41055f64e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Tue, 6 Jun 2023 15:54:57 +0200 Subject: [PATCH 756/833] added unit testing --- .../detail/process-detail.component.html | 2 +- .../detail/process-detail.component.spec.ts | 100 +++++++++++++++++- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/src/app/process-page/detail/process-detail.component.html b/src/app/process-page/detail/process-detail.component.html index 9e7a24d3af..5f905cbfff 100644 --- a/src/app/process-page/detail/process-detail.component.html +++ b/src/app/process-page/detail/process-detail.component.html @@ -5,7 +5,7 @@ {{ 'process.detail.title' | translate:{ id: process?.processId, name: process?.scriptName } }}
    -
    +
    Refreshing in {{ seconds }}s
    diff --git a/src/app/process-page/detail/process-detail.component.spec.ts b/src/app/process-page/detail/process-detail.component.spec.ts index 8749553eae..9552f9a092 100644 --- a/src/app/process-page/detail/process-detail.component.spec.ts +++ b/src/app/process-page/detail/process-detail.component.spec.ts @@ -35,6 +35,7 @@ import { NotificationsServiceStub } from '../../shared/testing/notifications-ser import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { getProcessListRoute } from '../process-page-routing.paths'; +import {ProcessStatus} from '../processes/process-status.model'; describe('ProcessDetailComponent', () => { let component: ProcessDetailComponent; @@ -44,6 +45,7 @@ describe('ProcessDetailComponent', () => { let nameService: DSONameService; let bitstreamDataService: BitstreamDataService; let httpClient: HttpClient; + let route: ActivatedRoute; let process: Process; let fileName: string; @@ -106,7 +108,8 @@ describe('ProcessDetailComponent', () => { }); processService = jasmine.createSpyObj('processService', { getFiles: createSuccessfulRemoteDataObject$(createPaginatedList(files)), - delete: createSuccessfulRemoteDataObject$(null) + delete: createSuccessfulRemoteDataObject$(null), + findById: createSuccessfulRemoteDataObject$(process), }); bitstreamDataService = jasmine.createSpyObj('bitstreamDataService', { findByHref: createSuccessfulRemoteDataObject$(logBitstream) @@ -127,6 +130,13 @@ describe('ProcessDetailComponent', () => { router = jasmine.createSpyObj('router', { navigateByUrl:{} }); + + route = jasmine.createSpyObj('route', { + data: observableOf({ process: createSuccessfulRemoteDataObject(process) }), + snapshot: { + params: { id: process.processId } + } + }); } beforeEach(waitForAsync(() => { @@ -263,4 +273,92 @@ describe('ProcessDetailComponent', () => { }); }); + describe('refresh counter', () => { + const queryRefreshCounter = () => fixture.debugElement.query(By.css('.refresh-counter')); + + describe('if process is completed', () => { + beforeEach(() => { + process.processStatus = ProcessStatus.COMPLETED; + route.data = observableOf({process: createSuccessfulRemoteDataObject(process)}); + }); + + it('should not show', () => { + spyOn(component, 'startRefreshTimer'); + + const refreshCounter = queryRefreshCounter(); + expect(refreshCounter).toBeNull(); + + expect(component.startRefreshTimer).not.toHaveBeenCalled(); + }); + }); + + describe('if process is not finished', () => { + beforeEach(() => { + process.processStatus = ProcessStatus.RUNNING; + route.data = observableOf({process: createSuccessfulRemoteDataObject(process)}); + fixture.detectChanges(); + component.stopRefreshTimer(); + }); + + it('should call startRefreshTimer', () => { + spyOn(component, 'startRefreshTimer'); + + component.ngOnInit(); + fixture.detectChanges(); // subscribe to process observable with async pipe + + expect(component.startRefreshTimer).toHaveBeenCalled(); + }); + + it('should call refresh method every 5 seconds, until process is completed', fakeAsync(() => { + spyOn(component, 'refresh'); + spyOn(component, 'stopRefreshTimer'); + + process.processStatus = ProcessStatus.COMPLETED; + // set findbyId to return a completed process + (processService.findById as jasmine.Spy).and.returnValue(observableOf(createSuccessfulRemoteDataObject(process))); + + component.ngOnInit(); + fixture.detectChanges(); // subscribe to process observable with async pipe + + expect(component.refresh).not.toHaveBeenCalled(); + + expect(component.refreshCounter$.value).toBe(0); + + tick(1001); // 1 second + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(5); // 5 - 0 + + tick(2001); // 2 seconds + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(3); // 5 - 2 + + tick(2001); // 2 seconds + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(1); // 3 - 2 + + tick(1001); // 1 second + 1 ms by the setTimeout + expect(component.refreshCounter$.value).toBe(0); // 1 - 1 + + tick(1000); // 1 second + + expect(component.refresh).toHaveBeenCalledTimes(1); + expect(component.stopRefreshTimer).toHaveBeenCalled(); + + expect(component.refreshCounter$.value).toBe(0); + + tick(1001); // 1 second + 1 ms by the setTimeout + // startRefreshTimer not called again + expect(component.refreshCounter$.value).toBe(0); + + discardPeriodicTasks(); // discard any periodic tasks that have not yet executed + })); + + it('should show if refreshCounter is different from 0', () => { + component.refreshCounter$.next(1); + fixture.detectChanges(); + + const refreshCounter = queryRefreshCounter(); + expect(refreshCounter).not.toBeNull(); + }); + + }); + + }); }); From b1aa2f3550b5ab2aa01736a99d3eb307f5e7b004 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 6 Jun 2023 16:57:17 +0200 Subject: [PATCH 757/833] [DURACOM-151] reverted setStaleByUUID method as it was --- .../eperson-form/eperson-form.component.ts | 1 - src/app/core/data/request.service.spec.ts | 7 +++++-- src/app/core/data/request.service.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index 1fd0e05ccb..d009d56058 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -495,7 +495,6 @@ export class EPersonFormComponent implements OnInit, OnDestroy { ).subscribe(({ restResponse, eperson }: { restResponse: RemoteData | null, eperson: EPerson }) => { if (restResponse?.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.labelPrefix + 'notification.deleted.success', { name: this.dsoNameService.getName(eperson) })); - this.submitForm.emit(); } else { this.notificationsService.error(`Error occurred when trying to delete EPerson with id: ${eperson?.id} with code: ${restResponse?.statusCode} and message: ${restResponse?.errorMessage}`); } diff --git a/src/app/core/data/request.service.spec.ts b/src/app/core/data/request.service.spec.ts index 8509f60eb7..108a588881 100644 --- a/src/app/core/data/request.service.spec.ts +++ b/src/app/core/data/request.service.spec.ts @@ -627,8 +627,11 @@ describe('RequestService', () => { it('should return an Observable that emits true as soon as the request is stale', fakeAsync(() => { dispatchSpy.and.callFake(() => { /* empty */ }); // don't actually set as stale - getByUUIDSpy.and.returnValue(cold('-----(a|)', { // but fake the state in the cache - a: { state: RequestEntryState.SuccessStale }, + getByUUIDSpy.and.returnValue(cold('a-b--c--d-', { // but fake the state in the cache + a: { state: RequestEntryState.ResponsePending }, + b: { state: RequestEntryState.Success }, + c: { state: RequestEntryState.SuccessStale }, + d: { state: RequestEntryState.Error }, })); const done$ = service.setStaleByUUID('something'); diff --git a/src/app/core/data/request.service.ts b/src/app/core/data/request.service.ts index 78f53ffe3a..1f6680203e 100644 --- a/src/app/core/data/request.service.ts +++ b/src/app/core/data/request.service.ts @@ -328,9 +328,9 @@ export class RequestService { this.store.dispatch(new RequestStaleAction(uuid)); return this.getByUUID(uuid).pipe( - take(1), map((request: RequestEntry) => isStale(request.state)), filter((stale: boolean) => stale), + take(1), ); } From 755451191c0dbb571f0af1ad4210518724702325 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 6 Jun 2023 18:27:07 +0200 Subject: [PATCH 758/833] 100553: Updated form validation errors from metadata schema and field form --- .../metadata-schema-form.component.ts | 10 ++++++++-- .../metadata-field-form.component.ts | 8 ++++++-- src/assets/i18n/en.json5 | 13 ++++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index b7c16bc83f..3be4d80fa9 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -87,11 +87,13 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'name', validators: { required: null, - pattern: '^[^. ,_]{1,32}$', + pattern: '^[^. ,]*$', + maxLength: 32, }, required: true, errorMessages: { - pattern: 'error.validation.metadata.namespace.invalid-pattern', + pattern: 'error.validation.metadata.name.invalid-pattern', + maxLength: 'error.validation.metadata.name.max-length', }, }); this.namespace = new DynamicInputModel({ @@ -100,8 +102,12 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'namespace', validators: { required: null, + maxLength: 256, }, required: true, + errorMessages: { + maxLength: 'error.validation.metadata.namespace.max-length', + }, }); this.formModel = [ new DynamicFormGroupModel( diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 55950a8773..df8373e8d2 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -109,11 +109,13 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { name: 'element', validators: { required: null, - pattern: '^[^.]*$', + pattern: '^[^. ,]*$', + maxLength: 64, }, required: true, errorMessages: { pattern: 'error.validation.metadata.element.invalid-pattern', + maxLength: 'error.validation.metadata.element.max-length', }, }); this.qualifier = new DynamicInputModel({ @@ -121,11 +123,13 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { label: qualifier, name: 'qualifier', validators: { - pattern: '^[^.]*$', + pattern: '^[^. ,]*$', + maxLength: 64, }, required: false, errorMessages: { pattern: 'error.validation.metadata.qualifier.invalid-pattern', + maxLength: 'error.validation.metadata.qualifier.max-length', }, }); this.scopeNote = new DynamicInputModel({ diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index c0edb83a3b..55c788ffac 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1478,12 +1478,19 @@ "error.validation.groupExists": "This group already exists", - "error.validation.metadata.namespace.invalid-pattern": "This field cannot contain dots, please use the Element & Qualifier fields instead", + "error.validation.metadata.name.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Element & Qualifier fields instead", - "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, please use the Qualifier field instead", + "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", - "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots", + "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Qualifier field instead", + + "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + + "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + + "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", "feed.description": "Syndication feed", From 77a8fde646d22e060d7a44b48e1fa2c0c1875fb9 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 7 Jun 2023 09:36:01 +0200 Subject: [PATCH 759/833] 101623: Fix Browse By Vocabulary on comcol page --- .../browse-by-taxonomy-page.component.html | 6 +++++- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index 87c7937b1b..0ae3da6847 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -6,5 +6,9 @@ (deselect)="onDeselect($event)">
    - {{ 'browse.taxonomy.button' | translate }} + + {{ 'browse.taxonomy.button' | translate }}
    diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0958fc5d29..33752cbb8a 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -701,6 +701,8 @@ "browse.comcol.by.subject": "By Subject", + "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.title": "By Title", "browse.comcol.head": "Browse", From 47e0314c9b5ebdaf87fdf1d284ac97df3bfe23da Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 7 Jun 2023 13:00:12 +0200 Subject: [PATCH 760/833] CST-9639: Fixed error on control remove, fixed cancel button behavior, fixed bad state of access control tab on load, fixed translations, added jsdocs --- .../bulk-access/bulk-access.component.html | 2 +- .../access-control-array-form.component.html | 30 ++++---- .../access-control-array-form.component.ts | 70 ++++++++++++++----- ...cess-control-form-container.component.html | 4 +- .../bulk-access-control.service.ts | 21 +++++- src/assets/i18n/en.json5 | 8 ++- 6 files changed, 92 insertions(+), 43 deletions(-) diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html index aa6c82e133..382caf85f4 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.html +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -7,7 +7,7 @@
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 4e2fd55967..f08534e8f9 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -1,5 +1,5 @@ import {Component, Input, OnInit, ViewChild} from '@angular/core'; -import {NgForm} from '@angular/forms'; +import {NgForm, NgModelGroup} from '@angular/forms'; import {AccessesConditionOption} from '../../../core/config/models/config-accesses-conditions-options.model'; import {dateToISOFormat} from '../../date.util'; @@ -17,14 +17,13 @@ export class AccessControlArrayFormComponent implements OnInit { @ViewChild('ngForm', {static: true}) ngForm!: NgForm; form: { accessControls: AccessControlItem[] } = { - accessControls: [] + accessControls: [emptyAccessControlItem()] // Start with one empty access control item }; - ngOnInit(): void { - this.addAccessControlItem(); + formDisabled = true; - // Disable the form by default - setTimeout(() => this.disable(), 0); + ngOnInit(): void { + this.disable(); // Disable the form by default } get allControlsAreEmpty() { @@ -32,29 +31,31 @@ export class AccessControlArrayFormComponent implements OnInit { .every(x => x.itemName === null || x.itemName === ''); } + get showWarning() { + return this.mode === 'replace' && this.allControlsAreEmpty && !this.formDisabled; + } + /** * Add a new access control item to the form. * Start and end date are disabled by default. * @param itemName The name of the item to add */ addAccessControlItem(itemName: string = null) { - this.form.accessControls.push({ - itemName, - startDate: null, - hasStartDate: false, - maxStartDate: null, - endDate: null, - hasEndDate: false, - maxEndDate: null, - }); + this.form.accessControls = [ + ...this.form.accessControls, + {...emptyAccessControlItem(), itemName} + ]; } /** * Remove an access control item from the form. + * @param ngModelGroup * @param index */ - removeAccessControlItem(index: number) { - this.form.accessControls.splice(index, 1); + removeAccessControlItem(ngModelGroup: NgModelGroup, id: number) { + this.ngForm.removeFormGroup(ngModelGroup); + + this.form.accessControls = this.form.accessControls.filter(item => item.id !== id); } /** @@ -77,19 +78,30 @@ export class AccessControlArrayFormComponent implements OnInit { */ reset() { this.form.accessControls = []; + + // Add an empty access control item by default + this.addAccessControlItem(); + + this.disable(); } /** * Disable the form. * This will be used to disable the form from the parent component. */ - disable = () => this.ngForm.control.disable(); + disable = () => { + this.ngForm.form.disable(); + this.formDisabled = true; + }; /** * Enable the form. * This will be used to enable the form from the parent component. */ - enable = () => this.ngForm.control.enable(); + enable = () => { + this.ngForm.form.enable(); + this.formDisabled = false; + }; accessControlChanged(control: AccessControlItem, selectedItem: string) { const item = this.dropdownOptions @@ -105,9 +117,16 @@ export class AccessControlArrayFormComponent implements OnInit { control.maxEndDate = item?.maxEndDate || null; } + trackById(index: number, item: AccessControlItem) { + return item.id; + } + } + export interface AccessControlItem { + id: number; // will be used only locally + itemName: string | null; hasStartDate?: boolean; @@ -118,3 +137,16 @@ export interface AccessControlItem { endDate: string | null; maxEndDate?: string | null; } + +const emptyAccessControlItem = (): AccessControlItem => ({ + id: randomID(), + itemName: null, + startDate: null, + hasStartDate: false, + maxStartDate: null, + endDate: null, + hasEndDate: false, + maxEndDate: null, +}); + +const randomID = () => Math.floor(Math.random() * 1000000); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index afee07139f..a5173d10d7 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -153,12 +153,12 @@
    -
    diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 51eba4275d..6fb6b62532 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -21,6 +21,9 @@ export interface BulkAccessPayload { itemAccess: any; } +/** + * This service is used to create a payload file and execute the bulk access control script + */ @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor( @@ -28,10 +31,13 @@ export class BulkAccessControlService { private router: Router, private scriptService: ScriptDataService, private translationService: TranslateService - ) { - - } + ) {} + /** + * Create a payload file from the given payload and return the file and the url to the file + * The created file will be used as input for the bulk access control script + * @param payload The payload to create the file from + */ createPayloadFile(payload: BulkAccessPayload) { const content = convertToBulkAccessControlFileModel(payload); @@ -48,6 +54,11 @@ export class BulkAccessControlService { return { url, file }; } + /** + * Execute the bulk access control script with the given uuids and file + * @param uuids + * @param file + */ executeScript(uuids: string[], file: File): Observable { console.log('execute', { uuids, file }); @@ -80,6 +91,10 @@ export class BulkAccessControlService { } } +/** + * Convert the given payload to a BulkAccessControlFileModel + * @param payload + */ export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { let finalPayload: BulkAccessControlFileModel = {}; diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 223c2fce27..a454131175 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -225,7 +225,9 @@ "admin.registries.schema.title": "Metadata Schema Registry", + "admin.access-control.bulk-access.breadcrumbs": "Bulk Access Management", + "administrativeBulkAccess.search.results.head": "Search Results", "admin.access-control.bulk-access": "Bulk Access Management", @@ -5399,14 +5401,14 @@ "access-control-option-label": "Access condition type", - "access-control-option-note": "Select an access condition to apply on the bitstream once the item is deposited", + "access-control-option-note": "Choose an access condition to apply to selected objects.", "access-control-option-start-date": "Grant access from", - "access-control-option-start-date-note": "Select the date from which the relate access condition is applied", + "access-control-option-start-date-note": "Select the date from which the related access condition is applied", "access-control-option-end-date": "Grant access until", - "access-control-option-end-date-note": "Select the date until which the relate access condition is applied", + "access-control-option-end-date-note": "Select the date until which the related access condition is applied", } From d69adab419cc415295e8240ffa05992701459182 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 7 Jun 2023 16:22:57 +0200 Subject: [PATCH 761/833] refactor primarybitstreams to work with DELETE, POST and PUT instead of PATCh --- .../bitstream-page/bitstream-page.resolver.ts | 2 +- .../edit-bitstream-page.component.ts | 96 ++++++++----- .../data/primary-bitstream-data.service.ts | 134 ++++++++++++++++++ src/app/core/shared/bundle.model.ts | 6 - 4 files changed, 197 insertions(+), 41 deletions(-) create mode 100644 src/app/core/data/primary-bitstream-data.service.ts diff --git a/src/app/bitstream-page/bitstream-page.resolver.ts b/src/app/bitstream-page/bitstream-page.resolver.ts index be92041dfc..db2af2d554 100644 --- a/src/app/bitstream-page/bitstream-page.resolver.ts +++ b/src/app/bitstream-page/bitstream-page.resolver.ts @@ -12,7 +12,7 @@ import { getFirstCompletedRemoteData } from '../core/shared/operators'; * Requesting them as embeds will limit the number of requests */ export const BITSTREAM_PAGE_LINKS_TO_FOLLOW: FollowLinkConfig[] = [ - followLink('bundle', {}, followLink('item')), + followLink('bundle', {}, followLink('primaryBitstream'), followLink('item')), followLink('format') ]; diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 10d9652a65..8b3dad3c1c 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ActivatedRoute, Router } from '@angular/router'; -import { map, switchMap, tap } from 'rxjs/operators'; +import { map, switchMap, tap, filter } from 'rxjs/operators'; import { combineLatest, combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { DynamicFormControlModel, DynamicFormGroupModel, DynamicFormLayout, DynamicFormService, DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; import { UntypedFormGroup } from '@angular/forms'; @@ -14,7 +14,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { BitstreamFormatDataService } from '../../core/data/bitstream-format-data.service'; import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../../core/shared/bitstream-format-support-level'; -import { hasValue, isEmpty, isNotEmpty } from '../../shared/empty.util'; +import { hasValue, isEmpty, isNotEmpty, hasValueOperator } from '../../shared/empty.util'; import { Metadata } from '../../core/shared/metadata.utils'; import { Location } from '@angular/common'; import { RemoteData } from '../../core/data/remote-data'; @@ -27,6 +27,8 @@ import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-u import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; import { BundleDataService } from '../../core/data/bundle-data.service'; import { Operation } from 'fast-json-patch'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; +import { hasSucceeded } from '../../core/data/request-entry-state.model'; @Component({ selector: 'ds-edit-bitstream-page', @@ -51,6 +53,11 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { */ bitstreamFormatsRD$: Observable>>; + /** + * The UUID of the primary bitstream for this bundle + */ + primaryBitstreamUUID: string; + /** * The bitstream to edit */ @@ -383,6 +390,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { public dsoNameService: DSONameService, private notificationsService: NotificationsService, private bitstreamFormatService: BitstreamFormatDataService, + private primaryBitstreamService: PrimaryBitstreamService, private bundleService: BundleDataService) { } @@ -414,6 +422,12 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { getFirstSucceededRemoteDataPayload(), ); + const primaryBitstream$ = bundle$.pipe( + hasValueOperator(), + switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href)), + getFirstSucceededRemoteDataPayload() + ); + const item$ = bundle$.pipe( switchMap((bundle: Bundle) => bundle.item), getFirstSucceededRemoteDataPayload() @@ -423,12 +437,16 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { bitstream$, allFormats$, bundle$, + primaryBitstream$, item$, ).pipe() - .subscribe(([bitstream, allFormats, bundle, item]) => { + .subscribe(([bitstream, allFormats, bundle, primaryBitstream, item]) => { this.bitstream = bitstream as Bitstream; this.formats = allFormats.page; this.bundle = bundle; + // hasValue(primaryBitstream) because if there's no primaryBitstream on the bundle it will + // be a success response, but empty + this.primaryBitstreamUUID = hasValue(primaryBitstream) ? primaryBitstream.uuid : null; this.itemId = item.uuid; this.setIiifStatus(this.bitstream); }) @@ -460,7 +478,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.formGroup.patchValue({ fileNamePrimaryContainer: { fileName: bitstream.name, - primaryBitstream: this.bundle.primaryBitstreamUUID === bitstream.uuid + primaryBitstream: this.primaryBitstreamUUID === bitstream.uuid }, descriptionContainer: { description: bitstream.firstMetadataValue('dc.description') @@ -572,26 +590,52 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { const selectedFormat = this.formats.find((f: BitstreamFormat) => f.id === updatedValues.formatContainer.selectedFormat); const isNewFormat = selectedFormat.id !== this.originalFormat.id; const isPrimary = updatedValues.fileNamePrimaryContainer.primaryBitstream; - const wasPrimary = this.bundle.primaryBitstreamUUID === this.bitstream.uuid; + const wasPrimary = this.primaryBitstreamUUID === this.bitstream.uuid; let bitstream$; let bundle$: Observable; + let errorWhileSaving = false; if (wasPrimary !== isPrimary) { - const patchOperations: Operation[] = this.retrieveBundlePatch(wasPrimary); - bundle$ = this.bundleService.patch(this.bundle, patchOperations).pipe( - getFirstCompletedRemoteData(), - map((bundleResponse: RemoteData) => { - if (hasValue(bundleResponse) && bundleResponse.hasFailed) { - this.notificationsService.error( - this.translate.instant(this.NOTIFICATIONS_PREFIX + 'error.primaryBitstream.title'), - bundleResponse.errorMessage - ); + let bundleRd$: Observable>; + if (wasPrimary) { + bundleRd$ = this.primaryBitstreamService.delete(this.bundle); + } else if (hasValue(this.primaryBitstreamUUID)) { + bundleRd$ = this.primaryBitstreamService.put(this.bitstream, this.bundle); + } else { + bundleRd$ = this.primaryBitstreamService.create(this.bitstream, this.bundle); + } + + const completedBundleRd$ = bundleRd$.pipe(getFirstCompletedRemoteData()); + + this.subs.push(completedBundleRd$.pipe( + filter((bundleRd: RemoteData) => bundleRd.hasFailed) + ).subscribe((bundleRd: RemoteData) => { + this.notificationsService.error( + this.translate.instant(this.NOTIFICATIONS_PREFIX + 'error.primaryBitstream.title'), + bundleRd.errorMessage + ); + errorWhileSaving = true; + })); + + bundle$ = completedBundleRd$.pipe( + map((bundleRd: RemoteData) => { + if (bundleRd.hasSucceeded) { + return bundleRd.payload } else { - return bundleResponse.payload; + return this.bundle; } }) ); + + this.subs.push(bundle$.pipe( + hasValueOperator(), + switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href, false)), + getFirstSucceededRemoteDataPayload() + ).subscribe((bitstream: Bitstream) => { + this.primaryBitstreamUUID = hasValue(bitstream) ? bitstream.uuid : null; + })); + } else { bundle$ = observableOf(this.bundle); } @@ -626,28 +670,12 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.translate.instant(this.NOTIFICATIONS_PREFIX + 'saved.title'), this.translate.instant(this.NOTIFICATIONS_PREFIX + 'saved.content') ); - this.navigateToItemEditBitstreams(); + if (!errorWhileSaving) { + this.navigateToItemEditBitstreams(); + } }); } - private retrieveBundlePatch(wasPrimary: boolean): Operation[] { - // No longer primary bitstream: remove - if (wasPrimary) { - return [{ - path: this.primaryBitstreamPath, - op: 'remove' - }]; - } else { - // Has become primary bitstream - // If it already had a value: replace, otherwise: add - return [{ - path: this.primaryBitstreamPath, - op: hasValue(this.bundle.primaryBitstreamUUID) ? 'replace' : 'add', - value: this.bitstream.uuid - }]; - } - } - /** * Parse form data to an updated bitstream object * @param rawForm Raw form data diff --git a/src/app/core/data/primary-bitstream-data.service.ts b/src/app/core/data/primary-bitstream-data.service.ts new file mode 100644 index 0000000000..6380a6f148 --- /dev/null +++ b/src/app/core/data/primary-bitstream-data.service.ts @@ -0,0 +1,134 @@ +import { Bitstream } from '../shared/bitstream.model'; +import { DeleteDataImpl } from './base/delete-data'; +import { PutDataImpl } from './base/put-data'; +import { CreateDataImpl } from './base/create-data'; +import { Injectable } from '@angular/core'; +import { RequestService } from './request.service'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { ObjectCacheService } from '../cache/object-cache.service'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { Observable, switchMap } from 'rxjs'; +import { RemoteData } from './remote-data'; +import { Bundle } from '../shared/bundle.model'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { constructIdEndpointDefault } from './base/identifiable-data.service'; +import { HttpOptions } from '../dspace-rest/dspace-rest.service'; +import { HttpHeaders } from '@angular/common/http'; +import { GenericConstructor } from '../shared/generic-constructor'; +import { PutRequest, PostRequest, DeleteRequest } from './request.models'; +import { getAllCompletedRemoteData } from '../shared/operators'; +import { NoContent } from '../shared/NoContent.model'; +import { BundleDataService } from './bundle-data.service'; + +@Injectable({ + providedIn: 'root', +}) +export class PrimaryBitstreamService { + private createData: CreateDataImpl; + private putData: PutDataImpl; + private deleteData: DeleteDataImpl; + + constructor( + protected requestService: RequestService, + protected rdbService: RemoteDataBuildService, + protected objectCache: ObjectCacheService, + protected halService: HALEndpointService, + protected notificationsService: NotificationsService, + protected bundleDataService: BundleDataService, + ) { + // linkPath can be undefined because we'll only use them to do things "byHref" + this.createData = new CreateDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined); + this.putData = new PutDataImpl(undefined, requestService, rdbService, objectCache, halService, undefined); + this.deleteData = new DeleteDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined, constructIdEndpointDefault); + } + + /** + * Returns the type of HttpOptions object needed from primary bitstream requests. + * i.e. with a Content-Type header set to `text/uri-list` + * @protected + */ + protected getHttpOptions(): HttpOptions { + const options: HttpOptions = Object.create({}); + let headers = new HttpHeaders(); + headers = headers.append('Content-Type', 'text/uri-list'); + options.headers = headers; + return options; + } + + /** + * Send a request of the given type to the endpointURL with an optional primaryBitstreamSelfLink + * as payload, and return the resulting Observable + * + * @param requestType The type of request: PostRequest, PutRequest, or DeleteRequest + * @param endpointURL The endpoint URL + * @param primaryBitstreamSelfLink + * @protected + */ + protected createAndSendRequest( + requestType: GenericConstructor, + endpointURL: string, + primaryBitstreamSelfLink?: string, + ): Observable> { + const requestId = this.requestService.generateRequestId(); + const request = new requestType( + requestId, + endpointURL, + primaryBitstreamSelfLink, + this.getHttpOptions() + ); + + this.requestService.send(request); + + return this.rdbService.buildFromRequestUUID(requestId); + } + + /** + * Create a new primaryBitstream + * + * @param primaryBitstream The object to create + * @param bundle The bundle to create it on + */ + create(primaryBitstream: Bitstream, bundle: Bundle): Observable> { + return this.createAndSendRequest( + PostRequest, + bundle._links.primaryBitstream.href, + primaryBitstream.self + ) as Observable>; + } + + /** + * Update an exiting primaryBitstream + * + * @param primaryBitstream The object to update + * @param bundle The bundle to update it on + */ + put(primaryBitstream: Bitstream, bundle: Bundle): Observable> { + return this.createAndSendRequest( + PutRequest, + bundle._links.primaryBitstream.href, + primaryBitstream.self + ) as Observable>; + } + + /** + * Delete an exiting primaryBitstream + * + * @param bundle The bundle to delete it from + */ + delete(bundle: Bundle): Observable> { + return this.createAndSendRequest( + DeleteRequest, + bundle._links.primaryBitstream.href + ).pipe( + getAllCompletedRemoteData(), + switchMap((rd: RemoteData) => { + if (rd.hasSucceeded) { + return this.bundleDataService.findByHref(bundle.self, false); + } else { + [bundle]; + } + }) + ); + } + +} diff --git a/src/app/core/shared/bundle.model.ts b/src/app/core/shared/bundle.model.ts index bcaa582703..f37cd96545 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/src/app/core/shared/bundle.model.ts @@ -29,12 +29,6 @@ export class Bundle extends DSpaceObject { item: HALLink; }; - /** - * The UUID of the primaryBitstream of this Bundle - */ - @autoserialize - primaryBitstreamUUID: string; - /** * The primary Bitstream of this Bundle * Will be undefined unless the primaryBitstream {@link HALLink} has been resolved. From 12b3eb839ba63032d715bb4c25ac1a2ce00f492e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 7 Jun 2023 17:29:05 +0200 Subject: [PATCH 762/833] CST-9639: Added and fixed unit tests --- .../access-control-array-form.component.html | 4 +- ...ccess-control-array-form.component.spec.ts | 32 ++- .../access-control-array-form.component.ts | 6 +- ...s-control-form-container.component.spec.ts | 187 ++++++++++++++---- ...access-control-form-container.component.ts | 2 +- 5 files changed, 178 insertions(+), 53 deletions(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 963ae165e7..efe2259328 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -4,7 +4,7 @@
    -
    +
    @@ -91,7 +91,7 @@
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts index 88d462ad79..964eb30de2 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts @@ -45,12 +45,14 @@ describe('AccessControlArrayFormComponent', () => { }); it('should remove access control item', () => { - component.removeAccessControlItem(0); - expect(component.form.accessControls.length).toEqual(0); + expect(component.form.accessControls.length).toEqual(1); component.addAccessControlItem(); - component.removeAccessControlItem(0); - expect(component.form.accessControls.length).toEqual(0); + expect(component.form.accessControls.length).toEqual(2); + + const id = component.form.accessControls[0].id; + component.removeAccessControlItem(id); + expect(component.form.accessControls.length).toEqual(1); }); it('should reset form value', () => { @@ -69,7 +71,12 @@ describe('AccessControlArrayFormComponent', () => { it('should display a select dropdown with options', () => { - const selectElement: DebugElement = fixture.debugElement.query(By.css('select#accesscontroloption-0')); + component.enable(); + fixture.detectChanges(); + + const id = component.form.accessControls[0].id; + + const selectElement: DebugElement = fixture.debugElement.query(By.css(`select#accesscontroloption-${id}`)); expect(selectElement).toBeTruthy(); const options = selectElement.nativeElement.querySelectorAll('option'); @@ -81,6 +88,9 @@ describe('AccessControlArrayFormComponent', () => { }); it('should add new access control items when clicking "Add more" button', () => { + component.enable(); + fixture.detectChanges(); + const addButton: DebugElement = fixture.debugElement.query(By.css(`button#add-btn-${component.type}`)); addButton.nativeElement.click(); fixture.detectChanges(); @@ -90,11 +100,17 @@ describe('AccessControlArrayFormComponent', () => { }); it('should remove access control items when clicking remove button', () => { - const removeButton: DebugElement = fixture.debugElement.query(By.css('button.btn-outline-danger')); - removeButton.nativeElement.click(); + component.enable(); + + component.addAccessControlItem('test'); + + fixture.detectChanges(); + + const removeButton: DebugElement[] = fixture.debugElement.queryAll(By.css('button.btn-outline-danger')); + removeButton[1].nativeElement.click(); fixture.detectChanges(); const accessControlItems = fixture.debugElement.queryAll(By.css('.access-control-item')); - expect(accessControlItems.length).toEqual(0); + expect(accessControlItems.length).toEqual(1); }); }); diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index f08534e8f9..227de596ff 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -1,5 +1,5 @@ import {Component, Input, OnInit, ViewChild} from '@angular/core'; -import {NgForm, NgModelGroup} from '@angular/forms'; +import {NgForm} from '@angular/forms'; import {AccessesConditionOption} from '../../../core/config/models/config-accesses-conditions-options.model'; import {dateToISOFormat} from '../../date.util'; @@ -52,9 +52,7 @@ export class AccessControlArrayFormComponent implements OnInit { * @param ngModelGroup * @param index */ - removeAccessControlItem(ngModelGroup: NgModelGroup, id: number) { - this.ngForm.removeFormGroup(ngModelGroup); - + removeAccessControlItem(id: number) { this.form.accessControls = this.form.accessControls.filter(item => item.id !== id); } diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts index 66ef20444e..4d02f7a52d 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -1,38 +1,149 @@ -// -// describe('AccessControlFormContainerComponent', () => { -// let component: AccessControlFormContainerComponent; -// let fixture: ComponentFixture>; -// -// let bulkAccessConfigDataServiceMock: BulkAccessConfigDataService; -// -// beforeEach(async () => { -// -// bulkAccessConfigDataServiceMock = jasmine.createSpyObj('BulkAccessConfigDataService', { -// findByName: jasmine.createSpy('findByName'), -// }); -// -// -// await TestBed.configureTestingModule({ -// declarations: [ AccessControlFormContainerComponent ], -// imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], -// providers: [ -// { provide: BulkAccessConfigDataService, useValue: bulkAccessConfigDataServiceMock }, -// // private bulkAccessControlService: BulkAccessControlService, -// // private selectableListService: SelectableListService, -// // protected modalService: NgbModal, -// // private cdr: ChangeDetectorRef -// ] -// }) -// .compileComponents(); -// }); -// -// beforeEach(() => { -// fixture = TestBed.createComponent(AccessControlFormContainerComponent); -// component = fixture.componentInstance; -// fixture.detectChanges(); -// }); -// -// it('should create', () => { -// expect(component).toBeTruthy(); -// }); -// }); +import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; +import {NgbDatepickerModule, NgbModal, NgbModalRef} from '@ng-bootstrap/ng-bootstrap'; +import {Component} from '@angular/core'; +import {of} from 'rxjs'; +import {AccessControlFormContainerComponent} from './access-control-form-container.component'; +import {BulkAccessControlService} from './bulk-access-control.service'; +import {BulkAccessConfigDataService} from '../../core/config/bulk-access-config-data.service'; +import {Item} from '../../core/shared/item.model'; +import {SelectableListService} from '../object-list/selectable-list/selectable-list.service'; +import {createAccessControlInitialFormState} from './access-control-form-container-intial-state'; +import {CommonModule} from '@angular/common'; +import {SharedBrowseByModule} from '../browse-by/shared-browse-by.module'; +import {TranslateModule} from '@ngx-translate/core'; +import {FormsModule} from '@angular/forms'; +import {UiSwitchModule} from 'ngx-ui-switch'; +import { + ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID +} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; +import {AccessControlFormModule} from './access-control-form.module'; + + +describe('AccessControlFormContainerComponent', () => { + let component: AccessControlFormContainerComponent; + let fixture: ComponentFixture>; + + +// Mock NgbModal + @Component({selector: 'ds-ngb-modal', template: ''}) + class MockNgbModalComponent { + } + +// Mock dependencies + const mockBulkAccessControlService = { + createPayloadFile: jasmine.createSpy('createPayloadFile').and.returnValue({file: 'mocked-file'}), + executeScript: jasmine.createSpy('executeScript').and.returnValue(of('success')), + }; + + const mockBulkAccessConfigDataService = { + findByName: jasmine.createSpy('findByName').and.returnValue(of({payload: {options: []}})), + }; + + const mockSelectableListService = { + getSelectableList: jasmine.createSpy('getSelectableList').and.returnValue(of({selection: []})), + deselectAll: jasmine.createSpy('deselectAll'), + }; + + const mockNgbModal = { + open: jasmine.createSpy('open').and.returnValue( + { componentInstance: {}, closed: of({})} as NgbModalRef + ) + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AccessControlFormContainerComponent, MockNgbModalComponent], + imports: [ + CommonModule, + FormsModule, + SharedBrowseByModule, + AccessControlFormModule, + TranslateModule.forRoot(), + NgbDatepickerModule, + UiSwitchModule + ], + providers: [ + {provide: BulkAccessControlService, useValue: mockBulkAccessControlService}, + {provide: BulkAccessConfigDataService, useValue: mockBulkAccessConfigDataService}, + {provide: SelectableListService, useValue: mockSelectableListService}, + {provide: NgbModal, useValue: mockNgbModal}, + ], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccessControlFormContainerComponent); + component = fixture.componentInstance; + component.state = createAccessControlInitialFormState(); + fixture.detectChanges(); + }); + + it('should create the component', () => { + expect(component).toBeTruthy(); + }); + + it('should reset the form', fakeAsync(() => { + fixture.detectChanges(); + const resetSpy = spyOn(component.bitstreamAccessCmp, 'reset'); + spyOn(component.itemAccessCmp, 'reset'); + + component.reset(); + + expect(resetSpy).toHaveBeenCalled(); + expect(component.itemAccessCmp.reset).toHaveBeenCalled(); + expect(component.state).toEqual(createAccessControlInitialFormState()); + })); + + it('should submit the form', () => { + const bitstreamAccess = 'bitstreamAccess'; + const itemAccess = 'itemAccess'; + component.bitstreamAccessCmp.getValue = jasmine.createSpy('getValue').and.returnValue(bitstreamAccess); + component.itemAccessCmp.getValue = jasmine.createSpy('getValue').and.returnValue(itemAccess); + component.itemRD = {payload: {uuid: 'item-uuid'}} as any; + + component.submit(); + + expect(mockBulkAccessControlService.createPayloadFile).toHaveBeenCalledWith({ + bitstreamAccess, + itemAccess, + state: createAccessControlInitialFormState(), + }); + expect(mockBulkAccessControlService.executeScript).toHaveBeenCalledWith(['item-uuid'], 'mocked-file'); + }); + + it('should handle the status change for bitstream access', () => { + component.bitstreamAccessCmp.enable = jasmine.createSpy('enable'); + component.bitstreamAccessCmp.disable = jasmine.createSpy('disable'); + + component.handleStatusChange('bitstream', true); + expect(component.bitstreamAccessCmp.enable).toHaveBeenCalled(); + + component.handleStatusChange('bitstream', false); + expect(component.bitstreamAccessCmp.disable).toHaveBeenCalled(); + }); + + it('should handle the status change for item access', () => { + component.itemAccessCmp.enable = jasmine.createSpy('enable'); + component.itemAccessCmp.disable = jasmine.createSpy('disable'); + + component.handleStatusChange('item', true); + expect(component.itemAccessCmp.enable).toHaveBeenCalled(); + + component.handleStatusChange('item', false); + expect(component.itemAccessCmp.disable).toHaveBeenCalled(); + }); + + it('should open the select bitstreams modal', () => { + const modalService = TestBed.inject(NgbModal); + + component.openSelectBitstreamsModal(new Item()); + expect(modalService.open).toHaveBeenCalled(); + }); + + it('should unsubscribe and deselect all on component destroy', () => { + component.ngOnDestroy(); + expect(component.selectableListService.deselectAll).toHaveBeenCalledWith( + ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID + ); + }); +}); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index a97859a599..b13943e07a 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -58,7 +58,7 @@ export class AccessControlFormContainerComponent impleme constructor( private bulkAccessConfigService: BulkAccessConfigDataService, private bulkAccessControlService: BulkAccessControlService, - private selectableListService: SelectableListService, + public selectableListService: SelectableListService, protected modalService: NgbModal, private cdr: ChangeDetectorRef ) {} From 5331b43a62b15a8e86dab4e0a4afae381179c411 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 7 Jun 2023 18:08:21 +0200 Subject: [PATCH 763/833] [DURACOM-152] Fixed read-only visibility for submission form fields --- .../models/ds-dynamic-input.model.ts | 1 + .../onebox/dynamic-onebox.component.html | 2 ++ .../models/onebox/dynamic-onebox.component.ts | 3 +++ ...dynamic-scrollable-dropdown.component.html | 7 ++++-- ...dynamic-scrollable-dropdown.component.scss | 4 +++ .../form/builder/models/form-field.model.ts | 4 +++ .../builder/parsers/concat-field-parser.ts | 6 +++++ .../form/builder/parsers/field-parser.ts | 17 +++++++++++-- .../builder/parsers/onebox-field-parser.ts | 11 ++++---- .../shared/form/builder/parsers/row-parser.ts | 25 ++++++++++++++++--- 10 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts index edbd5710d2..3c6abaa851 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model.ts @@ -55,6 +55,7 @@ export class DsDynamicInputModel extends DynamicInputModel { this.metadataFields = config.metadataFields; this.hint = config.hint; this.readOnly = config.readOnly; + this.disabled = config.readOnly; this.value = config.value; this.relationship = config.relationship; this.submissionId = config.submissionId; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html index e6b0cf508f..3c19ecda13 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html @@ -39,6 +39,7 @@ [ngbTypeahead]="search" [placeholder]="model.placeholder" [readonly]="model.readOnly" + [disabled]="model.readOnly" [resultTemplate]="rt" [type]="model.inputType" [(ngModel)]="currentValue" @@ -63,6 +64,7 @@ [name]="model.name" [placeholder]="model.placeholder" [readonly]="true" + [disabled]="model.readOnly" [type]="model.inputType" [value]="currentValue?.display" (focus)="onFocus($event)" diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts index db278716e1..2ff4256404 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts @@ -216,6 +216,9 @@ export class DsDynamicOneboxComponent extends DsDynamicVocabularyComponent imple * @param event The click event fired */ openTree(event) { + if (this.model.readOnly) { + return; + } event.preventDefault(); event.stopImmediatePropagation(); this.subs.push(this.vocabulary$.pipe( diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html index 8a4d502287..3a75fe1037 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html @@ -3,8 +3,10 @@ role="combobox" [attr.aria-label]="model.label" [attr.aria-owns]="'combobox_' + id + '_listbox'"> - + + = this.initModel(newId + QUALDROP_METADATA_SUFFIX, label, false, false); selectModelConfig.hint = null; this.setOptions(selectModelConfig); if (isNotEmpty(fieldValue)) { selectModelConfig.value = fieldValue.metadata; } - inputSelectGroup.group.push(new DynamicSelectModel(selectModelConfig, clsSelect)); - - const inputModelConfig: DsDynamicInputModelConfig = this.initModel(newId + QUALDROP_VALUE_SUFFIX, label, false, false); - inputModelConfig.hint = null; - this.setValues(inputModelConfig, fieldValue); + selectModelConfig.disabled = inputModelConfig.readOnly; inputSelectGroup.readOnly = selectModelConfig.disabled && inputModelConfig.readOnly; + inputSelectGroup.group.push(new DynamicSelectModel(selectModelConfig, clsSelect)); inputSelectGroup.group.push(new DsDynamicInputModel(inputModelConfig, clsInput)); return new DynamicQualdropModel(inputSelectGroup, clsGroup); diff --git a/src/app/shared/form/builder/parsers/row-parser.ts b/src/app/shared/form/builder/parsers/row-parser.ts index 2818e37b25..6602e53714 100644 --- a/src/app/shared/form/builder/parsers/row-parser.ts +++ b/src/app/shared/form/builder/parsers/row-parser.ts @@ -1,9 +1,10 @@ +import { SectionVisibility } from './../../../../submission/objects/section-visibility.model'; import { Injectable, Injector } from '@angular/core'; import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, DynamicFormGroupModelConfig } from '@ng-dynamic-forms/core'; import uniqueId from 'lodash/uniqueId'; -import { isEmpty } from '../../../empty.util'; +import { isEmpty, isNotEmpty } from '../../../empty.util'; import { DynamicRowGroupModel } from '../ds-dynamic-form-ui/models/ds-dynamic-row-group-model'; import { FormFieldModel } from '../models/form-field.model'; import { CONFIG_DATA, FieldParser, INIT_FORM_VALUES, PARSER_OPTIONS, SUBMISSION_ID } from './field-parser'; @@ -12,6 +13,7 @@ import { ParserOptions } from './parser-options'; import { ParserType } from './parser-type'; import { setLayout } from './parser.utils'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '../ds-dynamic-form-ui/ds-dynamic-form-constants'; +import { VisibilityType } from '../../../../submission/sections/visibility-type'; export const ROW_ID_PREFIX = 'df-row-group-config-'; @@ -118,15 +120,30 @@ export class RowParser { return parsedResult; } - checksFieldScope(fieldScope, submissionScope) { - return (isEmpty(fieldScope) || isEmpty(submissionScope) || fieldScope === submissionScope); + checksFieldScope(fieldScope, submissionScope, visibility: SectionVisibility) { + return (isEmpty(fieldScope) || !this.isHidden(visibility, fieldScope, submissionScope)); + } + + /** + * Check if the field is hidden or not, based on the visibility and the submission scope + * @param visibility The visibility of the field + * @param scope the scope of the field + * @param submissionScope the scope of the submission + * @returns If the field is hidden or not + */ + private isHidden(visibility: SectionVisibility, scope: string, submissionScope: string): boolean { + return isEmpty(visibility) + || (isNotEmpty(visibility) && visibility.main !== VisibilityType.READONLY) + && isNotEmpty(submissionScope) + && (isNotEmpty(scope) + && scope !== submissionScope); } filterScopedFields(fields: FormFieldModel[], submissionScope): FormFieldModel[] { const filteredFields: FormFieldModel[] = []; fields.forEach((field: FormFieldModel) => { // Whether field scope doesn't match the submission scope, skip it - if (this.checksFieldScope(field.scope, submissionScope)) { + if (this.checksFieldScope(field.scope, submissionScope, field.visibility)) { filteredFields.push(field); } }); From 50acff1b598e912fa9b46748b99cad0ec5471e63 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Wed, 7 Jun 2023 12:22:37 -0400 Subject: [PATCH 764/833] Empty the template of local content. --- .../email-request-copy.component.html | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html index 072f4d4a52..e69de29bb2 100644 --- a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.html @@ -1,14 +0,0 @@ - - - - - TODO supply a title - - - - -
    TODO write content
    - - From b44acd68eea20ce3876edecf6962e342dfe63b3e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 8 Jun 2023 09:52:25 +0200 Subject: [PATCH 765/833] CST-9639: Fix maxStartDate issue --- .../access-control-array-form.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index efe2259328..117cc8d388 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -39,7 +39,7 @@ placeholder="yyyy-mm-dd" [(ngModel)]="control.startDate" name="startDate-{{control.id}}" - [minDate]="control.maxStartDate | toDate" + [maxDate]="control.maxStartDate | toDate" ngbDatepicker #d="ngbDatepicker" /> From 16ff75c92e60e1073f1a9d846e97d23044a73a07 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 8 Jun 2023 10:23:33 +0200 Subject: [PATCH 766/833] CST-9639: Fix calendar placement --- .../access-control-array-form.component.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 117cc8d388..cd56904bd7 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -41,6 +41,7 @@ name="startDate-{{control.id}}" [maxDate]="control.maxStartDate | toDate" ngbDatepicker + placement="top-start top-end bottom-start bottom-end" #d="ngbDatepicker" />
    @@ -69,6 +70,7 @@ name="endDate-{{control.id}}" [maxDate]="control.maxEndDate | toDate" ngbDatepicker + placement="top-start top-end bottom-start bottom-end" #d1="ngbDatepicker" />
    From 02bb7db1190c54be1f2a00608c624fdf67804f23 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 8 Jun 2023 13:15:02 +0200 Subject: [PATCH 767/833] [CST-5729] Fix issue with undefined link type --- .../bitstream-download-page.component.ts | 1 + .../item-page/simple/item-page.component.spec.ts | 13 +++++++++---- src/app/item-page/simple/item-page.component.ts | 15 ++++++++++----- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 4d05511ca0..cf8d8e7767 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -107,6 +107,7 @@ export class BitstreamDownloadPageComponent implements OnInit { let links = ''; signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' '); links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; }); diff --git a/src/app/item-page/simple/item-page.component.spec.ts b/src/app/item-page/simple/item-page.component.spec.ts index dfba4bd235..b3202108f4 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -49,7 +49,7 @@ const mocklink = { const mocklink2 = { href: 'http://test2.org', rel: 'rel2', - type: 'type2' + type: undefined }; const mockSignpostingLinks: SignpostingLink[] = [mocklink, mocklink2]; @@ -176,13 +176,18 @@ describe('ItemPageComponent', () => { // Check if linkHeadService.addTag() was called with the correct arguments expect(linkHeadService.addTag).toHaveBeenCalledTimes(mockSignpostingLinks.length); - expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[0] as LinkDefinition); - expect(linkHeadService.addTag).toHaveBeenCalledWith(mockSignpostingLinks[1] as LinkDefinition); + let expected: LinkDefinition = mockSignpostingLinks[0] as LinkDefinition; + expect(linkHeadService.addTag).toHaveBeenCalledWith(expected); + expected = { + href: 'http://test2.org', + rel: 'rel2' + }; + expect(linkHeadService.addTag).toHaveBeenCalledWith(expected); }); it('should set Link header on the server', () => { - expect(serverResponseService.setHeader).toHaveBeenCalledWith('Link', ' ; rel="rel1" ; type="type1" , ; rel="rel2" ; type="type2" '); + expect(serverResponseService.setHeader).toHaveBeenCalledWith('Link', ' ; rel="rel1" ; type="type1" , ; rel="rel2" '); }); }); diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index a11cb22883..b9be6bebfb 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -20,7 +20,7 @@ import { ServerResponseService } from '../../core/services/server-response.servi import { SignpostingDataService } from '../../core/data/signposting-data.service'; import { SignpostingLink } from '../../core/data/signposting-links.model'; import { isNotEmpty } from '../../shared/empty.util'; -import { LinkHeadService } from '../../core/services/link-head.service'; +import { LinkDefinition, LinkHeadService } from '../../core/services/link-head.service'; /** * This component renders a simple item page. @@ -111,12 +111,17 @@ export class ItemPageComponent implements OnInit, OnDestroy { this.signpostingLinks = signpostingLinks; signpostingLinks.forEach((link: SignpostingLink) => { - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; - this.linkHeadService.addTag({ + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' '); + let tag: LinkDefinition = { href: link.href, - type: link.type, rel: link.rel - }); + }; + if (isNotEmpty(link.type)) { + tag = Object.assign(tag, { + type: link.type + }); + } + this.linkHeadService.addTag(tag); }); if (isPlatformServer(this.platformId)) { From 56cba82c2df9e2fd2cd9816db7c5fe7a2dfe419a Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 8 Jun 2023 14:16:04 +0200 Subject: [PATCH 768/833] 101289: intermediate commit for test issues --- .../edit-bitstream-page.component.spec.ts | 140 ++++++++++-------- .../edit-bitstream-page.component.ts | 31 ++-- 2 files changed, 91 insertions(+), 80 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 04ab4e47b0..3be3297880 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -24,8 +24,7 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { Item } from '../../core/shared/item.model'; import { MetadataValueFilter } from '../../core/shared/metadata.models'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { Bundle } from '../../core/shared/bundle.model'; -import { BundleDataService } from '../../core/data/bundle-data.service'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); @@ -34,6 +33,7 @@ const successNotification: INotification = new Notification('id', NotificationTy let notificationsService: NotificationsService; let formService: DynamicFormService; let bitstreamService: BitstreamDataService; +let primaryBitstreamService: PrimaryBitstreamService; let bitstreamFormatService: BitstreamFormatDataService; let dsoNameService: DSONameService; let bitstream: Bitstream; @@ -41,23 +41,19 @@ let bitstreamID: string; let selectedFormat: BitstreamFormat; let allFormats: BitstreamFormat[]; let router: Router; -let bundleDataService; -let bundleWithCurrentPrimary: Bundle; -let bundleWithDifferentPrimary: Bundle; -let bundleWithNoPrimary: Bundle; - +let currentPrimary: string; +let differentPrimary: string; +let bundle; let comp: EditBitstreamPageComponent; let fixture: ComponentFixture; -describe('EditBitstreamPageComponent', () => { +fdescribe('EditBitstreamPageComponent', () => { beforeEach(() => { bitstreamID = 'current-bitstream-id'; - bundleWithCurrentPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': bitstreamID }); - bundleWithDifferentPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': '12345-abcde-54321-edcba' }); - bundleWithNoPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': null }); - bundleDataService = jasmine.createSpyObj('BundleDataService', ['patch']); - bundleDataService.patch.and.callFake((a, b) => createSuccessfulRemoteDataObject$(a)); + currentPrimary = bitstreamID; + differentPrimary = '12345-abcde-54321-edcba'; + allFormats = [ Object.assign({ id: '1', @@ -116,12 +112,47 @@ describe('EditBitstreamPageComponent', () => { success: successNotification } ); + + bundle = { + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, + item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { + uuid: 'some-uuid', + firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { + return undefined; + }, + })) + }; + + const result = createSuccessfulRemoteDataObject$(bundle); + primaryBitstreamService = jasmine.createSpyObj('PrimaryBitstreamService', + { + put: result, + create: result, + delete: result, + }); + }); describe('EditBitstreamPageComponent no IIIF fields', () => { beforeEach(waitForAsync(() => { - + bundle = { + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, + item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { + uuid: 'some-uuid', + firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { + return undefined; + }, + })) + }; const bundleName = 'ORIGINAL'; bitstream = Object.assign(new Bitstream(), { @@ -143,17 +174,11 @@ describe('EditBitstreamPageComponent', () => { _links: { self: 'bitstream-selflink' }, - bundle: createSuccessfulRemoteDataObject$({ - item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { - uuid: 'some-uuid', - firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { - return undefined; - }, - })) - }) + bundle: createSuccessfulRemoteDataObject$(bundle) }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), + findByHref: createSuccessfulRemoteDataObject$(bitstream), update: createSuccessfulRemoteDataObject$(bitstream), updateFormat: createSuccessfulRemoteDataObject$(bitstream), commitUpdates: {}, @@ -182,7 +207,7 @@ describe('EditBitstreamPageComponent', () => { { provide: BitstreamDataService, useValue: bitstreamService }, { provide: DSONameService, useValue: dsoNameService }, { provide: BitstreamFormatDataService, useValue: bitstreamFormatService }, - { provide: BundleDataService, useValue: bundleDataService }, + { provide: PrimaryBitstreamService, useValue: primaryBitstreamService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -198,7 +223,7 @@ describe('EditBitstreamPageComponent', () => { spyOn(router, 'navigate'); }); - describe('on startup', () => { + fdescribe('on startup', () => { let rawForm; beforeEach(() => { @@ -222,7 +247,7 @@ describe('EditBitstreamPageComponent', () => { }); describe('when the bitstream is the primary bitstream on the bundle', () => { beforeEach(() => { - (comp as any).bundle = bundleWithCurrentPrimary; + (comp as any).primaryBitstreamUUID = currentPrimary; comp.setForm(); rawForm = comp.formGroup.getRawValue(); @@ -233,7 +258,7 @@ describe('EditBitstreamPageComponent', () => { }); describe('when the bitstream is not the primary bitstream on the bundle', () => { beforeEach(() => { - (comp as any).bundle = bundleWithDifferentPrimary; + (comp as any).primaryBitstreamUUID = differentPrimary; comp.setForm(); rawForm = comp.formGroup.getRawValue(); }); @@ -263,38 +288,23 @@ describe('EditBitstreamPageComponent', () => { describe('from a different primary bitstream', () => { beforeEach(() => { - (comp as any).bundle = bundleWithDifferentPrimary; + (comp as any).primaryBitstreamUUID = differentPrimary; comp.onSubmit(); }); - it('should call patch with a replace operation', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithDifferentPrimary, [jasmine.objectContaining({ - op: 'replace' - })]); - }); - - it('should call patch with the correct bitstream uuid', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithDifferentPrimary, [jasmine.objectContaining({ - value: bitstreamID - })]); + it('should call put with the correct bitstream on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.put).toHaveBeenCalledWith(jasmine.objectContaining({uuid: currentPrimary}), bundle); }); }); + describe('from no primary bitstream', () => { beforeEach(() => { - (comp as any).bundle = bundleWithNoPrimary; + (comp as any).primaryBitstreamUUID = null; comp.onSubmit(); }); - it('should call patch with an add operation', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithNoPrimary, [jasmine.objectContaining({ - op: 'add' - })]); - }); - - it('should call patch with the correct bitstream uuid', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithNoPrimary, [jasmine.objectContaining({ - value: bitstreamID - })]); + it('should call create with the correct bitstream on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.create).toHaveBeenCalledWith(jasmine.objectContaining({uuid: currentPrimary}), bundle); }); }); }); @@ -306,39 +316,42 @@ describe('EditBitstreamPageComponent', () => { describe('from the current bitstream', () => { beforeEach(() => { - (comp as any).bundle = bundleWithCurrentPrimary; + (comp as any).primaryBitstreamUUID = currentPrimary; comp.onSubmit(); }); - it('should call patch with a remove operation', () => { - expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithCurrentPrimary, [jasmine.objectContaining({ - op: 'remove' - })]); + it('should call delete on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.delete).toHaveBeenCalledWith(jasmine.objectContaining(bundle)); }); }); }); }); - describe('when the primaryBitstream did not changed', () => { + describe('when the primaryBitstream did not change', () => { describe('the current bitstream stayed the primary bitstream', () => { beforeEach(() => { const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: true } }); spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); - (comp as any).bundle = bundleWithCurrentPrimary; + (comp as any).primaryBitstreamUUID = currentPrimary; comp.onSubmit(); }); - it('should not call patch on the bundle data service', () => { - expect(bundleDataService.patch).not.toHaveBeenCalled(); + it('should not call anything on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.put).not.toHaveBeenCalled(); + expect(primaryBitstreamService.delete).not.toHaveBeenCalled(); + expect(primaryBitstreamService.create).not.toHaveBeenCalled(); }); }); + describe('the bitstream was not and did not become the primary bitstream', () => { beforeEach(() => { const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: false } }); spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); - (comp as any).bundle = bundleWithDifferentPrimary; + (comp as any).primaryBitstreamUUID = differentPrimary; comp.onSubmit(); }); - it('should not call patch on the bundle data service', () => { - expect(bundleDataService.patch).not.toHaveBeenCalled(); + it('should not call anything on the PrimaryBitstreamService', () => { + expect(primaryBitstreamService.put).not.toHaveBeenCalled(); + expect(primaryBitstreamService.delete).not.toHaveBeenCalled(); + expect(primaryBitstreamService.create).not.toHaveBeenCalled(); }); }); }); @@ -451,6 +464,7 @@ describe('EditBitstreamPageComponent', () => { }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), + findByHref: createSuccessfulRemoteDataObject$(bitstream), update: createSuccessfulRemoteDataObject$(bitstream), updateFormat: createSuccessfulRemoteDataObject$(bitstream), commitUpdates: {}, @@ -477,7 +491,7 @@ describe('EditBitstreamPageComponent', () => { {provide: BitstreamDataService, useValue: bitstreamService}, {provide: DSONameService, useValue: dsoNameService}, {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, - { provide: BundleDataService, useValue: bundleDataService }, + { provide: PrimaryBitstreamService, useValue: primaryBitstreamService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -595,7 +609,7 @@ describe('EditBitstreamPageComponent', () => { {provide: BitstreamDataService, useValue: bitstreamService}, {provide: DSONameService, useValue: dsoNameService}, {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, - { provide: BundleDataService, useValue: bundleDataService }, + { provide: PrimaryBitstreamService, useValue: primaryBitstreamService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -617,7 +631,7 @@ describe('EditBitstreamPageComponent', () => { rawForm = comp.formGroup.getRawValue(); }); - it('should NOT set isIIIF to true', () => { + it('should NOT set is IIIF to true', () => { expect(comp.isIIIF).toBeFalse(); }); it('should put the \"IIIF Label\" input not to be shown', () => { diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 8b3dad3c1c..25c7f41868 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ActivatedRoute, Router } from '@angular/router'; -import { map, switchMap, tap, filter } from 'rxjs/operators'; +import { filter, map, switchMap, tap } from 'rxjs/operators'; import { combineLatest, combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { DynamicFormControlModel, DynamicFormGroupModel, DynamicFormLayout, DynamicFormService, DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; import { UntypedFormGroup } from '@angular/forms'; @@ -14,7 +14,7 @@ import { NotificationsService } from '../../shared/notifications/notifications.s import { BitstreamFormatDataService } from '../../core/data/bitstream-format-data.service'; import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../../core/shared/bitstream-format-support-level'; -import { hasValue, isEmpty, isNotEmpty, hasValueOperator } from '../../shared/empty.util'; +import { hasValue, hasValueOperator, isEmpty, isNotEmpty } from '../../shared/empty.util'; import { Metadata } from '../../core/shared/metadata.utils'; import { Location } from '@angular/common'; import { RemoteData } from '../../core/data/remote-data'; @@ -25,10 +25,7 @@ import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { Item } from '../../core/shared/item.model'; import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; -import { BundleDataService } from '../../core/data/bundle-data.service'; -import { Operation } from 'fast-json-patch'; import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; -import { hasSucceeded } from '../../core/data/request-entry-state.model'; @Component({ selector: 'ds-edit-bitstream-page', @@ -374,12 +371,6 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { */ private bundle: Bundle; - /** - * Path to patch primary bitstream on the bundle - * @private - */ - private readonly primaryBitstreamPath = '/primaryBitstreamUUID'; - constructor(private route: ActivatedRoute, private router: Router, private changeDetectorRef: ChangeDetectorRef, @@ -391,7 +382,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { private notificationsService: NotificationsService, private bitstreamFormatService: BitstreamFormatDataService, private primaryBitstreamService: PrimaryBitstreamService, - private bundleService: BundleDataService) { + ) { } /** @@ -404,33 +395,39 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.itemId = this.route.snapshot.queryParams.itemId; this.entityType = this.route.snapshot.queryParams.entityType; - this.bitstreamRD$ = this.route.data.pipe(map((data) => data.bitstream)); + this.bitstreamRD$ = this.route.data.pipe(map((data: any) => data.bitstream)); this.bitstreamFormatsRD$ = this.bitstreamFormatService.findAll(this.findAllOptions); const bitstream$ = this.bitstreamRD$.pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload() + getRemoteDataPayload(), + tap(t => console.log(t)), ); const allFormats$ = this.bitstreamFormatsRD$.pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload() + getRemoteDataPayload(), + tap(t => console.log(t)), ); const bundle$ = bitstream$.pipe( switchMap((bitstream: Bitstream) => bitstream.bundle), getFirstSucceededRemoteDataPayload(), + tap(t => console.log(t)), ); const primaryBitstream$ = bundle$.pipe( hasValueOperator(), + tap(t => console.log(t._links.primaryBitstream.href)), switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href)), - getFirstSucceededRemoteDataPayload() + getFirstSucceededRemoteDataPayload(), + tap(t => console.log(t)), ); const item$ = bundle$.pipe( switchMap((bundle: Bundle) => bundle.item), - getFirstSucceededRemoteDataPayload() + getFirstSucceededRemoteDataPayload(), + tap(t => console.log(t)), ); this.subs.push( observableCombineLatest( From 84f4f017fbb5068292dc68eb6f2efa4c5bdc33f3 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 8 Jun 2023 14:52:29 +0200 Subject: [PATCH 769/833] CST-9639: Fix error when modal closes --- .../access-control-form-container.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index b13943e07a..69a598f7ce 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -147,7 +147,7 @@ export class AccessControlFormContainerComponent impleme concatMap(() => this.selectableListService.getSelectableList(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID)), take(1) ).subscribe((list) => { - this.state.bitstream.selectedBitstreams = list.selection; + this.state.bitstream.selectedBitstreams = list?.selection || []; this.cdr.detectChanges(); }); } From d4491083954ab4419a93e8a04318c58ac4f2c09f Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 8 Jun 2023 15:23:02 +0200 Subject: [PATCH 770/833] [CST-9636] revert changes to object-list.component --- .../browse/bulk-access-browse.component.html | 34 +++++++---- .../object-list/object-list.component.html | 58 ++++++------------- .../object-list/object-list.component.ts | 5 -- .../themed-object-list.component.ts | 6 -- 4 files changed, 41 insertions(+), 62 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html index 6ef45cdd5b..c716aedb8b 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -34,16 +34,30 @@ {{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }} - + +
      +
    • + + +
    • +
    +
    diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html index 541a4794b0..b8712b85c5 100644 --- a/src/app/shared/object-list/object-list.component.html +++ b/src/app/shared/object-list/object-list.component.html @@ -16,46 +16,22 @@ (prev)="goPrev()" (next)="goNext()">
      - -
    • - - - -
    • -
      - -
    • - - - -
    • -
      +
    • + + + +
    diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts index 72bff54f59..5161b75459 100644 --- a/src/app/shared/object-list/object-list.component.ts +++ b/src/app/shared/object-list/object-list.component.ts @@ -76,11 +76,6 @@ export class ObjectListComponent { */ @Input() importConfig: { buttonLabel: string }; - /** - * If true the object list provided needs to be paginated using the `paginate` pipe - */ - @Input() listToPaginate = false; - /** * Whether or not the pagination should be rendered as simple previous and next buttons instead of the normal pagination */ diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts index 04a95de1cb..14ddf474ad 100644 --- a/src/app/shared/object-list/themed-object-list.component.ts +++ b/src/app/shared/object-list/themed-object-list.component.ts @@ -44,11 +44,6 @@ export class ThemedObjectListComponent extends ThemedComponent Date: Thu, 8 Jun 2023 15:44:30 +0200 Subject: [PATCH 771/833] fix issue where iiif tests would fail --- .../edit-bitstream-page.component.spec.ts | 19 +++++++++++++++---- .../edit-bitstream-page.component.ts | 6 ------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 3be3297880..2e8c6368c1 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -47,7 +47,7 @@ let bundle; let comp: EditBitstreamPageComponent; let fixture: ComponentFixture; -fdescribe('EditBitstreamPageComponent', () => { +describe('EditBitstreamPageComponent', () => { beforeEach(() => { bitstreamID = 'current-bitstream-id'; @@ -223,7 +223,7 @@ fdescribe('EditBitstreamPageComponent', () => { spyOn(router, 'navigate'); }); - fdescribe('on startup', () => { + describe('on startup', () => { let rawForm; beforeEach(() => { @@ -454,13 +454,18 @@ fdescribe('EditBitstreamPageComponent', () => { self: 'bitstream-selflink' }, bundle: createSuccessfulRemoteDataObject$({ + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { uuid: 'some-uuid', firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { return 'True'; } })) - }) + }), }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), @@ -574,16 +579,22 @@ fdescribe('EditBitstreamPageComponent', () => { self: 'bitstream-selflink' }, bundle: createSuccessfulRemoteDataObject$({ + _links: { + primaryBitstream: { + href: 'bundle-selflink' + } + }, item: createSuccessfulRemoteDataObject$(Object.assign(new Item(), { uuid: 'some-uuid', firstMetadataValue(keyOrKeys: string | string[], valueFilter?: MetadataValueFilter): string { return 'True'; } })) - }) + }), }); bitstreamService = jasmine.createSpyObj('bitstreamService', { findById: createSuccessfulRemoteDataObject$(bitstream), + findByHref: createSuccessfulRemoteDataObject$(bitstream), update: createSuccessfulRemoteDataObject$(bitstream), updateFormat: createSuccessfulRemoteDataObject$(bitstream), commitUpdates: {}, diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 25c7f41868..0d5e1eecc1 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -401,33 +401,27 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { const bitstream$ = this.bitstreamRD$.pipe( getFirstSucceededRemoteData(), getRemoteDataPayload(), - tap(t => console.log(t)), ); const allFormats$ = this.bitstreamFormatsRD$.pipe( getFirstSucceededRemoteData(), getRemoteDataPayload(), - tap(t => console.log(t)), ); const bundle$ = bitstream$.pipe( switchMap((bitstream: Bitstream) => bitstream.bundle), getFirstSucceededRemoteDataPayload(), - tap(t => console.log(t)), ); const primaryBitstream$ = bundle$.pipe( hasValueOperator(), - tap(t => console.log(t._links.primaryBitstream.href)), switchMap((bundle: Bundle) => this.bitstreamService.findByHref(bundle._links.primaryBitstream.href)), getFirstSucceededRemoteDataPayload(), - tap(t => console.log(t)), ); const item$ = bundle$.pipe( switchMap((bundle: Bundle) => bundle.item), getFirstSucceededRemoteDataPayload(), - tap(t => console.log(t)), ); this.subs.push( observableCombineLatest( From a936878c9673dc79d98404939595cf5c6b2f3ded Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 8 Jun 2023 16:02:33 +0200 Subject: [PATCH 772/833] 101289: tests --- .../edit-bitstream-page.component.spec.ts | 2 +- .../edit-bitstream-page.component.ts | 2 +- .../data/primary-bitstream.service.spec.ts | 158 ++++++++++++++++++ ...ervice.ts => primary-bitstream.service.ts} | 6 +- 4 files changed, 163 insertions(+), 5 deletions(-) create mode 100644 src/app/core/data/primary-bitstream.service.spec.ts rename src/app/core/data/{primary-bitstream-data.service.ts => primary-bitstream.service.ts} (97%) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 2e8c6368c1..b83f2b9664 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -24,7 +24,7 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { Item } from '../../core/shared/item.model'; import { MetadataValueFilter } from '../../core/shared/metadata.models'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream.service'; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 0d5e1eecc1..cdc905d456 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -25,7 +25,7 @@ import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { Item } from '../../core/shared/item.model'; import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; -import { PrimaryBitstreamService } from '../../core/data/primary-bitstream-data.service'; +import { PrimaryBitstreamService } from '../../core/data/primary-bitstream.service'; @Component({ selector: 'ds-edit-bitstream-page', diff --git a/src/app/core/data/primary-bitstream.service.spec.ts b/src/app/core/data/primary-bitstream.service.spec.ts new file mode 100644 index 0000000000..93e9882d04 --- /dev/null +++ b/src/app/core/data/primary-bitstream.service.spec.ts @@ -0,0 +1,158 @@ +import { ObjectCacheService } from '../cache/object-cache.service'; +import { RequestService } from './request.service'; +import { Bitstream } from '../shared/bitstream.model'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { getMockRequestService } from '../../shared/mocks/request.service.mock'; +import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; +import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; +import { getMockRemoteDataBuildService } from '../../shared/mocks/remote-data-build.service.mock'; +import { PrimaryBitstreamService } from './primary-bitstream.service'; +import { BundleDataService } from './bundle-data.service'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { CreateRequest, DeleteRequest, PostRequest, PutRequest } from './request.models'; +import { createFailedRemoteDataObject, createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { Bundle } from '../shared/bundle.model'; +import { getTestScheduler } from 'jasmine-marbles'; +import { of as observableOf } from 'rxjs'; + +fdescribe('PrimaryBitstreamService', () => { + let service: PrimaryBitstreamService; + let objectCache: ObjectCacheService; + let requestService: RequestService; + let halService: HALEndpointService; + let rdbService: RemoteDataBuildService; + let notificationService: NotificationsService; + let bundleDataService: BundleDataService; + + const bitstream = Object.assign(new Bitstream(), { + uuid: 'fake-bitstream', + _links: { + self: { href: 'fake-bitstream-self' } + } + }); + + const bundle = Object.assign(new Bundle(), { + uuid: 'fake-bundle', + _links: { + self: { href: 'fake-bundle-self' }, + primaryBitstream: { href: 'fake-primary-bitstream-self' }, + } + }); + + const url = 'fake-bitstream-url'; + + beforeEach(() => { + objectCache = jasmine.createSpyObj('objectCache', { + remove: jasmine.createSpy('remove') + }); + requestService = getMockRequestService(); + halService = Object.assign(new HALEndpointServiceStub(url)); + + rdbService = getMockRemoteDataBuildService(); + notificationService = new NotificationsServiceStub() as any; + bundleDataService = jasmine.createSpyObj('bundleDataService', {'findByHref': createSuccessfulRemoteDataObject$(bundle)}); + service = new PrimaryBitstreamService(requestService, rdbService, objectCache, halService, notificationService, bundleDataService); + }); + + describe('getHttpOptions', () => { + it('should return a HttpOptions object with text/url-list Context-Type header', () => { + const result = (service as any).getHttpOptions() + expect(result.headers.get('Content-Type')).toEqual('text/uri-list'); + }); + }); + + describe('createAndSendRequest', () => { + const testId = '12345-12345'; + const options = {}; + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + + beforeEach(() => { + spyOn(service as any, 'getHttpOptions').and.returnValue(options); + (requestService.generateRequestId as jasmine.Spy).and.returnValue(testId); + spyOn(rdbService, 'buildFromRequestUUID').and.returnValue(observableOf(testResult)); + }); + + it('should return a Request object with the given constructor and the given parameters', () => { + const result = (service as any).createAndSendRequest(CreateRequest, url, bitstream.self); + const request = new CreateRequest(testId, url, bitstream.self, options); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect(requestService.send).toHaveBeenCalledWith(request); + expect(rdbService.buildFromRequestUUID).toHaveBeenCalledWith(testId); + }); + }); + + describe('create', () => { + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + }); + + it('should delegate the call to createAndSendRequest', () => { + const result = service.create(bitstream, bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + PostRequest, + bundle._links.primaryBitstream.href, + bitstream.self + ); + }); + }); + describe('put', () => { + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + }); + + it('should delegate the call to createAndSendRequest and return the requested bundle', () => { + const result = service.put(bitstream, bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + PutRequest, + bundle._links.primaryBitstream.href, + bitstream.self + ); + }); + }); + describe('delete', () => { + describe('when the delete request succeeds', () => { + const testResult = createSuccessfulRemoteDataObject(new Bundle()); + const bundleServiceResult = createSuccessfulRemoteDataObject(bundle); + + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + (bundleDataService.findByHref as jasmine.Spy).and.returnValue(observableOf(bundleServiceResult)); + }); + + it('should delegate the call to createAndSendRequest', () => { + const result = service.delete(bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + DeleteRequest, + bundle._links.primaryBitstream.href, + ); + }); + }); + describe('when the delete request fails', () => { + const testResult = createFailedRemoteDataObject(); + + beforeEach(() => { + spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + }); + + it('should delegate the call to createAndSendRequest and retrieve the bundle from the rdbService', () => { + const result = service.delete(bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundle }); + + expect((service as any).createAndSendRequest).toHaveBeenCalledWith( + DeleteRequest, + bundle._links.primaryBitstream.href, + ); + }); + }); + }); +}); diff --git a/src/app/core/data/primary-bitstream-data.service.ts b/src/app/core/data/primary-bitstream.service.ts similarity index 97% rename from src/app/core/data/primary-bitstream-data.service.ts rename to src/app/core/data/primary-bitstream.service.ts index 6380a6f148..5c1c3c52ac 100644 --- a/src/app/core/data/primary-bitstream-data.service.ts +++ b/src/app/core/data/primary-bitstream.service.ts @@ -97,7 +97,7 @@ export class PrimaryBitstreamService { } /** - * Update an exiting primaryBitstream + * Update an existing primaryBitstream * * @param primaryBitstream The object to update * @param bundle The bundle to update it on @@ -111,7 +111,7 @@ export class PrimaryBitstreamService { } /** - * Delete an exiting primaryBitstream + * Delete an existing primaryBitstream * * @param bundle The bundle to delete it from */ @@ -125,7 +125,7 @@ export class PrimaryBitstreamService { if (rd.hasSucceeded) { return this.bundleDataService.findByHref(bundle.self, false); } else { - [bundle]; + return this.rdbService.buildSingle(bundle.self); } }) ); From 9d2fed4186186e22fab2b72a07e200c8c6a004de Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 8 Jun 2023 16:42:25 +0200 Subject: [PATCH 773/833] 101289: Fixed test issues --- .../edit-bitstream-page.component.ts | 2 +- .../data/primary-bitstream.service.spec.ts | 45 ++++++++++++++----- .../core/data/primary-bitstream.service.ts | 6 +-- src/app/core/shared/bundle.model.ts | 2 +- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index cdc905d456..b77d2151a9 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -612,7 +612,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { bundle$ = completedBundleRd$.pipe( map((bundleRd: RemoteData) => { if (bundleRd.hasSucceeded) { - return bundleRd.payload + return bundleRd.payload; } else { return this.bundle; } diff --git a/src/app/core/data/primary-bitstream.service.spec.ts b/src/app/core/data/primary-bitstream.service.spec.ts index 93e9882d04..00d6d7f03c 100644 --- a/src/app/core/data/primary-bitstream.service.spec.ts +++ b/src/app/core/data/primary-bitstream.service.spec.ts @@ -16,7 +16,7 @@ import { Bundle } from '../shared/bundle.model'; import { getTestScheduler } from 'jasmine-marbles'; import { of as observableOf } from 'rxjs'; -fdescribe('PrimaryBitstreamService', () => { +describe('PrimaryBitstreamService', () => { let service: PrimaryBitstreamService; let objectCache: ObjectCacheService; let requestService: RequestService; @@ -57,7 +57,7 @@ fdescribe('PrimaryBitstreamService', () => { describe('getHttpOptions', () => { it('should return a HttpOptions object with text/url-list Context-Type header', () => { - const result = (service as any).getHttpOptions() + const result = (service as any).getHttpOptions(); expect(result.headers.get('Content-Type')).toEqual('text/uri-list'); }); }); @@ -118,9 +118,20 @@ fdescribe('PrimaryBitstreamService', () => { }); }); describe('delete', () => { + const testBundle = Object.assign(new Bundle(), { + _links: { + self: { + href: 'test-href' + }, + primaryBitstream: { + href: 'test-primaryBitstream-href' + } + } + }); + describe('when the delete request succeeds', () => { const testResult = createSuccessfulRemoteDataObject(new Bundle()); - const bundleServiceResult = createSuccessfulRemoteDataObject(bundle); + const bundleServiceResult = createSuccessfulRemoteDataObject(testBundle); beforeEach(() => { spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); @@ -128,30 +139,42 @@ fdescribe('PrimaryBitstreamService', () => { }); it('should delegate the call to createAndSendRequest', () => { - const result = service.delete(bundle); - getTestScheduler().expectObservable(result).toBe('(a|)', { a: testResult }); + const result = service.delete(testBundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundleServiceResult }); + + result.subscribe(); + + expect(bundleDataService.findByHref).toHaveBeenCalledWith(testBundle.self, false); expect((service as any).createAndSendRequest).toHaveBeenCalledWith( DeleteRequest, - bundle._links.primaryBitstream.href, + testBundle._links.primaryBitstream.href, ); }); }); describe('when the delete request fails', () => { const testResult = createFailedRemoteDataObject(); + const bundleServiceResult = createSuccessfulRemoteDataObject(testBundle); beforeEach(() => { spyOn((service as any), 'createAndSendRequest').and.returnValue(observableOf(testResult)); + (bundleDataService.findByHref as jasmine.Spy).and.returnValue(observableOf(bundleServiceResult)); }); - it('should delegate the call to createAndSendRequest and retrieve the bundle from the rdbService', () => { - const result = service.delete(bundle); - getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundle }); - + it('should delegate the call to createAndSendRequest and request the bundle from the bundleDataService', () => { + const result = service.delete(testBundle); + result.subscribe(); expect((service as any).createAndSendRequest).toHaveBeenCalledWith( DeleteRequest, - bundle._links.primaryBitstream.href, + testBundle._links.primaryBitstream.href, ); + expect(bundleDataService.findByHref).toHaveBeenCalledWith(testBundle.self, true); + + }); + + it('should delegate the call to createAndSendRequest and', () => { + const result = service.delete(bundle); + getTestScheduler().expectObservable(result).toBe('(a|)', { a: bundleServiceResult }); }); }); }); diff --git a/src/app/core/data/primary-bitstream.service.ts b/src/app/core/data/primary-bitstream.service.ts index 5c1c3c52ac..646e8271e8 100644 --- a/src/app/core/data/primary-bitstream.service.ts +++ b/src/app/core/data/primary-bitstream.service.ts @@ -122,11 +122,7 @@ export class PrimaryBitstreamService { ).pipe( getAllCompletedRemoteData(), switchMap((rd: RemoteData) => { - if (rd.hasSucceeded) { - return this.bundleDataService.findByHref(bundle.self, false); - } else { - return this.rdbService.buildSingle(bundle.self); - } + return this.bundleDataService.findByHref(bundle.self, rd.hasFailed); }) ); } diff --git a/src/app/core/shared/bundle.model.ts b/src/app/core/shared/bundle.model.ts index f37cd96545..36b7012e47 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/src/app/core/shared/bundle.model.ts @@ -1,4 +1,4 @@ -import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; +import { deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; From daf297b94b61556ddb697b440a35f1a941b127e1 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 9 Jun 2023 11:17:00 +0200 Subject: [PATCH 774/833] 101289: Removed unnecessary data services from primary bitstream service --- src/app/core/data/primary-bitstream.service.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/app/core/data/primary-bitstream.service.ts b/src/app/core/data/primary-bitstream.service.ts index 646e8271e8..488cb5d22e 100644 --- a/src/app/core/data/primary-bitstream.service.ts +++ b/src/app/core/data/primary-bitstream.service.ts @@ -1,7 +1,4 @@ import { Bitstream } from '../shared/bitstream.model'; -import { DeleteDataImpl } from './base/delete-data'; -import { PutDataImpl } from './base/put-data'; -import { CreateDataImpl } from './base/create-data'; import { Injectable } from '@angular/core'; import { RequestService } from './request.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; @@ -11,7 +8,6 @@ import { Observable, switchMap } from 'rxjs'; import { RemoteData } from './remote-data'; import { Bundle } from '../shared/bundle.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; -import { constructIdEndpointDefault } from './base/identifiable-data.service'; import { HttpOptions } from '../dspace-rest/dspace-rest.service'; import { HttpHeaders } from '@angular/common/http'; import { GenericConstructor } from '../shared/generic-constructor'; @@ -24,9 +20,6 @@ import { BundleDataService } from './bundle-data.service'; providedIn: 'root', }) export class PrimaryBitstreamService { - private createData: CreateDataImpl; - private putData: PutDataImpl; - private deleteData: DeleteDataImpl; constructor( protected requestService: RequestService, @@ -36,10 +29,6 @@ export class PrimaryBitstreamService { protected notificationsService: NotificationsService, protected bundleDataService: BundleDataService, ) { - // linkPath can be undefined because we'll only use them to do things "byHref" - this.createData = new CreateDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined); - this.putData = new PutDataImpl(undefined, requestService, rdbService, objectCache, halService, undefined); - this.deleteData = new DeleteDataImpl(undefined, requestService, rdbService, objectCache, halService, notificationsService, undefined, constructIdEndpointDefault); } /** From c4b25653733323812b4531952d0fd98acb906208 Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Fri, 9 Jun 2023 13:39:28 +0200 Subject: [PATCH 775/833] Workaround: don't use form-global data for check Note: we're balancing multiple bugs against eachother here, not ideal! - the diff doesn't catch removed Relationship fields; instead, form reload is triggered by a dspace.entity.type change - if we add the original `this.sectionMetadata.includes(key)` check, we filter out this change and the form fails to update - if we add `relation.*` fields to `this.sectionMetadata`, newly added Relationship entries are duplicated As of this commit, the form _seems_ to work in a stable way, but these issues shoud really investigated in more detail. --- src/app/submission/sections/form/section-form.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 9612db523c..3fa9000039 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -229,8 +229,10 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { const sectionDataToCheck = {}; Object.keys(sectionData).forEach((key) => { - if (this.sectionData.data && hasValue(this.sectionData.data[key]) && this.inCurrentSubmissionScope(key)) { - sectionDataToCheck[key] = this.sectionData.data[key]; + // todo: removing Relationships works due to a bug -- dspace.entity.type is included in sectionData, which is what triggers the update; + // if we use this.sectionMetadata.includes(key), this field is filtered out and removed Relationships won't disappear from the form. + if (this.inCurrentSubmissionScope(key)) { + sectionDataToCheck[key] = sectionData[key]; } }); From 8cc96060ff6b9e8ee59f39f3b2ba8144403f161c Mon Sep 17 00:00:00 2001 From: damian Date: Fri, 9 Jun 2023 16:44:29 +0200 Subject: [PATCH 776/833] Variable name change. --- .../community-list/community-list.component.html | 2 +- src/app/core/shared/collection.model.ts | 4 ++-- src/app/core/shared/community.model.ts | 2 +- .../collection-list-element.component.html | 2 +- .../collection-list-element.component.spec.ts | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 5f940b4405..7f8dcf0c45 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,7 +37,7 @@ {{node.name}} - [{{node.payload.archivedItems}}] + [{{node.payload.archivedItemsCount}}]
    diff --git a/src/app/core/shared/collection.model.ts b/src/app/core/shared/collection.model.ts index 81efc33510..c97c61eceb 100644 --- a/src/app/core/shared/collection.model.ts +++ b/src/app/core/shared/collection.model.ts @@ -16,7 +16,7 @@ import { COMMUNITY } from './community.resource-type'; import { Community } from './community.model'; import { ChildHALResource } from './child-hal-resource.model'; import { HandleObject } from './handle-object.model'; -import {excludeFromEquals} from '../utilities/equals.decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; @typedObject @inheritSerialization(DSpaceObject) @@ -25,7 +25,7 @@ export class Collection extends DSpaceObject implements ChildHALResource, Handle @excludeFromEquals @autoserialize - archivedItems: number; + archivedItemsCount: number; /** * The {@link HALLink}s for this Collection diff --git a/src/app/core/shared/community.model.ts b/src/app/core/shared/community.model.ts index 0bab8cfa22..03b47fb024 100644 --- a/src/app/core/shared/community.model.ts +++ b/src/app/core/shared/community.model.ts @@ -21,7 +21,7 @@ export class Community extends DSpaceObject implements ChildHALResource, HandleO @excludeFromEquals @autoserialize - archivedItems: number; + archivedItemsCount: number; /** * The {@link HALLink}s for this Community diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 1fdb97f17b..68a84a88e5 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -4,7 +4,7 @@ {{object.name}} -[{{object.archivedItems}}] +[{{object.archivedItemsCount}}]
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts index c1d9665bc3..b911bdd2eb 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts @@ -15,7 +15,7 @@ const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection value: 'Test title' } ] - }, archivedItems: 1 + }, archivedItemsCount: 1 }); const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collection(), { @@ -26,7 +26,7 @@ const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collect value: 'Test title' } ] - }, archivedItems: 0 + }, archivedItemsCount: 0 }); @@ -38,7 +38,7 @@ const mockCollectionWithAbstract: Collection = Object.assign(new Collection(), { value: 'Short description' } ] - }, archivedItems: 1 + }, archivedItemsCount: 1 }); const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection(), { @@ -49,7 +49,7 @@ const mockCollectionWithoutAbstract: Collection = Object.assign(new Collection() value: 'Test title' } ] - }, archivedItems: 1 + }, archivedItemsCount: 1 }); describe('CollectionListElementComponent', () => { From 96903d89dedfc6191fc71b5b1b81253783459d74 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 9 Jun 2023 19:24:16 +0200 Subject: [PATCH 777/833] [CST-5729] fix signposting proxy url --- server.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.ts b/server.ts index 282b1ce29a..d64b80b4ab 100644 --- a/server.ts +++ b/server.ts @@ -182,8 +182,8 @@ export function app() { /** * Proxy the linksets */ - router.use('/links**', createProxyMiddleware({ - target: `${environment.rest.baseUrl}/signposting`, + router.use('/signposting**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}`, pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), changeOrigin: true })); From b8d282ebe4ba14765e2cb5d38817934e12f1bb98 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 11 Jun 2023 16:17:14 +0200 Subject: [PATCH 778/833] Fix proxy timeout error for browse by pages --- src/app/browse-by/browse-by-guard.spec.ts | 35 +++++++++++++++-- src/app/browse-by/browse-by-guard.ts | 48 ++++++++++++++--------- 2 files changed, 62 insertions(+), 21 deletions(-) diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index fc483d87e2..7f57c17ac1 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -1,10 +1,10 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; -import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; -import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; +import { createFailedRemoteDataObject$, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { BrowseDefinition } from '../core/shared/browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; +import { RouterStub } from '../shared/testing/router.stub'; describe('BrowseByGuard', () => { describe('canActivate', () => { @@ -12,6 +12,7 @@ describe('BrowseByGuard', () => { let dsoService: any; let translateService: any; let browseDefinitionService: any; + let router: any; const name = 'An interesting DSO'; const title = 'Author'; @@ -34,7 +35,9 @@ describe('BrowseByGuard', () => { findById: () => createSuccessfulRemoteDataObject$(browseDefinition) }; - guard = new BrowseByGuard(dsoService, translateService, browseDefinitionService); + router = new RouterStub() as any; + + guard = new BrowseByGuard(dsoService, translateService, browseDefinitionService, router); }); it('should return true, and sets up the data correctly, with a scope and value', () => { @@ -64,6 +67,7 @@ describe('BrowseByGuard', () => { value: '"' + value + '"' }; expect(scopedRoute.data).toEqual(result); + expect(router.navigate).not.toHaveBeenCalled(); expect(canActivate).toEqual(true); } ); @@ -96,6 +100,7 @@ describe('BrowseByGuard', () => { value: '' }; expect(scopedNoValueRoute.data).toEqual(result); + expect(router.navigate).not.toHaveBeenCalled(); expect(canActivate).toEqual(true); } ); @@ -127,9 +132,33 @@ describe('BrowseByGuard', () => { value: '"' + value + '"' }; expect(route.data).toEqual(result); + expect(router.navigate).not.toHaveBeenCalled(); expect(canActivate).toEqual(true); } ); }); + + it('should return false, and sets up the data correctly, without a scope and with a value', () => { + jasmine.getEnv().allowRespy(true); + spyOn(browseDefinitionService, 'findById').and.returnValue(createFailedRemoteDataObject$()); + const scopedRoute = { + data: { + title: field, + }, + params: { + id, + }, + queryParams: { + scope, + value + } + }; + guard.canActivate(scopedRoute as any, undefined) + .pipe(first()) + .subscribe((canActivate) => { + expect(router.navigate).toHaveBeenCalled(); + expect(canActivate).toEqual(false); + }); + }); }); }); diff --git a/src/app/browse-by/browse-by-guard.ts b/src/app/browse-by/browse-by-guard.ts index e4582cb77a..ed6a627558 100644 --- a/src/app/browse-by/browse-by-guard.ts +++ b/src/app/browse-by/browse-by-guard.ts @@ -1,13 +1,15 @@ -import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; import { Injectable } from '@angular/core'; import { DSpaceObjectDataService } from '../core/data/dspace-object-data.service'; import { hasNoValue, hasValue } from '../shared/empty.util'; import { map, switchMap } from 'rxjs/operators'; -import { getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload } from '../core/shared/operators'; +import { getFirstCompletedRemoteData, getFirstSucceededRemoteData, } from '../core/shared/operators'; import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; import { BrowseDefinition } from '../core/shared/browse-definition.model'; +import { RemoteData } from '../core/data/remote-data'; +import { PAGE_NOT_FOUND_PATH } from '../app-routing-paths'; @Injectable() /** @@ -17,15 +19,20 @@ export class BrowseByGuard implements CanActivate { constructor(protected dsoService: DSpaceObjectDataService, protected translate: TranslateService, - protected browseDefinitionService: BrowseDefinitionDataService) { + protected browseDefinitionService: BrowseDefinitionDataService, + protected router: Router, + ) { } - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { const title = route.data.title; const id = route.params.id || route.queryParams.id || route.data.id; - let browseDefinition$: Observable; + let browseDefinition$: Observable; if (hasNoValue(route.data.browseDefinition) && hasValue(id)) { - browseDefinition$ = this.browseDefinitionService.findById(id).pipe(getFirstSucceededRemoteDataPayload()); + browseDefinition$ = this.browseDefinitionService.findById(id).pipe( + getFirstCompletedRemoteData(), + map((browseDefinitionRD: RemoteData) => browseDefinitionRD.payload), + ); } else { browseDefinition$ = observableOf(route.data.browseDefinition); } @@ -33,19 +40,24 @@ export class BrowseByGuard implements CanActivate { const value = route.queryParams.value; const metadataTranslated = this.translate.instant('browse.metadata.' + id); return browseDefinition$.pipe( - switchMap((browseDefinition) => { - if (hasValue(scope)) { - const dsoAndMetadata$ = this.dsoService.findById(scope).pipe(getFirstSucceededRemoteData()); - return dsoAndMetadata$.pipe( - map((dsoRD) => { - const name = dsoRD.payload.name; - route.data = this.createData(title, id, browseDefinition, name, metadataTranslated, value, route); - return true; - }) - ); + switchMap((browseDefinition: BrowseDefinition | undefined) => { + if (hasValue(browseDefinition)) { + if (hasValue(scope)) { + const dsoAndMetadata$ = this.dsoService.findById(scope).pipe(getFirstSucceededRemoteData()); + return dsoAndMetadata$.pipe( + map((dsoRD) => { + const name = dsoRD.payload.name; + route.data = this.createData(title, id, browseDefinition, name, metadataTranslated, value, route); + return true; + }) + ); + } else { + route.data = this.createData(title, id, browseDefinition, '', metadataTranslated, value, route); + return observableOf(true); + } } else { - route.data = this.createData(title, id, browseDefinition, '', metadataTranslated, value, route); - return observableOf(true); + void this.router.navigate([PAGE_NOT_FOUND_PATH]); + return observableOf(false); } }) ); From 58a3ec397293b57b030f15ffc4d89bbc7ef3f89d Mon Sep 17 00:00:00 2001 From: enea4science <127771679+enea4science@users.noreply.github.com> Date: Mon, 12 Jun 2023 09:50:26 +0200 Subject: [PATCH 779/833] Update orcid-sync-settings.component.ts --- .../orcid-sync-settings/orcid-sync-settings.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 1aec416d62..0bcbc295ac 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -156,8 +156,7 @@ export class OrcidSyncSettingsComponent implements OnInit { } }), ).subscribe((remoteData: RemoteData) => { - // hasSucceeded is true if the response is success or successStale - if (remoteData.hasSucceeded) { + if (remoteData.isSuccess) { this.notificationsService.success(this.translateService.get(this.messagePrefix + '.synchronization-settings-update.success')); this.settingsUpdated.emit(); } else { From e85f9f2b255ccbd6169b6394d93efe692917dd95 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 12 Jun 2023 14:40:21 +0200 Subject: [PATCH 780/833] [CST-5729] fix issue with signposting endpoint url replace --- src/app/core/data/signposting-data.service.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index d051ecf8db..34d3ffdab9 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -25,7 +25,8 @@ export class SignpostingDataService { * @param uuid */ getLinks(uuid: string): Observable { - const baseUrl = this.halService.getRootHref().replace('/api', ''); + const regex = /\/api$/gm; + const baseUrl = this.halService.getRootHref().replace(regex, ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { From 5d6edade22ff116c980465bc322ef4bf56772475 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 12 Jun 2023 15:22:33 +0200 Subject: [PATCH 781/833] [CST-5729] turn to use app config baseurl --- .../data/signposting-data.service.spec.ts | 26 +++++++++---------- src/app/core/data/signposting-data.service.ts | 9 +++---- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/app/core/data/signposting-data.service.spec.ts b/src/app/core/data/signposting-data.service.spec.ts index c76899221e..f34ce6538f 100644 --- a/src/app/core/data/signposting-data.service.spec.ts +++ b/src/app/core/data/signposting-data.service.spec.ts @@ -1,14 +1,16 @@ import { fakeAsync, TestBed, tick } from '@angular/core/testing'; + +import { of } from 'rxjs'; + import { SignpostingDataService } from './signposting-data.service'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { of } from 'rxjs'; import { SignpostingLink } from './signposting-links.model'; +import { APP_CONFIG } from '../../../config/app-config.interface'; describe('SignpostingDataService', () => { let service: SignpostingDataService; let restServiceSpy: jasmine.SpyObj; - let halServiceSpy: jasmine.SpyObj; + const mocklink = { href: 'http://test.org', rel: 'test', @@ -30,21 +32,25 @@ describe('SignpostingDataService', () => { statusCode: 500 }; + const environmentRest = { + rest: { + baseUrl: 'http://localhost:8080' + } + }; + beforeEach(() => { const restSpy = jasmine.createSpyObj('DspaceRestService', ['get', 'getWithHeaders']); - const halSpy = jasmine.createSpyObj('HALEndpointService', ['getRootHref']); TestBed.configureTestingModule({ providers: [ SignpostingDataService, - { provide: DspaceRestService, useValue: restSpy }, - { provide: HALEndpointService, useValue: halSpy } + { provide: APP_CONFIG, useValue: environmentRest }, + { provide: DspaceRestService, useValue: restSpy } ] }); service = TestBed.inject(SignpostingDataService); restServiceSpy = TestBed.inject(DspaceRestService) as jasmine.SpyObj; - halServiceSpy = TestBed.inject(HALEndpointService) as jasmine.SpyObj; }); it('should be created', () => { @@ -55,8 +61,6 @@ describe('SignpostingDataService', () => { const uuid = '123'; const baseUrl = 'http://localhost:8080'; - halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - restServiceSpy.get.and.returnValue(of(mockResponse)); let result: SignpostingLink[]; @@ -70,7 +74,6 @@ describe('SignpostingDataService', () => { tick(); expect(result).toEqual(expectedResult); - expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); @@ -78,8 +81,6 @@ describe('SignpostingDataService', () => { const uuid = '123'; const baseUrl = 'http://localhost:8080'; - halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - restServiceSpy.get.and.returnValue(of(mockErrResponse)); let result: any; @@ -91,7 +92,6 @@ describe('SignpostingDataService', () => { tick(); expect(result).toEqual([]); - expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); }); diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index 34d3ffdab9..638b04dfdd 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -1,12 +1,12 @@ -import { Injectable } from '@angular/core'; +import { Inject, Injectable } from '@angular/core'; import { catchError, map } from 'rxjs/operators'; import { Observable, of as observableOf } from 'rxjs'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; -import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { SignpostingLink } from './signposting-links.model'; +import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; /** * Service responsible for handling requests related to the Signposting endpoint @@ -16,7 +16,7 @@ import { SignpostingLink } from './signposting-links.model'; }) export class SignpostingDataService { - constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { + constructor(@Inject(APP_CONFIG) protected appConfig: AppConfig, private restService: DspaceRestService) { } /** @@ -25,8 +25,7 @@ export class SignpostingDataService { * @param uuid */ getLinks(uuid: string): Observable { - const regex = /\/api$/gm; - const baseUrl = this.halService.getRootHref().replace(regex, ''); + const baseUrl = `${this.appConfig.rest.baseUrl}`; return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { From de0d7bf33ae0fb59c971f88da037f7e8d948af04 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 4 May 2023 15:01:23 -0500 Subject: [PATCH 782/833] Replace lorem ipsum with text donated by DSpaceDirect --- .../end-user-agreement-content.component.html | 132 +++++++++++++----- .../privacy-content.component.html | 128 ++++++++++++----- src/assets/i18n/en.json5 | 6 +- 3 files changed, 190 insertions(+), 76 deletions(-) diff --git a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html index 1ee8712444..3ae0d0efbe 100644 --- a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html +++ b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html @@ -1,37 +1,95 @@ -

    {{ 'info.end-user-agreement.head' | translate }}

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc sed velit dignissim sodales ut eu. In ante metus dictum at tempor. Diam phasellus vestibulum lorem sed risus. Sed cras ornare arcu dui vivamus. Sit amet consectetur adipiscing elit pellentesque. Id velit ut tortor pretium viverra suspendisse potenti. Sed euismod nisi porta lorem mollis aliquam ut. Justo laoreet sit amet cursus sit amet dictum sit. Ullamcorper morbi tincidunt ornare massa eget egestas. -

    -

    - In iaculis nunc sed augue lacus. Curabitur vitae nunc sed velit dignissim sodales ut eu sem. Tellus id interdum velit laoreet id donec ultrices tincidunt arcu. Quis vel eros donec ac odio tempor. Viverra accumsan in nisl nisi scelerisque eu ultrices vitae. Varius quam quisque id diam vel quam. Nisl tincidunt eget nullam non nisi est sit. Nunc aliquet bibendum enim facilisis. Aenean sed adipiscing diam donec adipiscing. Convallis tellus id interdum velit laoreet. Massa placerat duis ultricies lacus sed turpis tincidunt. Sed cras ornare arcu dui vivamus arcu. Egestas integer eget aliquet nibh praesent tristique. Sit amet purus gravida quis blandit turpis cursus in hac. Porta non pulvinar neque laoreet suspendisse. Quis risus sed vulputate odio ut. Dignissim enim sit amet venenatis urna cursus. -

    -

    - Interdum velit laoreet id donec ultrices tincidunt arcu non sodales. Massa sapien faucibus et molestie. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Metus dictum at tempor commodo ullamcorper. Tincidunt lobortis feugiat vivamus at augue eget. Non diam phasellus vestibulum lorem sed risus ultricies. Neque aliquam vestibulum morbi blandit cursus risus at ultrices mi. Euismod lacinia at quis risus sed. Lorem mollis aliquam ut porttitor leo a diam. Ipsum dolor sit amet consectetur. Ante in nibh mauris cursus mattis molestie a iaculis at. Commodo ullamcorper a lacus vestibulum. Pellentesque elit eget gravida cum sociis. Sit amet commodo nulla facilisi nullam vehicula. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus aenean. -

    -

    - Ac turpis egestas maecenas pharetra convallis. Lacus sed viverra tellus in. Nullam eget felis eget nunc lobortis mattis aliquam faucibus purus. Id aliquet risus feugiat in ante metus dictum at. Quis enim lobortis scelerisque fermentum dui faucibus. Eu volutpat odio facilisis mauris sit amet massa vitae tortor. Tellus elementum sagittis vitae et leo. Cras sed felis eget velit aliquet sagittis. Proin fermentum leo vel orci porta non pulvinar neque laoreet. Dui sapien eget mi proin sed libero enim. Ultrices mi tempus imperdiet nulla malesuada. Mattis molestie a iaculis at. Turpis massa sed elementum tempus egestas. -

    -

    - Dui faucibus in ornare quam viverra orci sagittis eu volutpat. Cras adipiscing enim eu turpis. Ac felis donec et odio pellentesque. Iaculis nunc sed augue lacus viverra vitae congue eu consequat. Posuere lorem ipsum dolor sit amet consectetur adipiscing elit duis. Elit eget gravida cum sociis natoque penatibus. Id faucibus nisl tincidunt eget nullam non. Sagittis aliquam malesuada bibendum arcu vitae. Fermentum leo vel orci porta. Aliquam ultrices sagittis orci a scelerisque purus semper. Diam maecenas sed enim ut sem viverra aliquet eget sit. Et ultrices neque ornare aenean euismod. Eu mi bibendum neque egestas congue quisque egestas diam. Eget lorem dolor sed viverra. Ut lectus arcu bibendum at. Rutrum tellus pellentesque eu tincidunt tortor. Vitae congue eu consequat ac. Elit ullamcorper dignissim cras tincidunt. Sit amet volutpat consequat mauris nunc congue nisi. -

    -

    - Cursus in hac habitasse platea dictumst quisque sagittis purus. Placerat duis ultricies lacus sed turpis tincidunt. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Non nisi est sit amet facilisis magna. In massa tempor nec feugiat nisl pretium fusce. Pulvinar neque laoreet suspendisse interdum consectetur. Ullamcorper morbi tincidunt ornare massa eget egestas purus viverra accumsan. Fringilla urna porttitor rhoncus dolor purus non enim. Mauris nunc congue nisi vitae suscipit. Commodo elit at imperdiet dui accumsan sit amet nulla. Tempor id eu nisl nunc mi ipsum faucibus. Porta non pulvinar neque laoreet suspendisse. Nec nam aliquam sem et tortor consequat. -

    -

    - Eget nunc lobortis mattis aliquam faucibus purus. Odio tempor orci dapibus ultrices. Sed nisi lacus sed viverra tellus. Elit ullamcorper dignissim cras tincidunt. Porttitor rhoncus dolor purus non enim praesent elementum facilisis. Viverra orci sagittis eu volutpat odio. Pharetra massa massa ultricies mi quis. Lectus vestibulum mattis ullamcorper velit sed ullamcorper. Pulvinar neque laoreet suspendisse interdum consectetur. Vitae auctor eu augue ut. Arcu dictum varius duis at consectetur lorem donec. Massa sed elementum tempus egestas sed sed. Risus viverra adipiscing at in tellus integer. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Pharetra massa massa ultricies mi. Elementum eu facilisis sed odio morbi quis commodo odio. Tincidunt lobortis feugiat vivamus at. Felis donec et odio pellentesque diam volutpat commodo sed. Risus feugiat in ante metus dictum at tempor commodo ullamcorper. Fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate. -

    -

    - Lectus proin nibh nisl condimentum id venenatis a condimentum. Id consectetur purus ut faucibus pulvinar elementum integer enim. Non pulvinar neque laoreet suspendisse interdum consectetur. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat vivamus. Suscipit tellus mauris a diam maecenas sed enim ut sem. Dolor purus non enim praesent elementum facilisis. Non enim praesent elementum facilisis leo vel. Ultricies leo integer malesuada nunc vel risus commodo viverra maecenas. Nulla porttitor massa id neque aliquam vestibulum. Erat velit scelerisque in dictum non consectetur. Amet cursus sit amet dictum. Nec tincidunt praesent semper feugiat nibh. Rutrum quisque non tellus orci ac auctor. Sagittis aliquam malesuada bibendum arcu vitae elementum. Massa tincidunt dui ut ornare lectus sit amet est. Aliquet porttitor lacus luctus accumsan tortor posuere ac. Quis hendrerit dolor magna eget est lorem ipsum dolor sit. Lectus mauris ultrices eros in. -

    -

    - Massa massa ultricies mi quis hendrerit dolor magna. Est ullamcorper eget nulla facilisi etiam dignissim diam. Vulputate sapien nec sagittis aliquam malesuada. Nisi porta lorem mollis aliquam ut porttitor leo a diam. Tempus quam pellentesque nec nam. Faucibus vitae aliquet nec ullamcorper sit amet risus nullam eget. Gravida arcu ac tortor dignissim convallis aenean et tortor. A scelerisque purus semper eget duis at tellus at. Viverra ipsum nunc aliquet bibendum enim. Semper feugiat nibh sed pulvinar proin gravida hendrerit. Et ultrices neque ornare aenean euismod. Consequat semper viverra nam libero justo laoreet. Nunc mattis enim ut tellus elementum sagittis. Consectetur lorem donec massa sapien faucibus et. Vel risus commodo viverra maecenas accumsan lacus vel facilisis. Diam sollicitudin tempor id eu nisl nunc. Dolor magna eget est lorem ipsum dolor. Adipiscing elit pellentesque habitant morbi tristique. -

    -

    - Nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur. Egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate sapien. Porttitor leo a diam sollicitudin tempor. Pellentesque dignissim enim sit amet venenatis urna cursus eget nunc. Posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus. Leo urna molestie at elementum. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Libero id faucibus nisl tincidunt eget nullam. Tellus elementum sagittis vitae et leo duis ut diam. Sodales ut etiam sit amet nisl purus in mollis. Ipsum faucibus vitae aliquet nec ullamcorper sit amet risus. Lacus laoreet non curabitur gravida arcu ac tortor dignissim convallis. Aliquam malesuada bibendum arcu vitae elementum. Leo vel orci porta non pulvinar neque laoreet. Ipsum suspendisse ultrices gravida dictum fusce. -

    -

    - Egestas erat imperdiet sed euismod nisi porta lorem. Venenatis a condimentum vitae sapien pellentesque habitant. Sit amet luctus venenatis lectus magna fringilla urna porttitor. Orci sagittis eu volutpat odio facilisis mauris sit amet massa. Ut enim blandit volutpat maecenas volutpat blandit aliquam. Libero volutpat sed cras ornare. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. Diam quis enim lobortis scelerisque fermentum dui. Pellentesque habitant morbi tristique senectus et netus. Auctor urna nunc id cursus metus aliquam eleifend. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. Sed risus ultricies tristique nulla aliquet enim tortor. Tincidunt arcu non sodales neque sodales ut. Sed lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt. -

    -

    - Pulvinar etiam non quam lacus suspendisse faucibus. Eu mi bibendum neque egestas congue. Egestas purus viverra accumsan in nisl nisi scelerisque eu. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Eu non diam phasellus vestibulum. Semper feugiat nibh sed pulvinar. Ante in nibh mauris cursus mattis molestie a. Maecenas accumsan lacus vel facilisis volutpat. Non quam lacus suspendisse faucibus. Quis commodo odio aenean sed adipiscing. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi. Sed cras ornare arcu dui vivamus arcu felis. Tortor vitae purus faucibus ornare suspendisse sed. Morbi tincidunt ornare massa eget egestas purus viverra. Nibh cras pulvinar mattis nunc. Luctus venenatis lectus magna fringilla urna porttitor. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Malesuada pellentesque elit eget gravida cum sociis natoque penatibus et. Felis eget nunc lobortis mattis aliquam faucibus purus in. Vivamus arcu felis bibendum ut. -

    +

    {{ 'info.end-user-agreement.head' | translate }}

    +

    Last updated May 4, 2023

    + +

    Agreement to terms

    +

    These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity ("you") and {{ 'repository.title' | translate }} ("Company", "we", "us", or "our"), concerning your access to and use of this website as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the "Site"). You agree that by accessing the Site, you have read, understood, and agreed to be bound by all of these Terms of Use and any future amendments thereof.

    +

    Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Use at any time and for any reason. We will alert you about any changes by updating the "Last updated" date of these Terms of Use, and you waive any right to receive specific notice of each such change. Please ensure that you check the applicable Terms every time you use our Site so that you understand which Terms apply. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted.

    +

    The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.

    + +

    Intellectual property rights

    +

    Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the "Content") and the trademarks, service marks, and logos contained therein (the "Marks") are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of {{ 'info.end-user-agreement.hosting-country' | translate }}, international copyright laws, and international conventions. The Content and the Marks are provided on the Site "AS IS" for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content[a] or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.

    +

    Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks.

    + +

    User representations

    +

    By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you will not use the Site for any illegal or unauthorized purpose; and (5) your use of the Site will not violate any applicable law or regulation.

    +

    If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof).

    + +

    User registration

    +

    You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable.

    + +

    Prohibited activities

    +

    You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.

    +

    As a user of the Site, you agree not to:

    +
      +
    • Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us.
    • +
    • Trick, defraud, or mislead us and other users, especially in any attempt to learn sensitive account information such as user passwords.
    • +
    • Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein.
    • +
    • Disparage, tarnish, or otherwise harm, in our opinion, us and/or the Site.
    • +
    • Use any information obtained from the Site in order to harass, abuse, or harm another person.
    • +
    • Make improper use of our support services or submit false reports of abuse or misconduct.
    • +
    • Use the Site in a manner inconsistent with any applicable laws or regulations.
    • +
    • Engage in unauthorized framing of or linking to the Site.
    • +
    • Upload or transmit (or attempt to upload or to transmit) viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party's uninterrupted use and enjoyment of the Site or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Site.
    • +
    • Delete the copyright or other proprietary rights notice from any Content.
    • +
    • Attempt to impersonate another user or person or use the username and password of another user.
    • +
    • Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats ("gifs"), 1x1 pixels, web bugs, cookies, or other similar devices (sometimes referred to as "spyware" or "passive collection mechanisms" or "pcms").
    • +
    • Interfere with, disrupt, or create an undue burden on the Site or the networks or services connected to the Site.
    • +
    • Harass, annoy, intimidate, or threaten any of our employees or agents engaged in providing any portion of the Site to you.
    • +
    • Attempt to bypass any measures of the Site designed to prevent or restrict access to the Site, or any portion of the Site.
    • +
    • Make any unauthorized use of the Site, including collecting usernames and/or email addresses of users by electronic or other means for the purpose of sending unsolicited email or other forms of electronic communication, or creating user accounts by automated means or under false pretenses.
    • +
    • Use the Site as part of any effort to compete with us or otherwise use the Site and/or the Content for any revenue-generating endeavor or commercial enterprise.
    • +
    + +

    User generated contributions

    +

    The Site may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that:

    +
      +
    • The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party.
    • +
    • You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use.
    • +
    • You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use.
    • +
    • Your Contributions are not false, inaccurate, or misleading.
    • +
    • Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation.
    • +
    • Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us).
    • +
    • Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone.
    • +
    • Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person, do not create and are not used to promote violence against a specific person or class of people.
    • +
    • Your Contributions do not violate any applicable law, regulation, or rule.
    • +
    • Your Contributions do not violate the privacy or publicity rights of any third party.
    • +
    • Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors.
    • +
    • Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, colour, religion, creed or physical handicap.
    • +
    • Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation.
    • +
    +

    Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site.

    + +

    Site management

    +

    We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.

    + +

    Privacy policy

    +

    We care about data privacy and security. Please review our Privacy Policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use.

    +

    Please be advised the Site is hosted in {{ 'info.end-user-agreement.hosting-country' | translate }}. If you access the Site from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in {{ 'info.end-user-agreement.hosting-country' | translate }}, then through your continued use of the Site, you are transferring your data to {{ 'info.end-user-agreement.hosting-country' | translate }}, and you agree to have your data transferred to and processed in {{ 'info.end-user-agreement.hosting-country' | translate }}.

    + +

    Term and termination

    +

    These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.

    +

    If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.

    + +

    Modifications and interruptions

    +

    We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, change, suspension, or discontinuance of the Site.

    +

    We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith.

    + +

    Corrections

    +

    There may be information on the Site that contains typographical errors, inaccuracies, or omissions. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.

    + +

    Disclaimer

    +

    THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE'S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.

    + +

    Limitations of liability

    +

    IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    + +

    Indemnification

    +

    You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys' fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.

    + +

    User Data

    +

    We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.

    + +

    Miscellaneous

    +

    These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.

    + +

    [a] The DSpace software used to run this site is open source. Options for reuse and reproduction of the DSpace software is governed by its open source license: https://github.com/DSpace/DSpace/blob/main/LICENSE

    \ No newline at end of file diff --git a/src/app/info/privacy/privacy-content/privacy-content.component.html b/src/app/info/privacy/privacy-content/privacy-content.component.html index a5bbb3fe10..33504b1522 100644 --- a/src/app/info/privacy/privacy-content/privacy-content.component.html +++ b/src/app/info/privacy/privacy-content/privacy-content.component.html @@ -1,37 +1,91 @@ -

    {{ 'info.privacy.head' | translate }}

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nunc sed velit dignissim sodales ut eu. In ante metus dictum at tempor. Diam phasellus vestibulum lorem sed risus. Sed cras ornare arcu dui vivamus. Sit amet consectetur adipiscing elit pellentesque. Id velit ut tortor pretium viverra suspendisse potenti. Sed euismod nisi porta lorem mollis aliquam ut. Justo laoreet sit amet cursus sit amet dictum sit. Ullamcorper morbi tincidunt ornare massa eget egestas. -

    -

    - In iaculis nunc sed augue lacus. Curabitur vitae nunc sed velit dignissim sodales ut eu sem. Tellus id interdum velit laoreet id donec ultrices tincidunt arcu. Quis vel eros donec ac odio tempor. Viverra accumsan in nisl nisi scelerisque eu ultrices vitae. Varius quam quisque id diam vel quam. Nisl tincidunt eget nullam non nisi est sit. Nunc aliquet bibendum enim facilisis. Aenean sed adipiscing diam donec adipiscing. Convallis tellus id interdum velit laoreet. Massa placerat duis ultricies lacus sed turpis tincidunt. Sed cras ornare arcu dui vivamus arcu. Egestas integer eget aliquet nibh praesent tristique. Sit amet purus gravida quis blandit turpis cursus in hac. Porta non pulvinar neque laoreet suspendisse. Quis risus sed vulputate odio ut. Dignissim enim sit amet venenatis urna cursus. -

    -

    - Interdum velit laoreet id donec ultrices tincidunt arcu non sodales. Massa sapien faucibus et molestie. Dictumst vestibulum rhoncus est pellentesque elit ullamcorper. Metus dictum at tempor commodo ullamcorper. Tincidunt lobortis feugiat vivamus at augue eget. Non diam phasellus vestibulum lorem sed risus ultricies. Neque aliquam vestibulum morbi blandit cursus risus at ultrices mi. Euismod lacinia at quis risus sed. Lorem mollis aliquam ut porttitor leo a diam. Ipsum dolor sit amet consectetur. Ante in nibh mauris cursus mattis molestie a iaculis at. Commodo ullamcorper a lacus vestibulum. Pellentesque elit eget gravida cum sociis. Sit amet commodo nulla facilisi nullam vehicula. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus aenean. -

    -

    - Ac turpis egestas maecenas pharetra convallis. Lacus sed viverra tellus in. Nullam eget felis eget nunc lobortis mattis aliquam faucibus purus. Id aliquet risus feugiat in ante metus dictum at. Quis enim lobortis scelerisque fermentum dui faucibus. Eu volutpat odio facilisis mauris sit amet massa vitae tortor. Tellus elementum sagittis vitae et leo. Cras sed felis eget velit aliquet sagittis. Proin fermentum leo vel orci porta non pulvinar neque laoreet. Dui sapien eget mi proin sed libero enim. Ultrices mi tempus imperdiet nulla malesuada. Mattis molestie a iaculis at. Turpis massa sed elementum tempus egestas. -

    -

    - Dui faucibus in ornare quam viverra orci sagittis eu volutpat. Cras adipiscing enim eu turpis. Ac felis donec et odio pellentesque. Iaculis nunc sed augue lacus viverra vitae congue eu consequat. Posuere lorem ipsum dolor sit amet consectetur adipiscing elit duis. Elit eget gravida cum sociis natoque penatibus. Id faucibus nisl tincidunt eget nullam non. Sagittis aliquam malesuada bibendum arcu vitae. Fermentum leo vel orci porta. Aliquam ultrices sagittis orci a scelerisque purus semper. Diam maecenas sed enim ut sem viverra aliquet eget sit. Et ultrices neque ornare aenean euismod. Eu mi bibendum neque egestas congue quisque egestas diam. Eget lorem dolor sed viverra. Ut lectus arcu bibendum at. Rutrum tellus pellentesque eu tincidunt tortor. Vitae congue eu consequat ac. Elit ullamcorper dignissim cras tincidunt. Sit amet volutpat consequat mauris nunc congue nisi. -

    -

    - Cursus in hac habitasse platea dictumst quisque sagittis purus. Placerat duis ultricies lacus sed turpis tincidunt. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Non nisi est sit amet facilisis magna. In massa tempor nec feugiat nisl pretium fusce. Pulvinar neque laoreet suspendisse interdum consectetur. Ullamcorper morbi tincidunt ornare massa eget egestas purus viverra accumsan. Fringilla urna porttitor rhoncus dolor purus non enim. Mauris nunc congue nisi vitae suscipit. Commodo elit at imperdiet dui accumsan sit amet nulla. Tempor id eu nisl nunc mi ipsum faucibus. Porta non pulvinar neque laoreet suspendisse. Nec nam aliquam sem et tortor consequat. -

    -

    - Eget nunc lobortis mattis aliquam faucibus purus. Odio tempor orci dapibus ultrices. Sed nisi lacus sed viverra tellus. Elit ullamcorper dignissim cras tincidunt. Porttitor rhoncus dolor purus non enim praesent elementum facilisis. Viverra orci sagittis eu volutpat odio. Pharetra massa massa ultricies mi quis. Lectus vestibulum mattis ullamcorper velit sed ullamcorper. Pulvinar neque laoreet suspendisse interdum consectetur. Vitae auctor eu augue ut. Arcu dictum varius duis at consectetur lorem donec. Massa sed elementum tempus egestas sed sed. Risus viverra adipiscing at in tellus integer. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Pharetra massa massa ultricies mi. Elementum eu facilisis sed odio morbi quis commodo odio. Tincidunt lobortis feugiat vivamus at. Felis donec et odio pellentesque diam volutpat commodo sed. Risus feugiat in ante metus dictum at tempor commodo ullamcorper. Fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate. -

    -

    - Lectus proin nibh nisl condimentum id venenatis a condimentum. Id consectetur purus ut faucibus pulvinar elementum integer enim. Non pulvinar neque laoreet suspendisse interdum consectetur. Est pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat vivamus. Suscipit tellus mauris a diam maecenas sed enim ut sem. Dolor purus non enim praesent elementum facilisis. Non enim praesent elementum facilisis leo vel. Ultricies leo integer malesuada nunc vel risus commodo viverra maecenas. Nulla porttitor massa id neque aliquam vestibulum. Erat velit scelerisque in dictum non consectetur. Amet cursus sit amet dictum. Nec tincidunt praesent semper feugiat nibh. Rutrum quisque non tellus orci ac auctor. Sagittis aliquam malesuada bibendum arcu vitae elementum. Massa tincidunt dui ut ornare lectus sit amet est. Aliquet porttitor lacus luctus accumsan tortor posuere ac. Quis hendrerit dolor magna eget est lorem ipsum dolor sit. Lectus mauris ultrices eros in. -

    -

    - Massa massa ultricies mi quis hendrerit dolor magna. Est ullamcorper eget nulla facilisi etiam dignissim diam. Vulputate sapien nec sagittis aliquam malesuada. Nisi porta lorem mollis aliquam ut porttitor leo a diam. Tempus quam pellentesque nec nam. Faucibus vitae aliquet nec ullamcorper sit amet risus nullam eget. Gravida arcu ac tortor dignissim convallis aenean et tortor. A scelerisque purus semper eget duis at tellus at. Viverra ipsum nunc aliquet bibendum enim. Semper feugiat nibh sed pulvinar proin gravida hendrerit. Et ultrices neque ornare aenean euismod. Consequat semper viverra nam libero justo laoreet. Nunc mattis enim ut tellus elementum sagittis. Consectetur lorem donec massa sapien faucibus et. Vel risus commodo viverra maecenas accumsan lacus vel facilisis. Diam sollicitudin tempor id eu nisl nunc. Dolor magna eget est lorem ipsum dolor. Adipiscing elit pellentesque habitant morbi tristique. -

    -

    - Nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur. Egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate sapien. Porttitor leo a diam sollicitudin tempor. Pellentesque dignissim enim sit amet venenatis urna cursus eget nunc. Posuere sollicitudin aliquam ultrices sagittis orci a scelerisque. Vehicula ipsum a arcu cursus vitae congue mauris rhoncus. Leo urna molestie at elementum. Duis tristique sollicitudin nibh sit amet commodo nulla facilisi. Libero id faucibus nisl tincidunt eget nullam. Tellus elementum sagittis vitae et leo duis ut diam. Sodales ut etiam sit amet nisl purus in mollis. Ipsum faucibus vitae aliquet nec ullamcorper sit amet risus. Lacus laoreet non curabitur gravida arcu ac tortor dignissim convallis. Aliquam malesuada bibendum arcu vitae elementum. Leo vel orci porta non pulvinar neque laoreet. Ipsum suspendisse ultrices gravida dictum fusce. -

    -

    - Egestas erat imperdiet sed euismod nisi porta lorem. Venenatis a condimentum vitae sapien pellentesque habitant. Sit amet luctus venenatis lectus magna fringilla urna porttitor. Orci sagittis eu volutpat odio facilisis mauris sit amet massa. Ut enim blandit volutpat maecenas volutpat blandit aliquam. Libero volutpat sed cras ornare. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper velit sed. Diam quis enim lobortis scelerisque fermentum dui. Pellentesque habitant morbi tristique senectus et netus. Auctor urna nunc id cursus metus aliquam eleifend. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique. Sed risus ultricies tristique nulla aliquet enim tortor. Tincidunt arcu non sodales neque sodales ut. Sed lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt. -

    -

    - Pulvinar etiam non quam lacus suspendisse faucibus. Eu mi bibendum neque egestas congue. Egestas purus viverra accumsan in nisl nisi scelerisque eu. Vulputate enim nulla aliquet porttitor lacus luctus accumsan. Eu non diam phasellus vestibulum. Semper feugiat nibh sed pulvinar. Ante in nibh mauris cursus mattis molestie a. Maecenas accumsan lacus vel facilisis volutpat. Non quam lacus suspendisse faucibus. Quis commodo odio aenean sed adipiscing. Vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi. Sed cras ornare arcu dui vivamus arcu felis. Tortor vitae purus faucibus ornare suspendisse sed. Morbi tincidunt ornare massa eget egestas purus viverra. Nibh cras pulvinar mattis nunc. Luctus venenatis lectus magna fringilla urna porttitor. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Malesuada pellentesque elit eget gravida cum sociis natoque penatibus et. Felis eget nunc lobortis mattis aliquam faucibus purus in. Vivamus arcu felis bibendum ut. -

    +

    {{ 'info.privacy.head' | translate }}

    +

    Last updated May 4, 2023

    + +

    Introduction

    +

    {{ 'repository.title' | translate }} ("Company" or "We") respects your privacy and is committed to protecting it through our compliance with this policy.

    +

    This policy describes the types of information we may collect from you or that you may provide when you visit this website (our "Website") and our practices for collecting, using, maintaining, protecting, and disclosing that information.

    +

    This policy applies to information we collect:

    +
      +
    • On this Website.
    • +
    • In email, text, and other electronic messages between you and this Website.
    • +
    +

    It does not apply to information collected by:

    +
      +
    • us offline or through any other means, including on any other website operated by Company or any third party; or
    • +
    • any third party, including through any application or content (including advertising) that may link to or be accessible from or on the Website.
    • +
    +

    Please read this policy carefully to understand our policies and practices regarding your information and how we will treat it. If you do not agree with our policies and practices, your choice is not to use our Website. By accessing or using this Website, you agree to this privacy policy. This policy may change from time to time. Your continued use of this Website after we make changes is deemed to be acceptance of those changes, so please check the policy periodically for updates.

    + +

    Children under the age of 13

    +

    Our Website is not intended for children under 13 years of age. No one under age 13 may provide any personal information to or on the Website. We do not knowingly collect personal information from children under 13. If you are under 13, do not use or provide any information on this Website or provide any information about yourself to us, including your name, address, telephone number, email address, or any screen name or username you may use. If we learn we have collected or received personal information from a child under 13 without verification of parental consent, we will delete that information.

    + +

    Information we collect about you and how we collect it

    +

    We collect several types of information from and about users of our Website, including information:

    +
      +
    • by which you may be personally identified, such as name, e-mail address, telephone number, or any other identifier by which you may be contacted online or offline ("personal information"); and/or
    • +
    • about your internet connection, the equipment you use to access our Website and usage details.
    • +
    +

    We collect this information:

    +
      +
    • directly from you when you provide it to us.
    • +
    • automatically as you navigate through the site. Information collected automatically may include usage details, IP addresses, and information collected through cookies, web beacons, and other tracking technologies; and/or
    • +
    • from third parties, for example, our business partners.
    • +
    + +

    Information you provide to us

    +

    The information we collect on or through our Website may include:

    +
      +
    • Information that you provide by filling in forms on our Website. We may also ask you for information when you report a problem with our Website.
    • +
    • Records and copies of your correspondence (including email addresses), if you contact us.
    • +
    • Your responses to surveys that we might ask you to complete for research purpose.
    • +
    + +

    Information we collect through automatic data collection technologies

    +

    As you navigate through and interact with our Website, we may use automatic data collection technologies to collect certain information about your equipment, browsing actions, and patterns, including:

    +
      +
    • Details of your visits to our Website, including traffic data, location data, logs, and other communication data and the resources that you access and use on the Website.
    • +
    • Information about your computer and internet connection, including your IP address, operating system, and browser type.
    • +
    +

    The information we collect automatically is statistical data and does not include personal information, but we may maintain it or associate it with personal information we collect in other ways or receive from third parties. It helps us to improve our Website and to deliver a better and more personalized service, including by enabling us to:

    +
      +
    • Estimate our audience size and usage patterns.
    • +
    • Store information about your preferences, allowing us to customize our Website according to your individual interests.
    • +
    • Speed up your searches.
    • +
    • Recognize you when you return to our Website.
    • +
    +

    The technologies we use for this automatic data collection may include:

    +
      +
    • Cookies (or browser cookies). A cookie is a small file placed on the hard drive of your computer. You may refuse to accept browser cookies by activating the appropriate setting on your browser. However, if you select this setting you may be unable to access certain parts of our Website. Unless you have adjusted your browser setting so that it will refuse cookies, our system will issue cookies when you direct your browser to our Website.
    • +
    + +

    How we use your information

    +

    We use information that we collect about you or that you provide to us, including any personal information:

    +
      +
    • To present our Website and its contents to you.
    • +
    • To provide you with information, products, or services that you request from us.
    • +
    • To fulfill any other purpose for which you provide it.
    • +
    • To carry out our obligations and enforce our rights arising from any contracts entered into between you and us, including for billing and collection.
    • +
    • To notify you about changes to our Website or any products or services we offer or provide through it.
    • +
    • In any other way we may describe when you provide the information.
    • +
    • For any other purpose with your consent.
    • +
    + +

    Disclosure of your information

    +

    We may disclose aggregated information about our users, and information that does not identify any individual, without restriction.

    +

    We may disclose personal information that we collect or you provide as described in this privacy policy:

    +
      +
    • To contractors, service providers, and other third parties we use to support our business and who are bound by contractual obligations to keep personal information confidential and use it only for the purposes for which we disclose it to them.
    • +
    • To a buyer or other successor in the event of a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Company's assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which personal information held by Company about our Website users is among the assets transferred.
    • +
    • To fulfill the purpose for which you provide it.
    • +
    • For any other purpose disclosed by us when you provide the information.
    • +
    • With your consent.
    • +
    +

    We may also disclose your personal information:

    +
      +
    • To comply with any court order, law, or legal process, including to respond to any government or regulatory request.
    • +
    • To enforce or apply our End User Agreement and other agreements, including for billing and collection purposes.
    • +
    • If we believe disclosure is necessary or appropriate to protect the rights, property, or safety of the Company, our customers, or others.
    • +
    + +

    Changes to our privacy policy

    +

    It is our policy to post any changes we make to our privacy policy on this page. The date the privacy policy was last revised is identified at the top of the page. You are responsible for periodically visiting our Website and this privacy policy to check for any changes.

    \ No newline at end of file diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 2df03302d7..b8dbd20459 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1916,6 +1916,8 @@ "info.end-user-agreement.title": "End User Agreement", + "info.end-user-agreement.hosting-country": "the United States", + "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.head": "Privacy Statement", @@ -3649,9 +3651,9 @@ "repository.image.logo": "Repository logo", - "repository.title.prefix": "DSpace Angular :: ", + "repository.title": "DSpace Repository", - "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefix": "DSpace Repository :: ", "resource-policies.add.button": "Add", From c3854355fd4150c93349d998e0fad3edbbc047d1 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 4 May 2023 16:02:04 -0500 Subject: [PATCH 783/833] Fix e2e test to check for new title prefix --- cypress/e2e/homepage.cy.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/e2e/homepage.cy.ts b/cypress/e2e/homepage.cy.ts index 8fdf61dbf7..a387c31a2a 100644 --- a/cypress/e2e/homepage.cy.ts +++ b/cypress/e2e/homepage.cy.ts @@ -6,8 +6,8 @@ describe('Homepage', () => { cy.visit('/'); }); - it('should display translated title "DSpace Angular :: Home"', () => { - cy.title().should('eq', 'DSpace Angular :: Home'); + it('should display translated title "DSpace Repository :: Home"', () => { + cy.title().should('eq', 'DSpace Repository :: Home'); }); it('should contain a news section', () => { From 685fbf630a7e6c5dbeadc99df52ae9c7fac63e9b Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Mon, 12 Jun 2023 17:04:02 -0500 Subject: [PATCH 784/833] Address feedback: Make links open in new window/tab. --- .../end-user-agreement-content.component.html | 4 ++-- .../privacy/privacy-content/privacy-content.component.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html index 3ae0d0efbe..d5e6de85d4 100644 --- a/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html +++ b/src/app/info/end-user-agreement/end-user-agreement-content/end-user-agreement-content.component.html @@ -63,7 +63,7 @@

    We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.

    Privacy policy

    -

    We care about data privacy and security. Please review our Privacy Policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use.

    +

    We care about data privacy and security. Please review our Privacy Policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use.

    Please be advised the Site is hosted in {{ 'info.end-user-agreement.hosting-country' | translate }}. If you access the Site from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in {{ 'info.end-user-agreement.hosting-country' | translate }}, then through your continued use of the Site, you are transferring your data to {{ 'info.end-user-agreement.hosting-country' | translate }}, and you agree to have your data transferred to and processed in {{ 'info.end-user-agreement.hosting-country' | translate }}.

    Term and termination

    @@ -92,4 +92,4 @@

    Miscellaneous

    These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.

    -

    [a] The DSpace software used to run this site is open source. Options for reuse and reproduction of the DSpace software is governed by its open source license: https://github.com/DSpace/DSpace/blob/main/LICENSE

    \ No newline at end of file +

    [a] The DSpace software used to run this site is open source. Options for reuse and reproduction of the DSpace software is governed by its open source license: https://github.com/DSpace/DSpace/blob/main/LICENSE

    \ No newline at end of file diff --git a/src/app/info/privacy/privacy-content/privacy-content.component.html b/src/app/info/privacy/privacy-content/privacy-content.component.html index 33504b1522..f29a786e8b 100644 --- a/src/app/info/privacy/privacy-content/privacy-content.component.html +++ b/src/app/info/privacy/privacy-content/privacy-content.component.html @@ -83,7 +83,7 @@

    We may also disclose your personal information:

    • To comply with any court order, law, or legal process, including to respond to any government or regulatory request.
    • -
    • To enforce or apply our End User Agreement and other agreements, including for billing and collection purposes.
    • +
    • To enforce or apply our End User Agreement and other agreements, including for billing and collection purposes.
    • If we believe disclosure is necessary or appropriate to protect the rights, property, or safety of the Company, our customers, or others.
    From ff85422bb3c6a3167a8728ae48285b7119889ad9 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 13 Jun 2023 16:46:26 +0200 Subject: [PATCH 785/833] [DURACOM-155] Edit item / collection / community in sidebar menu --- .../collection-form.component.ts | 20 ++++-- .../collection-metadata.component.ts | 22 +++++-- .../community-form.component.ts | 11 +++- .../item-status/item-status.component.ts | 1 - .../comcol-form/comcol-form.component.ts | 66 ++++++++++--------- .../comcol-metadata.component.ts | 4 +- .../edit-comcol-page.component.ts | 4 +- 7 files changed, 80 insertions(+), 48 deletions(-) diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index 23698de84e..84223d260a 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChange, SimpleChanges } from '@angular/core'; import { Observable } from 'rxjs'; import { TranslateService } from '@ngx-translate/core'; @@ -31,7 +31,7 @@ import { NONE_ENTITY_TYPE } from '../../core/shared/item-relationships/item-type styleUrls: ['../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.scss'], templateUrl: '../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.html' }) -export class CollectionFormComponent extends ComColFormComponent implements OnInit { +export class CollectionFormComponent extends ComColFormComponent implements OnInit, OnChanges { /** * @type {Collection} A new collection when a collection is being created, an existing Input collection when a collection is being edited */ @@ -61,12 +61,23 @@ export class CollectionFormComponent extends ComColFormComponent imp protected dsoService: CommunityDataService, protected requestService: RequestService, protected objectCache: ObjectCacheService, - protected entityTypeService: EntityTypeDataService) { + protected entityTypeService: EntityTypeDataService, + protected chd: ChangeDetectorRef) { super(formService, translate, notificationsService, authService, requestService, objectCache); } - ngOnInit() { + /** + * Detect changes to the dso and initialize the form, + * if the dso changes, exists and it is not the first change + */ + ngOnChanges(changes: SimpleChanges) { + const dsoChange: SimpleChange = changes.dso; + if (this.dso && dsoChange && !dsoChange.isFirstChange()) { + this.initializeForm(); + } + } + initializeForm() { let currentRelationshipValue: MetadataValue[]; if (this.dso && this.dso.metadata) { currentRelationshipValue = this.dso.metadata['dspace.entity.type']; @@ -96,6 +107,7 @@ export class CollectionFormComponent extends ComColFormComponent imp this.formModel = [...collectionFormModels, this.entityTypeSelection]; super.ngOnInit(); + this.chd.detectChanges(); }); } diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts index 8e534a0829..7603b9960a 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts @@ -1,8 +1,8 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { ComcolMetadataComponent } from '../../../shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component'; import { Collection } from '../../../core/shared/collection.model'; import { CollectionDataService } from '../../../core/data/collection-data.service'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, NavigationEnd, Router, Scroll } from '@angular/router'; import { ItemTemplateDataService } from '../../../core/data/item-template-data.service'; import { combineLatest as combineLatestObservable, Observable } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; @@ -23,7 +23,7 @@ import { hasValue } from '../../../shared/empty.util'; selector: 'ds-collection-metadata', templateUrl: './collection-metadata.component.html', }) -export class CollectionMetadataComponent extends ComcolMetadataComponent { +export class CollectionMetadataComponent extends ComcolMetadataComponent implements OnInit { protected frontendURL = '/collections/'; protected type = Collection.type; @@ -44,9 +44,21 @@ export class CollectionMetadataComponent extends ComcolMetadataComponent { + if ( + event instanceof NavigationEnd || + (event instanceof Scroll && event.routerEvent instanceof NavigationEnd) + ) { + super.ngOnInit(); + this.initTemplateItem(); + } + }); } /** diff --git a/src/app/community-page/community-form/community-form.component.ts b/src/app/community-page/community-form/community-form.component.ts index c6dd1147c3..fa4809738d 100644 --- a/src/app/community-page/community-form/community-form.component.ts +++ b/src/app/community-page/community-form/community-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input } from '@angular/core'; +import { Component, Input, OnChanges, SimpleChange, SimpleChanges } from '@angular/core'; import { DynamicFormControlModel, DynamicFormService, @@ -23,7 +23,7 @@ import { environment } from '../../../environments/environment'; styleUrls: ['../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.scss'], templateUrl: '../../shared/comcol/comcol-forms/comcol-form/comcol-form.component.html' }) -export class CommunityFormComponent extends ComColFormComponent { +export class CommunityFormComponent extends ComColFormComponent implements OnChanges { /** * @type {Community} A new community when a community is being created, an existing Input community when a community is being edited */ @@ -81,4 +81,11 @@ export class CommunityFormComponent extends ComColFormComponent { protected objectCache: ObjectCacheService) { super(formService, translate, notificationsService, authService, requestService, objectCache); } + + ngOnChanges(changes: SimpleChanges) { + const dsoChange: SimpleChange = changes.dso; + if (this.dso && dsoChange && !dsoChange.isFirstChange()) { + super.ngOnInit(); + } + } } diff --git a/src/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/app/item-page/edit-item-page/item-status/item-status.component.ts index ce84786304..27bc86d33e 100644 --- a/src/app/item-page/edit-item-page/item-status/item-status.component.ts +++ b/src/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -82,7 +82,6 @@ export class ItemStatusComponent implements OnInit { ngOnInit(): void { this.itemRD$ = this.route.parent.data.pipe(map((data) => data.dso)); this.itemRD$.pipe( - first(), map((data: RemoteData) => data.payload) ).subscribe((item: Item) => { this.statusData = Object.assign({ diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts index bbd8b01257..631a9f0b19 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts @@ -127,39 +127,41 @@ export class ComColFormComponent implements On } ngOnInit(): void { - this.formModel.forEach( - (fieldModel: DynamicInputModel) => { - fieldModel.value = this.dso.firstMetadataValue(fieldModel.name); - } - ); - this.formGroup = this.formService.createFormGroup(this.formModel); - - this.updateFieldTranslations(); - this.translate.onLangChange - .subscribe(() => { - this.updateFieldTranslations(); - }); - - if (hasValue(this.dso.id)) { - this.subs.push( - observableCombineLatest([ - this.dsoService.getLogoEndpoint(this.dso.id), - this.dso.logo - ]).subscribe(([href, logoRD]: [string, RemoteData]) => { - this.uploadFilesOptions.url = href; - this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); - // If the object already contains a logo, send out a PUT request instead of POST for setting a new logo - if (hasValue(logoRD.payload)) { - this.uploadFilesOptions.method = RestRequestMethod.PUT; - } - this.initializedUploaderOptions.next(true); - }) + if (hasValue(this.formModel)) { + this.formModel.forEach( + (fieldModel: DynamicInputModel) => { + fieldModel.value = this.dso.firstMetadataValue(fieldModel.name); + } ); - } else { - // Set a placeholder URL to not break the uploader component. This will be replaced once the object is created. - this.uploadFilesOptions.url = 'placeholder'; - this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); - this.initializedUploaderOptions.next(true); + this.formGroup = this.formService.createFormGroup(this.formModel); + + this.updateFieldTranslations(); + this.translate.onLangChange + .subscribe(() => { + this.updateFieldTranslations(); + }); + + if (hasValue(this.dso.id)) { + this.subs.push( + observableCombineLatest([ + this.dsoService.getLogoEndpoint(this.dso.id), + this.dso.logo + ]).subscribe(([href, logoRD]: [string, RemoteData]) => { + this.uploadFilesOptions.url = href; + this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); + // If the object already contains a logo, send out a PUT request instead of POST for setting a new logo + if (hasValue(logoRD.payload)) { + this.uploadFilesOptions.method = RestRequestMethod.PUT; + } + this.initializedUploaderOptions.next(true); + }) + ); + } else { + // Set a placeholder URL to not break the uploader component. This will be replaced once the object is created. + this.uploadFilesOptions.url = 'placeholder'; + this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); + this.initializedUploaderOptions.next(true); + } } } diff --git a/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts b/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts index 5bd51ea650..d59030251d 100644 --- a/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts +++ b/src/app/shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component.ts @@ -3,7 +3,7 @@ import { DSpaceObject } from '../../../../../core/shared/dspace-object.model'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../../../core/data/remote-data'; import { ActivatedRoute, Router } from '@angular/router'; -import { first, map, take } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { getFirstCompletedRemoteData, getFirstSucceededRemoteData } from '../../../../../core/shared/operators'; import { hasValue, isEmpty } from '../../../../empty.util'; import { ResourceType } from '../../../../../core/shared/resource-type'; @@ -42,7 +42,7 @@ export class ComcolMetadataComponent imp } ngOnInit(): void { - this.dsoRD$ = this.route.parent.data.pipe(first(), map((data) => data.dso)); + this.dsoRD$ = this.route.parent.data.pipe(map((data) => data.dso)); } /** diff --git a/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts b/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts index 48eb9aec96..e4d6c9c8a7 100644 --- a/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts +++ b/src/app/shared/comcol/comcol-forms/edit-comcol-page/edit-comcol-page.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { first, map } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { RemoteData } from '../../../../core/data/remote-data'; @@ -53,7 +53,7 @@ export class EditComColPageComponent implements On this.pages = this.route.routeConfig.children .map((child: any) => child.path) .filter((path: string) => isNotEmpty(path)); // ignore reroutes - this.dsoRD$ = this.route.data.pipe(first(), map((data) => data.dso)); + this.dsoRD$ = this.route.data.pipe(map((data) => data.dso)); } /** From ec8470de06d4adfbfd947cea6bece1e05cf47efb Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Tue, 13 Jun 2023 18:41:11 +0200 Subject: [PATCH 786/833] [DURACOM-155] --- .../collection-metadata.component.spec.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts index 79e7a465e1..7cc54bd994 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.spec.ts @@ -4,7 +4,7 @@ import { SharedModule } from '../../../shared/shared.module'; import { CommonModule } from '@angular/common'; import { RouterTestingModule } from '@angular/router/testing'; import { CollectionDataService } from '../../../core/data/collection-data.service'; -import { ActivatedRoute, Router } from '@angular/router'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { CollectionMetadataComponent } from './collection-metadata.component'; @@ -52,6 +52,11 @@ describe('CollectionMetadataComponent', () => { setStaleByHrefSubstring: {} }); + const routerMock = { + events: observableOf(new NavigationEnd(1, 'url', 'url')), + navigate: jasmine.createSpy('navigate'), + }; + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [TranslateModule.forRoot(), SharedModule, CommonModule, RouterTestingModule], @@ -62,6 +67,7 @@ describe('CollectionMetadataComponent', () => { { provide: ActivatedRoute, useValue: { parent: { data: observableOf({ dso: createSuccessfulRemoteDataObject(collection) }) } } }, { provide: NotificationsService, useValue: notificationsService }, { provide: RequestService, useValue: requestService }, + { provide: Router, useValue: routerMock} ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents(); @@ -70,8 +76,11 @@ describe('CollectionMetadataComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(CollectionMetadataComponent); comp = fixture.componentInstance; - router = (comp as any).router; itemTemplateService = (comp as any).itemTemplateService; + spyOn(comp, 'ngOnInit'); + spyOn(comp, 'initTemplateItem'); + + routerMock.events = observableOf(new NavigationEnd(1, 'url', 'url')); fixture.detectChanges(); }); @@ -83,9 +92,8 @@ describe('CollectionMetadataComponent', () => { describe('addItemTemplate', () => { it('should navigate to the collection\'s itemtemplate page', () => { - spyOn(router, 'navigate'); comp.addItemTemplate(); - expect(router.navigate).toHaveBeenCalledWith([getCollectionItemTemplateRoute(collection.uuid)]); + expect(routerMock.navigate).toHaveBeenCalledWith([getCollectionItemTemplateRoute(collection.uuid)]); }); }); From 486aefebc7b3b3ac729ec4de35ebad017d179dc0 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 13 Jun 2023 19:00:33 +0200 Subject: [PATCH 787/833] [CST-5729] Add possibility to store response's headers into the SSR cache --- server.ts | 18 +++++++++++++----- src/config/cache-config.interface.ts | 2 ++ src/config/default-app-config.ts | 2 ++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/server.ts b/server.ts index d64b80b4ab..791baf7236 100644 --- a/server.ts +++ b/server.ts @@ -53,7 +53,7 @@ import { buildAppConfig } from './src/config/config.server'; import { APP_CONFIG, AppConfig } from './src/config/app-config.interface'; import { extendEnvironmentWithAppConfig } from './src/config/config.util'; import { logStartupMessage } from './startup-message'; -import { TOKENITEM } from 'src/app/core/auth/models/auth-token-info.model'; +import { TOKENITEM } from './src/app/core/auth/models/auth-token-info.model'; /* @@ -374,9 +374,15 @@ function cacheCheck(req, res, next) { } // If cached copy exists, return it to the user. - if (cachedCopy) { + if (cachedCopy && cachedCopy.page) { + if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { + environment.cache.serverSide.headers.forEach((header) => { + if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); } + res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + }); + } res.locals.ssr = true; // mark response as SSR-generated (enables text compression) - res.send(cachedCopy); + res.send(cachedCopy.page); // Tell Express to skip all other handlers for this path // This ensures we don't try to re-render the page since we've already returned the cached copy @@ -452,16 +458,18 @@ function saveToCache(req, page: any) { // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) if (key.startsWith('/reload')) { return; } + // Retrieve response headers + const headers = req.res.getHeaders(); // If bot cache is enabled, save it to that cache if it doesn't exist or is expired // (NOTE: has() will return false if page is expired in cache) if (botCacheEnabled() && !botCache.has(key)) { - botCache.set(key, page); + botCache.set(key, { page, headers }); if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in bot cache.`); } } // If anonymous cache is enabled, save it to that cache if it doesn't exist or is expired if (anonymousCacheEnabled() && !anonymousCache.has(key)) { - anonymousCache.set(key, page); + anonymousCache.set(key, { page, headers }); if (environment.cache.serverSide.debug) { console.log(`CACHE SAVE FOR ${key} in anonymous cache.`); } } } diff --git a/src/config/cache-config.interface.ts b/src/config/cache-config.interface.ts index 9560fe46a5..14af509bbf 100644 --- a/src/config/cache-config.interface.ts +++ b/src/config/cache-config.interface.ts @@ -13,6 +13,8 @@ export interface CacheConfig extends Config { serverSide: { // Debug server-side caching. Set to true to see cache hits/misses/refreshes in console logs. debug: boolean, + // List of headers to restore from the cache hit + headers: string[], // Cache specific to known bots. Allows you to serve cached contents to bots only. botCache: { // Maximum number of pages (rendered via SSR) to cache. Setting max=0 disables the cache. diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 80420407c7..a6e9e092e4 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -78,6 +78,8 @@ export class DefaultAppConfig implements AppConfig { // In-memory cache of server-side rendered content serverSide: { debug: false, + // Link header is used for signposting functionality + headers: ['Link'], // Cache specific to known bots. Allows you to serve cached contents to bots only. // Defaults to caching 1,000 pages. Each page expires after 1 day botCache: { From ac9be25faf9135424f4c201a24472c1d24b5f7f7 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 13 Jun 2023 19:30:40 +0200 Subject: [PATCH 788/833] [CST-5729] check if header exists --- server.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server.ts b/server.ts index 791baf7236..f73bd1b774 100644 --- a/server.ts +++ b/server.ts @@ -377,8 +377,12 @@ function cacheCheck(req, res, next) { if (cachedCopy && cachedCopy.page) { if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { environment.cache.serverSide.headers.forEach((header) => { - if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); } - res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + if (cachedCopy.headers[header.toLowerCase()]) { + if (environment.cache.serverSide.debug) { + console.log(`Restore cached ${header} header`); + } + res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + } }); } res.locals.ssr = true; // mark response as SSR-generated (enables text compression) From 8bcceff085825c7aad27a099c7b426b67ba0e4fe Mon Sep 17 00:00:00 2001 From: damian Date: Tue, 13 Jun 2023 19:57:30 +0200 Subject: [PATCH 789/833] Empty communities and collections items count are now shown. Show communities items count at the home page. --- .../community-list/community-list.component.html | 2 +- .../collection-list-element.component.html | 2 +- .../collection-list-element.component.spec.ts | 8 ++++---- .../community-list-element.component.html | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 7f8dcf0c45..55b043f8e8 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,7 +37,7 @@ {{node.name}} - [{{node.payload.archivedItemsCount}}] + [{{node.payload.archivedItemsCount}}]
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 68a84a88e5..b007db510e 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -4,7 +4,7 @@ {{object.name}} -[{{object.archivedItemsCount}}] +[{{object.archivedItemsCount}}]
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts index b911bdd2eb..2324cc3c1f 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.spec.ts @@ -18,7 +18,7 @@ const mockCollectionWithArchivedItems: Collection = Object.assign(new Collection }, archivedItemsCount: 1 }); -const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collection(), { +const mockCollectionWithArchivedItemsDisabledAtBackend: Collection = Object.assign(new Collection(), { metadata: { 'dc.title': [ { @@ -26,7 +26,7 @@ const mockCollectionWithoutArchivedItems: Collection = Object.assign(new Collect value: 'Test title' } ] - }, archivedItemsCount: 0 + }, archivedItemsCount: -1 }); @@ -108,9 +108,9 @@ describe('CollectionListElementComponent', () => { }); }); - describe('When the collection has no archived items', () => { + describe('When the collection archived items are disabled at backend', () => { beforeEach(() => { - collectionListElementComponent.object = mockCollectionWithoutArchivedItems; + collectionListElementComponent.object = mockCollectionWithArchivedItemsDisabledAtBackend; fixture.detectChanges(); }); diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index af01999ca7..26ff040dd6 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -4,6 +4,7 @@ {{object.name}} +[{{object.archivedItemsCount}}]
    {{object.shortDescription}}
    From 3b93f5bd234ed0eb1e9f598b8df29bf755e743c9 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 14 Jun 2023 09:44:58 +0200 Subject: [PATCH 790/833] [DURACOM-155] small fix --- .../collection-metadata/collection-metadata.component.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts index 7603b9960a..634363527f 100644 --- a/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-metadata/collection-metadata.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; import { ComcolMetadataComponent } from '../../../shared/comcol/comcol-forms/edit-comcol-page/comcol-metadata/comcol-metadata.component'; import { Collection } from '../../../core/shared/collection.model'; import { CollectionDataService } from '../../../core/data/collection-data.service'; @@ -40,6 +40,7 @@ export class CollectionMetadataComponent extends ComcolMetadataComponent Date: Wed, 14 Jun 2023 10:49:49 +0300 Subject: [PATCH 791/833] src/assets/i18n/en.json5: lint Normalize whitespace in i18n/en.json5. This file should be clean, as it is the "upstream" of all other language assets and produces a lot of whitespace changes every time strings are merged. --- src/assets/i18n/en.json5 | 362 +++++++-------------------------------- 1 file changed, 65 insertions(+), 297 deletions(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index b8dbd20459..480bf8834e 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -6,8 +6,6 @@ "401.unauthorized": "unauthorized", - - "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.link.home-page": "Take me to the home page", @@ -20,7 +18,6 @@ "500.link.home-page": "Take me to the home page", - "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", "404.link.home-page": "Take me to the home page", @@ -130,6 +127,7 @@ "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.name": "Name", + "admin.registries.bitstream-formats.table.id": "ID", "admin.registries.bitstream-formats.table.return": "Back", @@ -144,8 +142,6 @@ "admin.registries.bitstream-formats.title": "Bitstream Format Registry", - - "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", @@ -172,8 +168,6 @@ "admin.registries.metadata.title": "Metadata Registry", - - "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", @@ -185,6 +179,7 @@ "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.field": "Field", + "admin.registries.schema.fields.table.id": "ID", "admin.registries.schema.fields.table.scopenote": "Scope Note", @@ -225,8 +220,6 @@ "admin.registries.schema.title": "Metadata Schema Registry", - - "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", @@ -321,8 +314,6 @@ "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", - - "admin.access-control.groups.title": "Groups", "admin.access-control.groups.breadcrumbs": "Groups", @@ -369,8 +360,6 @@ "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", - - "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", @@ -531,9 +520,6 @@ "administrativeView.search.results.head": "Administrative Search", - - - "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.title": "Administer Workflow", @@ -550,8 +536,6 @@ "admin.workflow.item.supervision": "Supervision", - - "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.batch-import.breadcrumbs": "Import Batch", @@ -612,12 +596,10 @@ "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", - "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", @@ -674,12 +656,9 @@ "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "bitstream.download.page": "Now downloading {{bitstream}}...", - - "bitstream.download.page": "Now downloading {{bitstream}}..." , - - "bitstream.download.page.back": "Back" , - + "bitstream.download.page.back": "Back", "bitstream.edit.authorizations.link": "Edit bitstream's Policies", @@ -731,7 +710,6 @@ "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", - "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.title": "Bitstream saved", @@ -747,6 +725,7 @@ "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", "bitstream-request-a-copy.name.label": "Name *", @@ -775,8 +754,6 @@ "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", - - "browse.back.all-results": "All browse results", "browse.comcol.by.author": "By Author", @@ -871,20 +848,16 @@ "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", - "search.browse.item-back": "Back to Results", - "chips.remove": "Remove chip", - "claimed-approved-search-result-list-element.title": "Approved", "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", - "collection.create.head": "Create a Collection", "collection.create.notifications.success": "Successfully created the Collection", @@ -907,16 +880,12 @@ "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", - - "collection.edit.delete": "Delete this collection", "collection.edit.head": "Edit Collection", "collection.edit.breadcrumbs": "Edit Collection", - - "collection.edit.tabs.mapper.head": "Item Mapper", "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", @@ -957,7 +926,6 @@ "collection.edit.item-mapper.tabs.map": "Map new items", - "collection.edit.logo.delete.title": "Delete logo", "collection.edit.logo.delete-undo.title": "Undo delete", @@ -976,14 +944,10 @@ "collection.edit.logo.upload": "Drop a Collection Logo to upload", - - "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.return": "Back", - - "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.title": "Collection Edit - Curate", @@ -1042,8 +1006,6 @@ "collection.edit.tabs.source.title": "Collection Edit - Content Source", - - "collection.edit.template.add-button": "Add", "collection.edit.template.breadcrumbs": "Item template", @@ -1068,8 +1030,6 @@ "collection.edit.template.title": "Edit Template Item", - - "collection.form.abstract": "Short Description", "collection.form.description": "Introductory text (HTML)", @@ -1088,12 +1048,8 @@ "collection.form.entityType": "Entity Type", - - "collection.listelement.badge": "Collection", - - "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.empty": "No items to show", @@ -1106,46 +1062,62 @@ "collection.page.news": "News", - - "collection.select.confirm": "Confirm selected", "collection.select.empty": "No collections to show", "collection.select.table.title": "Title", - "collection.source.controls.head": "Harvest Controls", - "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", - "collection.source.controls.test.failed": "The script to test the settings has failed", - "collection.source.controls.test.completed": "The script to test the settings has successfully finished", - "collection.source.controls.test.submit": "Test configuration", - "collection.source.controls.test.running": "Testing configuration...", - "collection.source.controls.import.submit.success": "The import has been successfully initiated", - "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", - "collection.source.controls.import.submit": "Import now", - "collection.source.controls.import.running": "Importing...", - "collection.source.controls.import.failed": "An error occurred during the import", - "collection.source.controls.import.completed": "The import completed", - "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", - "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", - "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", - "collection.source.controls.reset.completed": "The reset and reimport completed", - "collection.source.controls.reset.submit": "Reset and reimport", - "collection.source.controls.reset.running": "Resetting and reimporting...", - "collection.source.controls.harvest.status": "Harvest status:", - "collection.source.controls.harvest.start": "Harvest start time:", - "collection.source.controls.harvest.last": "Last time harvested:", - "collection.source.controls.harvest.message": "Harvest info:", - "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + + "collection.source.controls.test.failed": "The script to test the settings has failed", + + "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + + "collection.source.controls.test.submit": "Test configuration", + + "collection.source.controls.test.running": "Testing configuration...", + + "collection.source.controls.import.submit.success": "The import has been successfully initiated", + + "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + + "collection.source.controls.import.submit": "Import now", + + "collection.source.controls.import.running": "Importing...", + + "collection.source.controls.import.failed": "An error occurred during the import", + + "collection.source.controls.import.completed": "The import completed", + + "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + + "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + + "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + + "collection.source.controls.reset.completed": "The reset and reimport completed", + + "collection.source.controls.reset.submit": "Reset and reimport", + + "collection.source.controls.reset.running": "Resetting and reimporting...", + + "collection.source.controls.harvest.status": "Harvest status:", + + "collection.source.controls.harvest.start": "Harvest start time:", + + "collection.source.controls.harvest.last": "Last time harvested:", + + "collection.source.controls.harvest.message": "Harvest info:", + + "collection.source.controls.harvest.no-information": "N/A", "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.title": "Server Error", - - "communityList.breadcrumbs": "Community List", "communityList.tabTitle": "Community List", @@ -1154,8 +1126,6 @@ "communityList.showMore": "Show More", - - "community.create.head": "Create a Community", "community.create.notifications.success": "Successfully created the Community", @@ -1184,7 +1154,6 @@ "community.edit.breadcrumbs": "Edit Community", - "community.edit.logo.delete.title": "Delete logo", "community.edit.logo.delete-undo.title": "Undo delete", @@ -1203,8 +1172,6 @@ "community.edit.logo.upload": "Drop a Community Logo to upload", - - "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.unauthorized": "You do not have privileges to make this change", @@ -1213,8 +1180,6 @@ "community.edit.return": "Back", - - "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.title": "Community Edit - Curate", @@ -1231,12 +1196,8 @@ "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", - - "community.listelement.badge": "Community", - - "comcol-role.edit.no-group": "None", "comcol-role.edit.create": "Create", @@ -1249,57 +1210,46 @@ "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", - "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Administrators", - "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", - "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", - "comcol-role.edit.item_read.name": "Default item read access", "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", - "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", - "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", - "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", - "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", - "comcol-role.edit.scorereviewers.name": "Score Reviewers", "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", - - "community.form.abstract": "Short Description", "community.form.description": "Introductory text (HTML)", @@ -1326,8 +1276,6 @@ "community.sub-community-list.head": "Communities of this Community", - - "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-selected": "Accept selected", @@ -1380,30 +1328,22 @@ "cookies.consent.app.description.authentication": "Required for signing you in", - "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.description.preferences": "Required for saving your preferences", - - "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - - "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", - - "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", - "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.statistical": "Statistical", @@ -1428,8 +1368,6 @@ "curation-task.task.register-doi.label": "Register DOI", - - "curation.form.task-select.label": "Task:", "curation.form.submit": "Start", @@ -1448,8 +1386,6 @@ "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", - - "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", "deny-request-copy.email.subject": "Request copy of document", @@ -1462,14 +1398,10 @@ "deny-request-copy.success": "Successfully denied item request", - - "dso.name.untitled": "Untitled", "dso.name.unnamed": "Unnamed", - - "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.sub-level": "Create a new collection in", @@ -1656,11 +1588,8 @@ "feed.description": "Syndication feed", - "file-section.error.header": "Error obtaining files for this item", - - "footer.copyright": "copyright © 2002-{{ year }}", "footer.link.dspace": "DSpace software", @@ -1675,8 +1604,6 @@ "footer.link.feedback": "Send Feedback", - - "forgot-email.form.header": "Forgot Password", "forgot-email.form.info": "Enter the email address associated with the account.", @@ -1699,8 +1626,6 @@ "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", - - "forgot-password.title": "Forgot Password", "forgot-password.form.head": "Forgot Password", @@ -1729,7 +1654,6 @@ "forgot-password.form.submit": "Submit password", - "form.add": "Add more", "form.add-help": "Click here to add the current entry and to add another one", @@ -1798,8 +1722,6 @@ "form.repeatable.sort.tip": "Drop the item in the new position", - - "grant-deny-request-copy.deny": "Don't send copy", "grant-deny-request-copy.email.back": "Back", @@ -1830,8 +1752,6 @@ "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", - - "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", "grant-request-copy.email.subject": "Request copy of document", @@ -1844,7 +1764,6 @@ "grant-request-copy.success": "Successfully granted item request", - "health.breadcrumbs": "Health", "health-page.heading": "Health", @@ -1885,7 +1804,6 @@ "health-page.section.no-issues": "No issues detected", - "home.description": "", "home.breadcrumbs": "Home", @@ -1898,8 +1816,6 @@ "home.top-level-communities.help": "Select a community to browse its collections.", - - "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", @@ -1950,26 +1866,18 @@ "info.feedback.page_help": "Tha page related to your feedback", - - "item.alerts.private": "This item is non-discoverable", "item.alerts.withdrawn": "This item has been withdrawn", - - "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.title": "Edit item's Policies", - - "item.badge.private": "Non-discoverable", "item.badge.withdrawn": "Withdrawn", - - "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", @@ -1992,8 +1900,6 @@ "item.bitstreams.upload.title": "Upload bitstream", - - "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", @@ -2054,8 +1960,6 @@ "item.edit.bitstreams.upload-button": "Upload", - - "item.edit.delete.cancel": "Cancel", "item.edit.delete.confirm": "Delete", @@ -2074,7 +1978,6 @@ "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", - "item.edit.tabs.mapper.head": "Collection Mapper", "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", @@ -2157,8 +2060,6 @@ "item.edit.item-mapper.tabs.map": "Map new collections", - - "item.edit.metadata.add-button": "Add", "item.edit.metadata.discard-button": "Discard", @@ -2215,16 +2116,12 @@ "item.edit.metadata.save-button": "Save", - - "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.language": "Language", "item.edit.modify.overview.value": "Value", - - "item.edit.move.cancel": "Back", "item.edit.move.save-button": "Save", @@ -2251,8 +2148,6 @@ "item.edit.move.title": "Move item", - - "item.edit.private.cancel": "Cancel", "item.edit.private.confirm": "Make it non-discoverable", @@ -2265,8 +2160,6 @@ "item.edit.private.success": "The item is now non-discoverable", - - "item.edit.public.cancel": "Cancel", "item.edit.public.confirm": "Make it discoverable", @@ -2279,8 +2172,6 @@ "item.edit.public.success": "The item is now discoverable", - - "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.confirm": "Reinstate", @@ -2293,8 +2184,6 @@ "item.edit.reinstate.success": "The item was reinstated successfully", - - "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.edit.buttons.add": "Add", @@ -2325,10 +2214,8 @@ "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", - "item.edit.return": "Back", - "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", @@ -2336,6 +2223,7 @@ "item.edit.tabs.curate.head": "Curate", "item.edit.tabs.curate.title": "Item Edit - Curate", + "item.edit.curate.title": "Curate Item: {{item}}", "item.edit.tabs.metadata.head": "Metadata", @@ -2404,8 +2292,6 @@ "item.edit.tabs.view.title": "Item Edit - View", - - "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.confirm": "Withdraw", @@ -2420,7 +2306,6 @@ "item.orcid.return": "Back", - "item.listelement.badge": "Item", "item.page.description": "Description", @@ -2459,8 +2344,6 @@ "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", - - "item.page.abstract": "Abstract", "item.page.author": "Authors", @@ -2587,8 +2470,6 @@ "item.preview.oaire.fundingStream": "Funding Stream:", - - "item.select.confirm": "Confirm selected", "item.select.empty": "No items to show", @@ -2599,7 +2480,6 @@ "item.select.table.title": "Title", - "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.head": "Version History", @@ -2640,10 +2520,8 @@ "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", - "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", - "item.version.create.modal.header": "New version", "item.version.create.modal.text": "Create a new version for this item", @@ -2672,7 +2550,6 @@ "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", - "item.version.delete.modal.header": "Delete version", "item.version.delete.modal.text": "Do you want to delete version {{version}}?", @@ -2689,13 +2566,10 @@ "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", - "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", - - "itemtemplate.edit.metadata.add-button": "Add", "itemtemplate.edit.metadata.discard-button": "Discard", @@ -2750,8 +2624,6 @@ "itemtemplate.edit.metadata.save-button": "Save", - - "journal.listelement.badge": "Journal", "journal.page.description": "Description", @@ -2772,8 +2644,6 @@ "journal.search.title": "Journal Search", - - "journalissue.listelement.badge": "Journal Issue", "journalissue.page.description": "Description", @@ -2792,8 +2662,6 @@ "journalissue.page.titleprefix": "Journal Issue: ", - - "journalvolume.listelement.badge": "Journal Volume", "journalvolume.page.description": "Description", @@ -2806,7 +2674,6 @@ "journalvolume.page.volume": "Volume", - "iiifsearchable.listelement.badge": "Document Media", "iiifsearchable.page.titleprefix": "Document: ", @@ -2829,7 +2696,6 @@ "iiif.page.description": "Description: ", - "loading.bitstream": "Loading bitstream...", "loading.bitstreams": "Loading bitstreams...", @@ -2866,8 +2732,6 @@ "loading.top-level-communities": "Loading top-level communities...", - - "login.form.email": "Email address", "login.form.forgot-password": "Have you forgotten your password?", @@ -2892,24 +2756,18 @@ "login.breadcrumbs": "Login", - - "logout.form.header": "Log out from DSpace", "logout.form.submit": "Log out", "logout.title": "Logout", - - "menu.header.admin": "Management", "menu.header.image.logo": "Repository logo", "menu.header.admin.description": "Management menu", - - "menu.section.access_control": "Access Control", "menu.section.access_control_authorizations": "Authorizations", @@ -2918,12 +2776,8 @@ "menu.section.access_control_people": "People", - - "menu.section.admin_search": "Admin Search", - - "menu.section.browse_community": "This Community", "menu.section.browse_community_by_author": "By Author", @@ -2946,14 +2800,10 @@ "menu.section.browse_global_communities_and_collections": "Communities & Collections", - - "menu.section.control_panel": "Control Panel", "menu.section.curation_task": "Curation Task", - - "menu.section.edit": "Edit", "menu.section.edit_collection": "Collection", @@ -2962,8 +2812,6 @@ "menu.section.edit_item": "Item", - - "menu.section.export": "Export", "menu.section.export_collection": "Collection", @@ -2976,7 +2824,6 @@ "menu.section.export_batch": "Batch Export (ZIP)", - "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.admin_search": "Admin search menu section", @@ -3009,16 +2856,12 @@ "menu.section.icon.unpin": "Unpin sidebar", - - "menu.section.import": "Import", "menu.section.import_batch": "Batch Import (ZIP)", "menu.section.import_metadata": "Metadata", - - "menu.section.new": "New", "menu.section.new_collection": "Collection", @@ -3031,34 +2874,24 @@ "menu.section.new_process": "Process", - - "menu.section.pin": "Pin sidebar", "menu.section.unpin": "Unpin sidebar", - - "menu.section.processes": "Processes", "menu.section.health": "Health", - - "menu.section.registries": "Registries", "menu.section.registries_format": "Format", "menu.section.registries_metadata": "Metadata", - - "menu.section.statistics": "Statistics", "menu.section.statistics_task": "Statistics Task", - - "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.control_panel": "Toggle Control Panel section", @@ -3079,14 +2912,13 @@ "menu.section.toggle.statistics_task": "Toggle Statistics Task section", - "menu.section.workflow": "Administer Workflow", - "metadata-export-search.tooltip": "Export search results as CSV", - "metadata-export-search.submit.success": "The export was started successfully", - "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.success": "The export was started successfully", + + "metadata-export-search.submit.error": "Starting the export has failed", "mydspace.breadcrumbs": "MyDSpace", @@ -3172,8 +3004,6 @@ "mydspace.view-btn": "View", - - "nav.browse.header": "All of DSpace", "nav.community-browse.header": "By Community", @@ -3198,7 +3028,6 @@ "nav.search.button": "Submit search", - "nav.statistics.header": "Statistics", "nav.stop-impersonating": "Stop impersonating EPerson", @@ -3211,7 +3040,6 @@ "none.listelement.badge": "Item", - "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.no-title": "Untitled", @@ -3230,8 +3058,6 @@ "orgunit.page.titleprefix": "Organizational Unit: ", - - "pagination.options.description": "Pagination options", "pagination.results-per-page": "Results Per Page", @@ -3242,8 +3068,6 @@ "pagination.sort-direction": "Sort Options", - - "person.listelement.badge": "Person", "person.listelement.no-title": "No name found", @@ -3276,8 +3100,6 @@ "person.search.title": "Person Search", - - "process.new.select-parameters": "Parameters", "process.new.cancel": "Cancel", @@ -3318,8 +3140,6 @@ "process.new.breadcrumbs": "Create a new process", - - "process.detail.arguments": "Arguments", "process.detail.arguments.empty": "This process doesn't contain any arguments", @@ -3366,8 +3186,6 @@ "process.detail.delete.error": "Something went wrong when deleting the process", - - "process.overview.table.finish": "Finish time (UTC)", "process.overview.table.id": "Process ID", @@ -3404,8 +3222,6 @@ "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", - - "profile.breadcrumbs": "Update Profile", "profile.card.identify": "Identify", @@ -3492,8 +3308,6 @@ "project-relationships.search.results.head": "Project Search Results", - - "publication.listelement.badge": "Publication", "publication.page.description": "Description", @@ -3516,14 +3330,12 @@ "publication.search.title": "Publication Search", - "media-viewer.next": "Next", "media-viewer.previous": "Previous", "media-viewer.playlist": "Playlist", - "register-email.title": "New user registration", "register-page.create-profile.header": "Create Profile", @@ -3566,7 +3378,6 @@ "register-page.create-profile.submit.success.head": "Registration completed", - "register-page.registration.header": "New user registration", "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", @@ -3594,8 +3405,8 @@ "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", - "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", @@ -3604,6 +3415,7 @@ "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", @@ -3648,14 +3460,12 @@ "relationships.isFundingAgencyOf.OrgUnit": "Funder", - "repository.image.logo": "Repository logo", "repository.title": "DSpace Repository", "repository.title.prefix": "DSpace Repository :: ", - "resource-policies.add.button": "Add", "resource-policies.add.for.": "Add a new policy", @@ -3770,8 +3580,6 @@ "resource-policies.table.headers.title.for.collection": "Policies for Collection", - - "search.description": "", "search.switch-configuration.title": "Show", @@ -3782,7 +3590,6 @@ "search.search-form.placeholder": "Search the repository ...", - "search.filters.applied.f.author": "Author", "search.filters.applied.f.dateIssued.max": "End date", @@ -3815,8 +3622,6 @@ "search.filters.applied.f.withdrawn": "Withdrawn", - - "search.filters.filter.author.head": "Author", "search.filters.filter.author.placeholder": "Author name", @@ -3963,8 +3768,6 @@ "search.filters.filter.supervisedBy.label": "Search Supervised By", - - "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalVolume": "Journal Volume", @@ -3983,23 +3786,18 @@ "search.filters.withdrawn.false": "No", - "search.filters.head": "Filters", "search.filters.reset": "Reset filters", "search.filters.search.submit": "Submit", - - "search.form.search": "Search", "search.form.search_dspace": "All repository", "search.form.scope.all": "All of DSpace", - - "search.results.head": "Search Results", "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", @@ -4016,7 +3814,6 @@ "default-relationships.search.results.head": "Search Results", - "search.sidebar.close": "Back to results", "search.sidebar.filters.title": "Filters", @@ -4031,16 +3828,12 @@ "search.sidebar.settings.title": "Settings", - - "search.view-switch.show-detail": "Show detail", "search.view-switch.show-grid": "Show as grid", "search.view-switch.show-list": "Show as list", - - "sorting.ASC": "Ascending", "sorting.DESC": "Descending", @@ -4065,7 +3858,6 @@ "sorting.lastModified.DESC": "Last modified Descending", - "statistics.title": "Statistics", "statistics.header": "Statistics for {{ scope }}", @@ -4090,8 +3882,6 @@ "statistics.table.no-name": "(object name could not be loaded)", - - "submission.edit.breadcrumbs": "Edit Submission", "submission.edit.title": "Edit Submission", @@ -4120,7 +3910,6 @@ "submission.general.save-later": "Save for later", - "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.title": "Import metadata from an external source", @@ -4328,6 +4117,7 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", @@ -4343,9 +4133,11 @@ "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", @@ -4382,17 +4174,16 @@ "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", - - - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", @@ -4400,6 +4191,7 @@ "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Authors", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", + "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Publication": "Publications", @@ -4431,6 +4223,7 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", @@ -4446,11 +4239,13 @@ "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", @@ -4567,7 +4362,6 @@ "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", - "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", "submission.sections.status.errors.title": "Errors", @@ -4690,7 +4484,6 @@ "submission.sections.license.notgranted": "You must accept the license", - "submission.sections.sherpa.publication.information": "Publication information", "submission.sections.sherpa.publication.information.title": "Title", @@ -4743,14 +4536,10 @@ "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", - - "submission.submit.breadcrumbs": "New submission", "submission.submit.title": "New submission", - - "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", @@ -4763,17 +4552,14 @@ "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", - "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", "submission.workflow.generic.submit_select_reviewer-help": "", - "submission.workflow.generic.submit_score": "Rate", "submission.workflow.generic.submit_score-help": "", - "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", @@ -4802,8 +4588,6 @@ "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", - - "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.processing": "Processing...", @@ -4812,8 +4596,6 @@ "submission.workflow.tasks.generic.success": "Operation successful", - - "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", @@ -4822,7 +4604,6 @@ "submission.workflow.tasks.pool.show-detail": "Show detail", - "submission.workspace.generic.view": "View", "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", @@ -4899,7 +4680,6 @@ "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", - "thumbnail.default.alt": "Thumbnail Image", "thumbnail.default.placeholder": "No Thumbnail Available", @@ -4916,12 +4696,8 @@ "thumbnail.person.placeholder": "No Profile Picture Available", - - "title": "DSpace", - - "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.load-more": "Load more", @@ -4956,8 +4732,6 @@ "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", - - "supervisedWorkspace.search.results.head": "Supervised Items", "workspace.search.results.head": "Your submissions", @@ -4968,8 +4742,6 @@ "supervision.search.results.head": "Workflow and Workspace tasks", - - "workflow-item.edit.breadcrumbs": "Edit workflowitem", "workflow-item.edit.title": "Edit workflowitem", @@ -4990,7 +4762,6 @@ "workflow-item.delete.button.confirm": "Delete", - "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", @@ -5047,7 +4818,6 @@ "workflow-item.selectrevieweraction.button.confirm": "Confirm", - "workflow-item.scorereviewaction.notification.success.title": "Rating review", "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", @@ -5315,11 +5085,11 @@ "person.orcid.registry.queue": "ORCID Registry Queue", "person.orcid.registry.auth": "ORCID Authorizations", + "home.recent-submissions.head": "Recent Submissions", "listable-notification-object.default-message": "This object couldn't be retrieved", - "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", "system-wide-alert-banner.countdown.prefix": "In", @@ -5330,8 +5100,6 @@ "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", - - "menu.section.system-wide-alert": "System-wide Alert", "system-wide-alert.form.header": "System-wide Alert", @@ -5367,4 +5135,4 @@ "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", "admin.system-wide-alert.title": "System-wide Alerts", -} +} \ No newline at end of file From 134eac5f39791db671bca4460f973cbbb7b622ed Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 14 Jun 2023 08:53:41 +0300 Subject: [PATCH 792/833] src/assets: update fi.json5 Add a few Finnish language UI strings. --- src/assets/i18n/fi.json5 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index ca41138eda..62e7e6bffe 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -1922,6 +1922,9 @@ // "home.breadcrumbs": "Home", "home.breadcrumbs": "Etusivu", + // "home.search-form.placeholder": "Search the repository ...", + "home.search-form.placeholder": "Hae julkaisuarkistosta ...", + // "home.title": "DSpace Angular :: Home", "home.title": "DSpace Angular :: Etusivu", @@ -4020,6 +4023,8 @@ // "search.breadcrumbs": "Search", "search.breadcrumbs": "Hae", + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Hae julkaisuarkistosta ...", // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Tekijä", From ce517adf7d340f4e3043868877d595d782426483 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 14 Jun 2023 13:18:33 +0200 Subject: [PATCH 793/833] [DURACOM-155] lint fix --- .../edit-item-page/item-status/item-status.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/item-status/item-status.component.ts b/src/app/item-page/edit-item-page/item-status/item-status.component.ts index 27bc86d33e..828f8d7439 100644 --- a/src/app/item-page/edit-item-page/item-status/item-status.component.ts +++ b/src/app/item-page/edit-item-page/item-status/item-status.component.ts @@ -3,7 +3,7 @@ import { fadeIn, fadeInOut } from '../../../shared/animations/fade'; import { Item } from '../../../core/shared/item.model'; import { ActivatedRoute } from '@angular/router'; import { ItemOperation } from '../item-operation/itemOperation.model'; -import { distinctUntilChanged, first, map, mergeMap, switchMap, toArray } from 'rxjs/operators'; +import { distinctUntilChanged, map, mergeMap, switchMap, toArray } from 'rxjs/operators'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; import { getItemEditRoute, getItemPageRoute } from '../../item-page-routing-paths'; From 93fcbe79aa2bdd9e41f8d6a22c455e211d227f50 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 12:50:47 -0400 Subject: [PATCH 794/833] Make grant message an optional addition; main text is in backend. --- .../email-request-copy.component.html | 5 +--- .../grant-request-copy.component.ts | 30 ------------------- src/assets/i18n/en.json5 | 6 ++-- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/src/app/request-copy/email-request-copy/email-request-copy.component.html b/src/app/request-copy/email-request-copy/email-request-copy.component.html index d7633b0334..70146ab52c 100644 --- a/src/app/request-copy/email-request-copy/email-request-copy.component.html +++ b/src/app/request-copy/email-request-copy/email-request-copy.component.html @@ -8,10 +8,7 @@
    - -
    - {{ 'grant-deny-request-copy.email.message.empty' | translate }} -
    +
    diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts index 79bae360a0..3f0fd74bc7 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -9,12 +9,8 @@ import { import { RemoteData } from '../../core/data/remote-data'; import { AuthService } from '../../core/auth/auth.service'; import { TranslateService } from '@ngx-translate/core'; -import { combineLatest as observableCombineLatest } from 'rxjs'; import { ItemDataService } from '../../core/data/item-data.service'; -import { EPerson } from '../../core/eperson/models/eperson.model'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -import { Item } from '../../core/shared/item.model'; -import { isNotEmpty } from '../../shared/empty.util'; import { ItemRequestDataService } from '../../core/data/item-request-data.service'; import { RequestCopyEmail } from '../email-request-copy/request-copy-email.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; @@ -54,8 +50,6 @@ export class GrantRequestCopyComponent implements OnInit { private route: ActivatedRoute, private authService: AuthService, private translateService: TranslateService, - private itemDataService: ItemDataService, - private nameService: DSONameService, private itemRequestService: ItemRequestDataService, private notificationsService: NotificationsService, ) { @@ -69,31 +63,7 @@ export class GrantRequestCopyComponent implements OnInit { redirectOn4xx(this.router, this.authService), ); - const msgParams$ = observableCombineLatest([ - this.itemRequestRD$.pipe(getFirstSucceededRemoteDataPayload()), - this.authService.getAuthenticatedUserFromStore(), - ]).pipe( - switchMap(([itemRequest, user]: [ItemRequest, EPerson]) => { - return this.itemDataService.findById(itemRequest.itemId).pipe( - getFirstSucceededRemoteDataPayload(), - map((item: Item) => { - const uri = item.firstMetadataValue('dc.identifier.uri'); - return Object.assign({ - recipientName: itemRequest.requestName, - itemUrl: isNotEmpty(uri) ? uri : item.handle, - itemName: this.nameService.getName(item), - authorName: this.nameService.getName(user), - authorEmail: user.email, - }); - }), - ); - }), - ); - this.subject$ = this.translateService.get('grant-request-copy.email.subject'); - this.message$ = msgParams$.pipe( - switchMap((params) => this.translateService.get('grant-request-copy.email.message', params)), - ); } /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 480bf8834e..b1bb88fce6 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1726,7 +1726,7 @@ "grant-deny-request-copy.email.back": "Back", - "grant-deny-request-copy.email.message": "Message", + "grant-deny-request-copy.email.message": "Optional additional message", "grant-deny-request-copy.email.message.empty": "Please enter a message", @@ -1752,15 +1752,13 @@ "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", - "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.subject": "Request copy of document", "grant-request-copy.error": "An error occurred", "grant-request-copy.header": "Grant document copy request", - "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", "grant-request-copy.success": "Successfully granted item request", From 004645b5e44a10b93aa26b9b6bbd59c0e0400f28 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 13:28:30 -0400 Subject: [PATCH 795/833] Remove lint. --- .../grant-request-copy/grant-request-copy.component.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts index 3f0fd74bc7..baf078df76 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -9,8 +9,6 @@ import { import { RemoteData } from '../../core/data/remote-data'; import { AuthService } from '../../core/auth/auth.service'; import { TranslateService } from '@ngx-translate/core'; -import { ItemDataService } from '../../core/data/item-data.service'; -import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { ItemRequestDataService } from '../../core/data/item-request-data.service'; import { RequestCopyEmail } from '../email-request-copy/request-copy-email.model'; import { NotificationsService } from '../../shared/notifications/notifications.service'; From 2d716c7630b03be67d1df950baa808f8a07fbb96 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 13:57:38 -0400 Subject: [PATCH 796/833] Remove test which is no longer valid. --- .../grant-request-copy.component.spec.ts | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts b/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts index b9d51f710d..32fef125ea 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.spec.ts @@ -123,19 +123,6 @@ describe('GrantRequestCopyComponent', () => { spyOn(translateService, 'get').and.returnValue(observableOf('translated-message')); }); - it('message$ should be parameterized correctly', (done) => { - component.message$.subscribe(() => { - expect(translateService.get).toHaveBeenCalledWith(jasmine.anything(), Object.assign({ - recipientName: itemRequest.requestName, - itemUrl: itemUrl, - itemName: itemName, - authorName: user.name, - authorEmail: user.email, - })); - done(); - }); - }); - describe('grant', () => { let email: RequestCopyEmail; From 2f06a7cb17a3ede463789cba27f47858bb8961c2 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 14 Jun 2023 18:26:55 +0200 Subject: [PATCH 797/833] [CST-5729] Change in order to save header only if configured and existing --- server.ts | 27 +++++++++++++++++++++------ src/config/cache-config.interface.ts | 2 +- src/environments/environment.test.ts | 1 + 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/server.ts b/server.ts index f73bd1b774..3bbb28820a 100644 --- a/server.ts +++ b/server.ts @@ -375,13 +375,13 @@ function cacheCheck(req, res, next) { // If cached copy exists, return it to the user. if (cachedCopy && cachedCopy.page) { - if (cachedCopy.headers && Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { - environment.cache.serverSide.headers.forEach((header) => { - if (cachedCopy.headers[header.toLowerCase()]) { + if (cachedCopy.headers) { + Object.keys(cachedCopy.headers).forEach((header) => { + if (cachedCopy.headers[header]) { if (environment.cache.serverSide.debug) { console.log(`Restore cached ${header} header`); } - res.setHeader(header, cachedCopy.headers[header.toLowerCase()]); + res.setHeader(header, cachedCopy.headers[header]); } }); } @@ -462,8 +462,8 @@ function saveToCache(req, page: any) { // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) if (key.startsWith('/reload')) { return; } - // Retrieve response headers - const headers = req.res.getHeaders(); + // Retrieve response headers to save, if any + const headers = retrieveHeaders(req.res); // If bot cache is enabled, save it to that cache if it doesn't exist or is expired // (NOTE: has() will return false if page is expired in cache) if (botCacheEnabled() && !botCache.has(key)) { @@ -479,6 +479,21 @@ function saveToCache(req, page: any) { } } +function retrieveHeaders(response) { + const headers = Object.create({}); + if (Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { + environment.cache.serverSide.headers.forEach((header) => { + if (response.hasHeader(header)) { + if (environment.cache.serverSide.debug) { + console.log(`Save ${header} header to cache`); + } + headers[header] = response.getHeader(header); + } + }); + } + + return headers; +} /** * Whether a user is authenticated or not */ diff --git a/src/config/cache-config.interface.ts b/src/config/cache-config.interface.ts index 14af509bbf..73520c95ea 100644 --- a/src/config/cache-config.interface.ts +++ b/src/config/cache-config.interface.ts @@ -13,7 +13,7 @@ export interface CacheConfig extends Config { serverSide: { // Debug server-side caching. Set to true to see cache hits/misses/refreshes in console logs. debug: boolean, - // List of headers to restore from the cache hit + // List of response headers to save into the cache headers: string[], // Cache specific to known bots. Allows you to serve cached contents to bots only. botCache: { diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 9fe58f868c..cb9d2c7130 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -59,6 +59,7 @@ export const environment: BuildConfig = { // In-memory cache of server-side rendered pages. Disabled in test environment (max=0) serverSide: { debug: false, + headers: ['Link'], botCache: { max: 0, timeToLive: 24 * 60 * 60 * 1000, // 1 day From fda4ef77e49b5eee2cafdbf8eec553c60b21a64b Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 15 Jun 2023 12:42:29 +0200 Subject: [PATCH 798/833] [DURACOM-152] Section visibility read-only --- .../sections/form/section-form.component.spec.ts | 2 ++ .../sections/form/section-form.component.ts | 16 ++++++++++++---- src/app/submission/sections/sections.service.ts | 5 +++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 889f17c393..346a22fa84 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -249,6 +249,8 @@ describe('SubmissionSectionFormComponent test suite', () => { formConfigService.findByHref.and.returnValue(createSuccessfulRemoteDataObject$(testFormConfiguration)); sectionsServiceStub.getSectionData.and.returnValue(observableOf(sectionData)); sectionsServiceStub.getSectionServerErrors.and.returnValue(observableOf([])); + sectionsServiceStub.isSectionReadOnly.and.returnValue(observableOf(false)); + spyOn(comp, 'initForm'); spyOn(comp, 'subscriptions'); diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 326d277ffb..a89a9aa886 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -118,6 +118,12 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { protected subs: Subscription[] = []; protected submissionObject: SubmissionObject; + + /** + * A flag representing if this section is readonly + */ + protected isSectionReadonly = false; + /** * The FormComponent reference */ @@ -175,13 +181,15 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { this.sectionService.getSectionData(this.submissionId, this.sectionData.id, this.sectionData.sectionType), this.submissionObjectService.findById(this.submissionId, true, false, followLink('item')).pipe( getFirstSucceededRemoteData(), - getRemoteDataPayload()) + getRemoteDataPayload()), + this.sectionService.isSectionReadOnly(this.submissionId, this.sectionData.id, this.submissionService.getSubmissionScope()) ])), take(1)) - .subscribe(([sectionData, submissionObject]: [WorkspaceitemSectionFormObject, SubmissionObject]) => { + .subscribe(([sectionData, submissionObject, isSectionReadOnly]: [WorkspaceitemSectionFormObject, SubmissionObject, boolean]) => { if (isUndefined(this.formModel)) { // this.sectionData.errorsToShow = []; this.submissionObject = submissionObject; + this.isSectionReadonly = isSectionReadOnly; // Is the first loading so init form this.initForm(sectionData); this.sectionData.data = sectionData; @@ -286,11 +294,11 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { this.formConfig, this.collectionId, sectionData, - this.submissionService.getSubmissionScope() + this.submissionService.getSubmissionScope(), + this.isSectionReadonly ); const sectionMetadata = this.sectionService.computeSectionConfiguredMetadata(this.formConfig); this.sectionService.updateSectionData(this.submissionId, this.sectionData.id, sectionData, this.sectionData.errorsToShow, this.sectionData.serverValidationErrors, sectionMetadata); - } catch (e) { const msg: string = this.translate.instant('error.submission.sections.init-form-error') + e.toString(); const sectionError: SubmissionSectionError = { diff --git a/src/app/submission/sections/sections.service.ts b/src/app/submission/sections/sections.service.ts index cc2802dba7..0ea6232237 100644 --- a/src/app/submission/sections/sections.service.ts +++ b/src/app/submission/sections/sections.service.ts @@ -334,8 +334,9 @@ export class SectionsService { filter((sectionObj) => hasValue(sectionObj)), map((sectionObj: SubmissionSectionObject) => { return isNotEmpty(sectionObj.visibility) - && sectionObj.visibility.other === 'READONLY' - && submissionScope !== SubmissionScopeType.WorkspaceItem; + && ((sectionObj.visibility.other === 'READONLY' && submissionScope !== SubmissionScopeType.WorkspaceItem) + || (sectionObj.visibility.main === 'READONLY' && submissionScope === SubmissionScopeType.WorkspaceItem) + ); }), distinctUntilChanged()); } From 47543b42373a7c0a95600a7e8ef2943dcbc3ef51 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 15 Jun 2023 17:18:00 +0200 Subject: [PATCH 799/833] [CST-5729] Fix duplicate links for download page --- .../bitstream-download-page/bitstream-download-page.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index cf8d8e7767..0b8e6a66e5 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -108,7 +108,6 @@ export class BitstreamDownloadPageComponent implements OnInit { signpostingLinks.forEach((link: SignpostingLink) => { links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}"` + (isNotEmpty(link.type) ? ` ; type="${link.type}" ` : ' '); - links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; }); this.responseService.setHeader('Link', links); From 4c6cae911bcf7e55484c2d7411161f4e2c567272 Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Wed, 14 Jun 2023 12:03:11 +0200 Subject: [PATCH 800/833] [DURACOM-157] Multiple uploaders in the same page don't work --- src/app/shared/upload/uploader/uploader.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/shared/upload/uploader/uploader.component.html b/src/app/shared/upload/uploader/uploader.component.html index c55a3eee1a..88dc5926e4 100644 --- a/src/app/shared/upload/uploader/uploader.component.html +++ b/src/app/shared/upload/uploader/uploader.component.html @@ -22,10 +22,10 @@ {{dropMsg | translate}}{{'uploader.or' | translate}} -
    From d00ad0cd0e33e8eb3590768e56e64f1e24e694ba Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Fri, 16 Jun 2023 13:27:51 +0200 Subject: [PATCH 801/833] [DURACOM-152] Field visibility --- .../submission/submission-field-scope-type.ts | 4 ++++ .../core/submission/submission-scope-type.ts | 2 +- .../form/builder/parsers/field-parser.ts | 22 ++++++++++++++----- .../shared/form/builder/parsers/row-parser.ts | 22 +++++++++++++------ 4 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 src/app/core/submission/submission-field-scope-type.ts diff --git a/src/app/core/submission/submission-field-scope-type.ts b/src/app/core/submission/submission-field-scope-type.ts new file mode 100644 index 0000000000..4a9292ec3d --- /dev/null +++ b/src/app/core/submission/submission-field-scope-type.ts @@ -0,0 +1,4 @@ +export enum SubmissionFieldScopeType { + WorkspaceItem = 'SUBMISSION', + WorkflowItem = 'WORKFLOW', +} diff --git a/src/app/core/submission/submission-scope-type.ts b/src/app/core/submission/submission-scope-type.ts index 6ed32d3b4e..f319e5c473 100644 --- a/src/app/core/submission/submission-scope-type.ts +++ b/src/app/core/submission/submission-scope-type.ts @@ -1,4 +1,4 @@ export enum SubmissionScopeType { WorkspaceItem = 'WORKSPACE', - WorkflowItem = 'WORKFLOW' + WorkflowItem = 'WORKFLOW', } diff --git a/src/app/shared/form/builder/parsers/field-parser.ts b/src/app/shared/form/builder/parsers/field-parser.ts index e118ca7add..7ea55d4454 100644 --- a/src/app/shared/form/builder/parsers/field-parser.ts +++ b/src/app/shared/form/builder/parsers/field-parser.ts @@ -24,6 +24,7 @@ import { RelationshipOptions } from '../models/relationship-options.model'; import { VocabularyOptions } from '../../../../core/submission/vocabularies/models/vocabulary-options.model'; import { ParserType } from './parser-type'; import { isNgbDateStruct } from '../../../date.util'; +import { SubmissionScopeType } from '../../../../core/submission/submission-scope-type'; export const SUBMISSION_ID: InjectionToken = new InjectionToken('submissionId'); export const CONFIG_DATA: InjectionToken = new InjectionToken('configData'); @@ -282,7 +283,7 @@ export abstract class FieldParser { controlModel.id = (this.fieldId).replace(/\./g, '_'); // Set read only option - controlModel.readOnly = this.parserOptions.readOnly || this.isFieldReadOnly(this.configData.visibility, this.parserOptions.submissionScope); + controlModel.readOnly = this.parserOptions.readOnly || this.isFieldReadOnly(this.configData.visibility, this.configData.scope, this.parserOptions.submissionScope); controlModel.disabled = controlModel.readOnly; if (hasValue(this.configData.selectableRelationship)) { controlModel.relationship = Object.assign(new RelationshipOptions(), this.configData.selectableRelationship); @@ -322,14 +323,25 @@ export abstract class FieldParser { } /** - * Check if a field is read-only with the given scope + * Checks if a field is read-only with the given scope. + * The field is readonly when submissionScope is WORKSPACE and the main visibility is READONLY + * or when submissionScope is WORKFLOW and the other visibility is READONLY * @param visibility * @param submissionScope */ - private isFieldReadOnly(visibility: SectionVisibility, submissionScope: string) { + private isFieldReadOnly(visibility: SectionVisibility, fieldScope: string, submissionScope: string) { return isNotEmpty(submissionScope) - && isNotEmpty(visibility) - && visibility.main === VisibilityType.READONLY; + && isNotEmpty(fieldScope) + && isNotEmpty(visibility) + && (( + submissionScope === SubmissionScopeType.WorkspaceItem + && visibility.main === VisibilityType.READONLY + ) + || + (visibility.other === VisibilityType.READONLY + && submissionScope === SubmissionScopeType.WorkflowItem + ) + ); } /** diff --git a/src/app/shared/form/builder/parsers/row-parser.ts b/src/app/shared/form/builder/parsers/row-parser.ts index 6602e53714..3f5b4a04c6 100644 --- a/src/app/shared/form/builder/parsers/row-parser.ts +++ b/src/app/shared/form/builder/parsers/row-parser.ts @@ -1,3 +1,4 @@ +import { SubmissionFieldScopeType } from './../../../../core/submission/submission-field-scope-type'; import { SectionVisibility } from './../../../../submission/objects/section-visibility.model'; import { Injectable, Injector } from '@angular/core'; @@ -13,7 +14,7 @@ import { ParserOptions } from './parser-options'; import { ParserType } from './parser-type'; import { setLayout } from './parser.utils'; import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from '../ds-dynamic-form-ui/ds-dynamic-form-constants'; -import { VisibilityType } from '../../../../submission/sections/visibility-type'; +import { SubmissionScopeType } from '../../../../core/submission/submission-scope-type'; export const ROW_ID_PREFIX = 'df-row-group-config-'; @@ -125,18 +126,25 @@ export class RowParser { } /** - * Check if the field is hidden or not, based on the visibility and the submission scope + * Check if the field is hidden or not. + * It is hidden when we do have the scope, + * but we do not have the visibility, + * also the field scope should be different from the submissionScope. * @param visibility The visibility of the field * @param scope the scope of the field * @param submissionScope the scope of the submission * @returns If the field is hidden or not */ private isHidden(visibility: SectionVisibility, scope: string, submissionScope: string): boolean { - return isEmpty(visibility) - || (isNotEmpty(visibility) && visibility.main !== VisibilityType.READONLY) - && isNotEmpty(submissionScope) - && (isNotEmpty(scope) - && scope !== submissionScope); + return isNotEmpty(scope) + && ( + isEmpty(visibility) + && ( + submissionScope === SubmissionScopeType.WorkspaceItem && scope !== SubmissionFieldScopeType.WorkspaceItem + || + submissionScope === SubmissionScopeType.WorkflowItem && scope !== SubmissionFieldScopeType.WorkflowItem + ) + ); } filterScopedFields(fields: FormFieldModel[], submissionScope): FormFieldModel[] { From 69726f6fa0f1347158ae336abaf2a7188c7eb421 Mon Sep 17 00:00:00 2001 From: Sascha Szott Date: Fri, 16 Jun 2023 15:00:52 +0200 Subject: [PATCH 802/833] resolve German translation differences --- src/assets/i18n/de.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/de.json5 b/src/assets/i18n/de.json5 index 71dfabb1c0..b03dc21e5a 100644 --- a/src/assets/i18n/de.json5 +++ b/src/assets/i18n/de.json5 @@ -262,7 +262,7 @@ "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", - "admin.registries.schema.fields.table.scopenote": "Gültigkeitsbereich", + "admin.registries.schema.fields.table.scopenote": "Geltungs- bzw. Gültigkeitsbereich", // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Metadatenfeld anlegen", @@ -277,7 +277,7 @@ "admin.registries.schema.form.qualifier": "Qualifizierer", // "admin.registries.schema.form.scopenote": "Scope Note", - "admin.registries.schema.form.scopenote": "Geltungsbereich", + "admin.registries.schema.form.scopenote": "Geltungs- bzw. Gültigkeitsbereich", // "admin.registries.schema.head": "Metadata Schema", "admin.registries.schema.head": "Metadatenschema", From 42026b36d52b4468cc93b6e1f0ad8c108bad9211 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Fri, 16 Jun 2023 15:31:45 +0200 Subject: [PATCH 803/833] [DURACOM-152] refactored concatenated fields visibility --- .../ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts | 2 ++ src/app/shared/form/builder/parsers/concat-field-parser.ts | 6 +----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts index 1d6037a409..dc7c796648 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts @@ -46,6 +46,7 @@ export class DynamicConcatModel extends DynamicFormGroupModel { @serializable() submissionId: string; @serializable() hasSelectableMetadata: boolean; @serializable() metadataValue: MetadataValue; + @serializable() readOnly?: boolean; isCustomGroup = true; valueUpdates: Subject; @@ -65,6 +66,7 @@ export class DynamicConcatModel extends DynamicFormGroupModel { this.valueUpdates = new Subject(); this.valueUpdates.subscribe((value: string) => this.value = value); this.typeBindRelations = config.typeBindRelations ? config.typeBindRelations : []; + this.readOnly = config.disabled; } get value() { diff --git a/src/app/shared/form/builder/parsers/concat-field-parser.ts b/src/app/shared/form/builder/parsers/concat-field-parser.ts index b849698857..e86de70c81 100644 --- a/src/app/shared/form/builder/parsers/concat-field-parser.ts +++ b/src/app/shared/form/builder/parsers/concat-field-parser.ts @@ -19,8 +19,6 @@ import { SUBMISSION_ID } from './field-parser'; import { DsDynamicInputModel, DsDynamicInputModelConfig } from '../ds-dynamic-form-ui/models/ds-dynamic-input.model'; -import { VisibilityType } from '../../../../submission/sections/visibility-type'; -import isEqual from 'lodash/isEqual'; export class ConcatFieldParser extends FieldParser { @@ -85,9 +83,7 @@ export class ConcatFieldParser extends FieldParser { input1ModelConfig.required = true; } - if (isNotEmpty(this.configData.visibility) && isEqual(this.configData.visibility.main, VisibilityType.READONLY)) { - concatGroup.disabled = true; - } + concatGroup.disabled = input1ModelConfig.readOnly; if (isNotEmpty(this.firstPlaceholder)) { input1ModelConfig.placeholder = this.firstPlaceholder; From adf8cc7bc5a6a69a8ab9d7fc16507e84a1c0ba37 Mon Sep 17 00:00:00 2001 From: Ricardo Saraiva <122451983+rsaraivac@users.noreply.github.com> Date: Fri, 16 Jun 2023 17:18:34 +0100 Subject: [PATCH 804/833] Update pt-PT.json5 Incorporates some revised translations, adds and updates newly introduced translation keys. --- src/assets/i18n/pt-PT.json5 | 280 +++++++++++++++++++++++------------- 1 file changed, 177 insertions(+), 103 deletions(-) diff --git a/src/assets/i18n/pt-PT.json5 b/src/assets/i18n/pt-PT.json5 index c622c4c257..a187ff927c 100644 --- a/src/assets/i18n/pt-PT.json5 +++ b/src/assets/i18n/pt-PT.json5 @@ -1,6 +1,6 @@ { - // Dspace v7.x > i18n pt-PT > last reviewed 05-06-2023 + // Dspace v7.x > i18n pt-PT > last reviewed 16-06-2023 // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Não está autorizado a aceder a esta página. Pode utilizar o botão em baixo para voltar à página de início.", @@ -336,13 +336,13 @@ "admin.access-control.epeople.actions.delete": "Apagar utilizador", // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", - "admin.access-control.epeople.actions.impersonate": "Assumir o papel do Utilizador", + "admin.access-control.epeople.actions.impersonate": "Assumir papel de utilizador", // "admin.access-control.epeople.actions.reset": "Reset password", "admin.access-control.epeople.actions.reset": "Redefinir password", // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", - "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel do utilizador", + "admin.access-control.epeople.actions.stop-impersonating": "Deixar de assumir o papel de utilizador", // "admin.access-control.epeople.breadcrumbs": "EPeople", "admin.access-control.epeople.breadcrumbs": "Utilizadores", @@ -777,19 +777,19 @@ "admin.search.item.withdraw": "Retirar", // "admin.search.title": "Administrative Search", - "admin.search.title": "Pesquisa Administrativa", + "admin.search.title": "Pesquisa administrativa", // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Pesquisa administrativa", // "admin.workflow.breadcrumbs": "Administer Workflow", - "admin.workflow.breadcrumbs": "Gestão do workflow", + "admin.workflow.breadcrumbs": "Gestão do fluxo de trabalho", // "admin.workflow.title": "Administer Workflow", - "admin.workflow.title": "Gestão do workflow", + "admin.workflow.title": "Gestão do fluxo de trabalho", // "admin.workflow.item.workflow": "Workflow", - "admin.workflow.item.workflow": "Workflow", + "admin.workflow.item.workflow": "Fluxo de trabalho", // "admin.workflow.item.workspace": "Workspace", "admin.workflow.item.workspace": "Área de trabalho", @@ -825,11 +825,14 @@ "admin.batch-import.page.header": "Importação em lote (batch)", // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", - "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros .csv que contenham operações em lote de metadados", + "admin.metadata-import.page.help": "Pode arrastar ou procurar ficheiros .csv que contenham 'revisões' de metadados em lote", // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", "admin.batch-import.page.help": "Selecione a coleção para a qual pretende importar. Em seguida, largue ou selecione ficheiro .zip em formato Simple Archive Format (SAF) que inclua os itens a importar.", + // "admin.batch-import.page.toggle.help": "It is possible to perform import either with file upload or via URL, use above toggle to set the input source", + "admin.batch-import.page.toggle.help": "É possível efetuar a importação com o carregamento de ficheiros ou através de URL. Utilize o botão de seleção em cima para definir a fonte de entrada", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Arraste ficheiro .csv para importar metadados", @@ -854,9 +857,21 @@ // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Selecione um ficheiro!", + // "admin.metadata-import.page.error.addFileUrl": "Insert file url first!", + "admin.metadata-import.page.error.addFileUrl": "Insira primeiro o URL do ficheiro!", + // "admin.batch-import.page.error.addFile": "Select Zip file first!", "admin.batch-import.page.error.addFile": "Selecione primeiro o ficheiro .zip!", + // "admin.metadata-import.page.toggle.upload": "Upload", + "admin.metadata-import.page.toggle.upload": "Carregar", + + // "admin.metadata-import.page.toggle.url": "URL", + "admin.metadata-import.page.toggle.url": "URL", + + // "admin.metadata-import.page.urlMsg": "Insert the batch ZIP url to import", + "admin.metadata-import.page.urlMsg": "Insira o URL do lote ZIP a importar", + // "admin.metadata-import.page.validateOnly": "Validate Only", "admin.metadata-import.page.validateOnly": "Validar", @@ -1028,6 +1043,9 @@ // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Ocorreu um erro ao guardar o formato do ficheiro", + // "bitstream.edit.notifications.error.primaryBitstream.title": "An error occurred saving the primary bitstream", + "bitstream.edit.notifications.error.primaryBitstream.title": "Ocorreu um erro ao guardar o ficheiro primário", + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", "bitstream.edit.form.iiifLabel.label": "IIIF Label", @@ -1130,6 +1148,9 @@ // "browse.comcol.by.subject": "By Subject", "browse.comcol.by.subject": "Por assunto", + // "browse.comcol.by.srsc": "By Subject Category", + "browse.comcol.by.srsc": "Por vocabulário controlado (SRSC)", + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Por título", @@ -1160,6 +1181,9 @@ // "browse.metadata.subject.breadcrumbs": "Browse by Subject", "browse.metadata.subject.breadcrumbs": "Percorrer por assunto", + // "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.srsc.breadcrumbs": "Percorrer por vocabulário controlado (SRSC)", + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Percorrer por título", @@ -1241,6 +1265,12 @@ // "browse.startsWith.type_text": "Filter results by typing the first few letters", "browse.startsWith.type_text": "Filtrar resultados inserindo as primeiras letras", + // "browse.startsWith.input": "Filter", + "browse.startsWith.input": "Filtrar", + + // "browse.taxonomy.button": "Browse", + "browse.taxonomy.button": "Pesquisar", + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title": "Percorrer {{ collection }} por {{ field }}{{ startsWith }} {{ value }}", @@ -1287,7 +1317,7 @@ "collection.delete.head": "Apagar coleção", // "collection.delete.notification.fail": "Collection could not be deleted", - "collection.delete.notification.fail": "Coleção não pode ser apagada", + "collection.delete.notification.fail": "Não foi possível apagar a coleção", // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Apagou a coleção com sucesso", @@ -1437,7 +1467,7 @@ "collection.edit.tabs.source.form.errors.oaiSource.required": "Deve indicar o identificador da coleção a ser agregado (set).", // "collection.edit.tabs.source.form.harvestType": "Content being harvested", - "collection.edit.tabs.source.form.harvestType": "Os conteúdo estão a ser agregados", + "collection.edit.tabs.source.form.harvestType": "Os conteúdos estão a ser agregados", // "collection.edit.tabs.source.form.head": "Configure an external source", "collection.edit.tabs.source.form.head": "Configure uma fonte externa", @@ -1559,7 +1589,7 @@ // "collection.page.edit": "Edit this collection", "collection.page.edit": "Editar esta coleção", - // "collection.page.handle": "Permanent URI for this collection:", + // "collection.page.handle": "Permanent URI for this collection", "collection.page.handle": "URI permanente para esta coleção:", // "collection.page.license": "License", @@ -1955,11 +1985,11 @@ // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Informação que recolhemos", - // "cookies.consent.content-modal.services": "Services", - "cookies.consent.content-modal.services": "Serviços", + // "cookies.consent.content-modal.services": "services", + "cookies.consent.content-modal.services": "serviços", - // "cookies.consent.content-modal.service": "Service", - "cookies.consent.content-modal.service": "Serviço", + // "cookies.consent.content-modal.service": "service", + "cookies.consent.content-modal.service": "serviço", // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Autenticação", @@ -1977,7 +2007,7 @@ "cookies.consent.app.title.acknowledgement": "Termos de Uso", // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", - "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os 'Termos de Uso' e 'Consentimentos'", + "cookies.consent.app.description.acknowledgement": "Obrigatório para guardar os nossos 'Termos de Uso' e 'Consentimentos'", // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", @@ -2333,6 +2363,26 @@ // "error.validation.groupExists": "This group already exists", "error.validation.groupExists": "Este grupo já existe!", + // "error.validation.metadata.name.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Element & Qualifier fields instead", + + // "error.validation.metadata.name.max-length": "This field may not contain more than 32 characters", + "error.validation.metadata.name.max-length": "Este campo não pode conter mais de 32 caracteres", + + // "error.validation.metadata.namespace.max-length": "This field may not contain more than 256 characters", + "error.validation.metadata.namespace.max-length": "Este campo não pode conter mais de 256 caracteres", + + // "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, commas or spaces. Please use the Qualifier field instead", + "error.validation.metadata.element.invalid-pattern": "Este campo não pode conter pontos, vírgulas ou espaços. Ao invés, utilize o campo 'Qualificador'", + + // "error.validation.metadata.element.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.element.max-length": "Este campo não pode conter mais de 64 caracteres", + + // "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots, commas or spaces", + "error.validation.metadata.qualifier.invalid-pattern": "Este campo não pode conter pontos, vírgulas ou espaços.", + + // "error.validation.metadata.qualifier.max-length": "This field may not contain more than 64 characters", + "error.validation.metadata.qualifier.max-length": "Este campo não pode conter mais de 64 caracteres.", + // "feed.description": "Syndication feed", "feed.description": "Feed", @@ -2343,7 +2393,7 @@ "footer.copyright": "Copyright © 2003-{{ year }}", // "footer.link.dspace": "DSpace software", - "footer.link.dspace": "Software DSpace", + "footer.link.dspace": "Powered by DSpace", // "footer.link.lyrasis": "LYRASIS", "footer.link.lyrasis": "LYRASIS", @@ -2543,8 +2593,8 @@ // "grant-deny-request-copy.email.back": "Back", "grant-deny-request-copy.email.back": "Voltar", - // "grant-deny-request-copy.email.message": "Message", - "grant-deny-request-copy.email.message": "Mensagem", + // "grant-deny-request-copy.email.message": "Optional additional message", + "grant-deny-request-copy.email.message": "Mensagem adicional opcional", // "grant-deny-request-copy.email.message.empty": "Please enter a message", "grant-deny-request-copy.email.message.empty": "Por favor insira uma mensagem", @@ -2582,9 +2632,6 @@ // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", "grant-deny-request-copy.processed": "Este pedido já foi processado. Pode utilizar o botão em baixo para voltar para a página principal.", - // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", - "grant-request-copy.email.message": "Caro {{ recipientName }},\nEm resposta ao seu pedido de cópia, tenho o prazer de lhe enviar em anexo uma cópia do(s) ficheiro(s) relativo(s) ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\nCom os melhores cumprimentos,\n{{ authorName }} <{{ authorEmail }}>", - // "grant-request-copy.email.subject": "Request copy of document", "grant-request-copy.email.subject": "Pedido de cópia de documento", @@ -2594,7 +2641,7 @@ // "grant-request-copy.header": "Grant document copy request", "grant-request-copy.header": "Conceder cópia de documento", - // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + // "grant-request-copy.intro": "A message will be sent to the applicant of the request. The requested document(s) will be attached.", "grant-request-copy.intro": "Esta mensagem será enviada ao requerente do pedido de cópia. Os ficheiros solicitado(s) serão anexado(s) à mensagem.", // "grant-request-copy.success": "Successfully granted item request", @@ -2702,6 +2749,9 @@ // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Termos de Uso", + // "info.end-user-agreement.hosting-country": "the United States", + "info.end-user-agreement.hosting-country": "Portugal", + // "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.breadcrumbs": "Política de Privacidade", @@ -3613,19 +3663,8 @@ // "item.preview.dc.relation.issn": "ISSN", "item.preview.dc.relation.issn": "ISSN", - - // "item.preview.dc.relation.eissn": "EISSN", - "item.preview.dc.relation.eissn": "EISSN", - // "item.preview.dc.identifier.isbn": "ISBN", "item.preview.dc.identifier.isbn": "ISBN", - - // "item.preview.dc.identifier.eisbn": "EISBN", - "item.preview.dc.identifier.eisbn": "EISBN", - - // "item.preview.dc.identifier.tid": "TID", - "item.preview.dc.identifier.tid": "TID", - // "item.preview.dc.identifier": "Identifier:", "itemm.preview.dc.identifier": "Identificador:", @@ -3635,6 +3674,9 @@ // "item.preview.dc.identifier.doi": "DOI", "item.preview.dc.identifier.doi": "DOI", + // "item.preview.dc.publisher": "Publisher:", + "item.preview.dc.publisher": "Editora:", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Apelido:", @@ -3711,7 +3753,7 @@ "item.version.history.table.workspaceItem": "Área de trabalho do item", // "item.version.history.table.workflowItem": "Workflow item", - "item.version.history.table.workflowItem": "Área de trabalho do item", + "item.version.history.table.workflowItem": "Fluxo de trabalho do item", // "item.version.history.table.actions": "Action", "item.version.history.table.actions": "Ação", @@ -4148,6 +4190,9 @@ // "menu.section.browse_global_by_subject": "By Subject", "menu.section.browse_global_by_subject": "Por assunto", + // "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_srsc": "Por vocabulário controlado (SRSC)", + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Por título", @@ -4191,34 +4236,34 @@ "menu.section.export_batch": "Importação em lote (ZIP)", // "menu.section.icon.access_control": "Access Control menu section", - "menu.section.icon.access_control": "Secção do menu Controle de Acesso", + "menu.section.icon.access_control": "Secção do menu controle de acesso", // "menu.section.icon.admin_search": "Admin search menu section", - "menu.section.icon.admin_search": "Secção do menu de Pesquisa Administrativa", + "menu.section.icon.admin_search": "Secção do menu pesquisa administrativa", // "menu.section.icon.control_panel": "Control Panel menu section", - "menu.section.icon.control_panel": "Secção do menu Painel de Controlo", + "menu.section.icon.control_panel": "Secção do menu painel de controlo", // "menu.section.icon.curation_tasks": "Curation Task menu section", "menu.section.icon.curation_tasks": "Secção do menu tarefas de curadoria", // "menu.section.icon.edit": "Edit menu section", - "menu.section.icon.edit": "Secção do menu Editar", + "menu.section.icon.edit": "Secção do menu editar", // "menu.section.icon.export": "Export menu section", - "menu.section.icon.export": "Secção do menu Exportar", + "menu.section.icon.export": "Secção do menu exportar", // "menu.section.icon.find": "Find menu section", - "menu.section.icon.find": "Secção do menu Pesquisar", + "menu.section.icon.find": "Secção do menu pesquisar", // "menu.section.icon.health": "Health check menu section", - "menu.section.icon.health": "Seção do menu Diagnóstico do sistema", + "menu.section.icon.health": "Seção do menu diagnóstico do sistema", // "menu.section.icon.import": "Import menu section", - "menu.section.icon.import": "Secção do menu Importar", + "menu.section.icon.import": "Secção do menu importar", // "menu.section.icon.new": "New menu section", - "menu.section.icon.new": "Secção do menu Novo", + "menu.section.icon.new": "Secção do menu novo", // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Fixar barra lateral", @@ -4227,13 +4272,13 @@ "menu.section.icon.processes": "Processos diagnóstico", // "menu.section.icon.registries": "Registries menu section", - "menu.section.icon.registries": "Secção do menu Registos", + "menu.section.icon.registries": "Secção do menu registos", // "menu.section.icon.statistics_task": "Statistics Task menu section", - "menu.section.icon.statistics_task": "Secção do menu Tarefas de Estatísticas", + "menu.section.icon.statistics_task": "Secção do menu tarefas de estatísticas", // "menu.section.icon.workflow": "Administer workflow menu section", - "menu.section.icon.workflow": "Menu administração de tarefas", + "menu.section.icon.workflow": "Secção do menu de administração do fluxo de trabalho", // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Soltar barra lateral", @@ -4323,7 +4368,7 @@ "menu.section.toggle.statistics_task": "Alternar secção tarefas de estatísticas", // "menu.section.workflow": "Administer Workflow", - "menu.section.workflow": "Gestão do workflow", + "menu.section.workflow": "Gestão do fluxo de trabalho", // "metadata-export-search.tooltip": "Export search results as CSV", "metadata-export-search.tooltip": "Exportar resultados de pesquisa em CSV", @@ -4335,7 +4380,7 @@ "metadata-export-search.submit.error": "O início da exportação falhou!", // "mydspace.breadcrumbs": "MyDSpace", - "mydspace.breadcrumbs": "Área Pessoal", + "mydspace.breadcrumbs": "Área pessoal", // "mydspace.description": "", "mydspace.description": "", @@ -4416,7 +4461,7 @@ "mydspace.results.no-uri": "Sem URI", // "mydspace.search-form.placeholder": "Search in mydspace...", - "mydspace.search-form.placeholder": "Pesquisar na Área Pessoal...", + "mydspace.search-form.placeholder": "Pesquisar na área pessoal...", // "mydspace.show.workflow": "Workflow tasks", "mydspace.show.workflow": "Todas as tarefas", @@ -4443,7 +4488,7 @@ "mydspace.status.mydspaceWorkspace": "Depósito por terminar", // "mydspace.title": "MyDSpace", - "mydspace.title": "Área Pessoal", + "mydspace.title": "Área pessoal", // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", "mydspace.upload.upload-failed": "Erro ao criar novo espaço de trabalho. Por favor verifique o conteúdo enviado antes de tentar novamente.", @@ -4485,7 +4530,7 @@ "nav.main.description": "Barra de naveção principal", // "nav.mydspace": "MyDSpace", - "nav.mydspace": "Área Pessoal", + "nav.mydspace": "Área pessoal", // "nav.profile": "Profile", "nav.profile": "Perfil", @@ -5147,11 +5192,11 @@ // "repository.image.logo": "Repository logo", "repository.image.logo": "Logótipo do repositório", - // "repository.title.prefix": "DSpace Angular :: ", - "repository.title.prefix": "Repositório :: ", + // "repository.title": "DSpace Repository", + "repository.title": "Repositório :: ", - // "repository.title.prefixDSpace": "DSpace Angular ::", - "repository.title.prefixDSpace": "Repositório ::", + // "repository.title.prefix": "DSpace Repository :: ", + "repository.title.prefix": "Repositório :: ", // "resource-policies.add.button": "Add", "resource-policies.add.button": "Adicionar", @@ -5724,22 +5769,22 @@ "sorting.score.DESC": "Mais relevante", // "sorting.dc.date.issued.ASC": "Date Issued Ascending", - "sorting.dc.date.issued.ASC": "Data de publicação ascendente", + "sorting.dc.date.issued.ASC": "Data publicação ascendente", // "sorting.dc.date.issued.DESC": "Date Issued Descending", - "sorting.dc.date.issued.DESC": "Data de publicação descendente", + "sorting.dc.date.issued.DESC": "Data publicação descendente", // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", - "sorting.dc.date.accessioned.ASC": "Data de disponibilização ascendente", + "sorting.dc.date.accessioned.ASC": "Data depósito ascendente", // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", - "sorting.dc.date.accessioned.DESC": "Data de disponibilização descendente", + "sorting.dc.date.accessioned.DESC": "Data depósito descendente", // "sorting.lastModified.ASC": "Last modified Ascending", - "sorting.lastModified.ASC": "Última modificação ascendente", + "sorting.lastModified.ASC": "Última alteração ascendente", // "sorting.lastModified.DESC": "Last modified Descending", - "sorting.lastModified.DESC": "Última modificação descendente", + "sorting.lastModified.DESC": "Última alteração descendente", // "statistics.title": "Statistics", "statistics.title": "Estatísticas", @@ -5786,7 +5831,7 @@ // "submission.general.cancel": "Cancel", "submission.general.cancel": "Cancelar", - // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + // "submission.general.cannot_submit": "You don't have permission to make a new submission.", "submission.general.cannot_submit": "Não possui permissões para fazer um novo depósito.", // "submission.general.deposit": "Deposit", @@ -6828,13 +6873,13 @@ "submission.workflow.tasks.claimed.reject.submit": "Rejeitar", // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", - "submission.workflow.tasks.claimed.reject_help": "Se reviu o item e achou que ele não é adequado para inclusão na coleção, selecione \"Rejeitar\". Deverá indicar numa mensagem o motivo da rejeição e se o depositante deve modificar algo e reenviar.", + "submission.workflow.tasks.claimed.reject_help": "Se reviu o item e acha que não está em conformidade para inclusão na coleção, clique em 'Rejeitar'. Deverá indicar o motivo da rejeição e/ou se o depositante pode rever algo para o reenviar.", // "submission.workflow.tasks.claimed.return": "Return to pool", - "submission.workflow.tasks.claimed.return": "Voltar para a listagem", + "submission.workflow.tasks.claimed.return": "Libertar tarefa", // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", - "submission.workflow.tasks.claimed.return_help": "Enviar a tarefa para a lista para que outra pessoa possa executar.", + "submission.workflow.tasks.claimed.return_help": "Libertar esta tarefa para que outra pessoa a possa executar.", // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "ocorreu um erro durante a operação...", @@ -6849,7 +6894,7 @@ "submission.workflow.tasks.generic.success": "Operação realizada com sucesso", // "submission.workflow.tasks.pool.claim": "Claim", - "submission.workflow.tasks.pool.claim": "Assumir", + "submission.workflow.tasks.pool.claim": "Assumir tarefa", // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", "submission.workflow.tasks.pool.claim_help": "Assumir esta tarefa", @@ -7059,37 +7104,37 @@ "workspace.search.results.head": "Os meus depósitos", // "workflowAdmin.search.results.head": "Administer Workflow", - "workflowAdmin.search.results.head": "Gestão do workflow", + "workflowAdmin.search.results.head": "Gestão do fluxo de trabalho", // "workflow.search.results.head": "Workflow tasks", - "workflow.search.results.head": "Tarefas em workflow", + "workflow.search.results.head": "Tarefas em fluxo de trabalho", // "supervision.search.results.head": "Workflow and Workspace tasks", - "supervision.search.results.head": "Workflow e tarefas na área de trabalho", + "supervision.search.results.head": "Depósitos e tarefas em áreas de trabalho", // "workflow-item.edit.breadcrumbs": "Edit workflowitem", - "workflow-item.edit.breadcrumbs": "Editar item em processamento", + "workflow-item.edit.breadcrumbs": "Editar item em fluxo de trabalho", // "workflow-item.edit.title": "Edit workflowitem", - "workflow-item.edit.title": "Editar item em processamento", + "workflow-item.edit.title": "Editar item em em fluxo de trabalho", // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Apagado", // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", - "workflow-item.delete.notification.success.content": "Este item do workflow foi apagado com sucesso", + "workflow-item.delete.notification.success.content": "Este item em fluxo de trabalho foi apagado com sucesso", // "workflow-item.delete.notification.error.title": "Something went wrong", "workflow-item.delete.notification.error.title": "Algo correu mal", // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", - "workflow-item.delete.notification.error.content": "Não foi possível apagar o item do workflow", + "workflow-item.delete.notification.error.content": "Não foi possível apagar o item do fluxo de trabalho", // "workflow-item.delete.title": "Delete workflow item", - "workflow-item.delete.title": "Apagar item do workflow", + "workflow-item.delete.title": "Apagar item do fluxo de trabalho", // "workflow-item.delete.header": "Delete workflow item", - "workflow-item.delete.header": "Apagar item do workflow", + "workflow-item.delete.header": "Apagar item do fluxo de trabalho", // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Cancelar", @@ -7107,13 +7152,13 @@ "workflow-item.send-back.notification.error.title": "Algo correu mal", // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", - "workflow-item.send-back.notification.error.content": "Não foi pos´sivel enviar ao depositante este item do workflow", + "workflow-item.send-back.notification.error.content": "Não foi possível reenviar ao depositante este item em workflow", // "workflow-item.send-back.title": "Send workflow item back to submitter", - "workflow-item.send-back.title": "Enviar item do workflow para o depositante", + "workflow-item.send-back.title": "Enviar item em fluxo de trabalho para o depositante", // "workflow-item.send-back.header": "Send workflow item back to submitter", - "workflow-item.send-back.header": "Enviar item do workflow para o depositante", + "workflow-item.send-back.header": "Enviar item em fluxo de trabalho para o depositante", // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Cancelar", @@ -7146,10 +7191,10 @@ "workspace-item.delete.notification.success.title": "Apagado", // "workspace-item.delete.title": "This workspace item was successfully deleted", - "workspace-item.delete.title": "Este item foi removido da área de trabalho com êxito", + "workspace-item.delete.title": "Este item foi removido, com êxito, da área de trabalho", // "workspace-item.delete.notification.error.title": "Something went wrong", - "workspace-item.delete.notification.error.title": "Ocorreu algum erro!", + "workspace-item.delete.notification.error.title": "Ocorreu um erro!", // "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", "workspace-item.delete.notification.error.content": "Não foi possível remover o item da área de trabalho", @@ -7274,8 +7319,8 @@ // "researcherprofile.success.claim.title": "Success", "researcherprofile.success.claim.title": "Sucesso", - // "person.page.orcid.create": "Create an ORCID iD", - "person.page.orcid.create": "Criar um ORCID iD", + // "person.page.orcid.create": "Create an ORCID ID", + "person.page.orcid.create": "Criar um ORCID ID", // "person.page.orcid.granted-authorizations": "Granted authorizations", "person.page.orcid.granted-authorizations": "Autorizações concedidas", @@ -7283,8 +7328,8 @@ // "person.page.orcid.grant-authorizations": "Grant authorizations", "person.page.orcid.grant-authorizations": "Conceder autorizações", - // "person.page.orcid.link": "Connect to ORCID iD", - "person.page.orcid.link": "Ligar ao ORCID iD", + // "person.page.orcid.link": "Connect to ORCID ID", + "person.page.orcid.link": "Ligar ao ORCID ID", // "person.page.orcid.link.processing": "Linking profile to ORCID...", "person.page.orcid.link.processing": "Ligação do perfil ao ORCID...", @@ -7663,8 +7708,40 @@ // Other strings... // Missing, Duplicate or Redundant ??? - // NOT FOUND 30-05-2023 + // NOT FOUND 16-06-2023 + // "browse.metadata.srsc": "Subject Category", + "browse.metadata.srsc": "vocabulário controlado (SRSC)", + + // "mydspace.status.archived": "Archived", + "mydspace.status.archived": "Depositado", + + // "mydspace.status.validation": "Validation", + "mydspace.status.validation": "Em validação", + + // "mydspace.status.waiting-for-controller": "Waiting for Controller", + "mydspace.status.waiting-for-controller": "Aguarda validador", + + // "mydspace.status.workflow": "Workflow", + "mydspace.status.workflow": "Em fluxo de trabalho", + + // "mydspace.status.workspace": "Workspace", + "mydspace.status.workspace": "Depósito por terminar", + + // "search.filters.namedresourcetype.Archived": "Archived", + "search.filters.namedresourcetype.Archived": "Depositado", + + // "search.filters.namedresourcetype.Validation": "Validation", + "search.filters.namedresourcetype.Validation": "Em validação", + + // "search.filters.namedresourcetype.waitingforcontroller": "Waiting for Controller", + "search.filters.namedresourcetype.waitingforcontroller": "Aguarda validador", + + // "search.filters.namedresourcetype.Workflow": "Workflow", + "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", + + // "search.filters.namedresourcetype.Workspace": "Workspace", + "search.filters.namedresourcetype.Workspace": "Por terminar", // "datafile.listelement.badge": "Data file", "datafile.listelement.badge": "Ficheiro de dados", @@ -7694,21 +7771,21 @@ "register-page.create-profile.security.error.password-length": "A senha deve possuir pelo menos 6 caracteres.", // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Pesquisar na Área Pessoal", + "search.form.search_mydspace": "Pesquisar na área pessoal", // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", "forgot-password.form.error.password-length": "A senha deve ter pelo menos 6 caracteres.", - // "search.filters.entityType.Publication": "Publicação", + // "search.filters.entityType.Publication": "Publication", "search.filters.entityType.Publication": "Publicação", - // "search.filters.entityType.Person": "Pessoa", + // "search.filters.entityType.Person": "Person", "search.filters.entityType.Person": "Pessoa", - // "search.filters.entityType.Project": "Projecto", + // "search.filters.entityType.Project": "Project", "search.filters.entityType.Project": "Projeto", - // "search.filters.entityType.Journal": "Revista", + // "search.filters.entityType.Journal": "Journal", "search.filters.entityType.Journal": "Revista", // "search.filters.entityType.DataFile": "Data File", @@ -7723,18 +7800,6 @@ // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Successfully imported and added external project to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.local-entity": "Importado com sucesso e adicionado autor à seleção", - // "search.filters.namedresourcetype.Archived": "Archived", - "search.filters.namedresourcetype.Archived": "Aceites", - - // "search.filters.namedresourcetype.Workspace": "Workspace", - "search.filters.namedresourcetype.Workspace": "Por terminar", - - // "search.filters.namedresourcetype.Workflow": "Workflow", - "search.filters.namedresourcetype.Workflow": "Em fluxo de trabalho", - - // "search.filters.namedresourcetype.Validation": "Validation", - "search.filters.namedresourcetype.Validation": "Em validação", - // "orgunit.search.results.head": "Organizational Unit Search Results", "orgunit.search.results.head": "Resultados da pesquisa de organizações", @@ -7747,4 +7812,13 @@ // "journalissue-relationships.search.results.head": "Journal Issue Search Results", "journalissue-relationships.search.results.head": "Resultados da pesquisa de números", + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.message": "Caro {{ recipientName }},\nEm resposta ao seu pedido de cópia, tenho o prazer de lhe enviar em anexo uma cópia do(s) ficheiro(s) relativo(s) ao documento: \"{{ itemUrl }}\" ({{ itemName }}), do qual sou autor.\n\nCom os melhores cumprimentos,\n{{ authorName }} <{{ authorEmail }}>", + + // "item.preview.dc.relation.eissn": "EISSN", + "item.preview.dc.relation.eissn": "EISSN", + + // "item.preview.dc.identifier.eisbn": "EISBN", + "item.preview.dc.identifier.eisbn": "EISBN", + } From c63001c205313d963c4ad5a4a63dd582fc8df71f Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 16 Jun 2023 16:08:18 -0400 Subject: [PATCH 805/833] Fix illogical templateUrl paths. Add missed DenyRequestCopyComponent. --- .../themed-deny-request-copy.component.ts | 26 +++++++++++++++++++ .../themed-email-request-copy.component.ts | 1 - .../request-copy-routing.module.ts | 4 +-- src/app/request-copy/request-copy.module.ts | 5 ++++ .../deny-request-copy.component.ts | 2 +- .../email-request-copy.component.ts | 2 +- .../grant-request-copy.component.ts | 2 +- src/themes/custom/lazy-theme.module.ts | 2 ++ 8 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts diff --git a/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts new file mode 100644 index 0000000000..664e4c541b --- /dev/null +++ b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; + +import { DenyRequestCopyComponent } from 'src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component'; + +/** + * Themed wrapper for deny-request-copy.component + */ +@Component({ + selector: 'ds-themed-deny-request-copy', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html', +}) +export class ThemedDenyRequestCopyComponent extends ThemedComponent { + protected getComponentName(): string { + return 'DenyRequestCopyComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/request-copy/deny-request-copy/deny-request-copy.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./deny-request-copy.component'); + } +} diff --git a/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts index 6b808288ad..d010e43060 100644 --- a/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts +++ b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts @@ -12,7 +12,6 @@ import { RequestCopyEmail } from './request-copy-email.model'; styleUrls: [], templateUrl: './../../shared/theme-support/themed.component.html', }) - export class ThemedEmailRequestCopyComponent extends ThemedComponent { /** * Event emitter for sending the email diff --git a/src/app/request-copy/request-copy-routing.module.ts b/src/app/request-copy/request-copy-routing.module.ts index c3ac0be46a..4138fc42a6 100644 --- a/src/app/request-copy/request-copy-routing.module.ts +++ b/src/app/request-copy/request-copy-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule } from '@angular/router'; import { RequestCopyResolver } from './request-copy.resolver'; import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component'; import { REQUEST_COPY_DENY_PATH, REQUEST_COPY_GRANT_PATH } from './request-copy-routing-paths'; -import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; +import { ThemedDenyRequestCopyComponent } from './deny-request-copy/themed-deny-request-copy.component'; import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-grant-request-copy.component'; @NgModule({ @@ -21,7 +21,7 @@ import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-gra }, { path: REQUEST_COPY_DENY_PATH, - component: DenyRequestCopyComponent, + component: ThemedDenyRequestCopyComponent, }, { path: REQUEST_COPY_GRANT_PATH, diff --git a/src/app/request-copy/request-copy.module.ts b/src/app/request-copy/request-copy.module.ts index b5ea3da50c..90d741a879 100644 --- a/src/app/request-copy/request-copy.module.ts +++ b/src/app/request-copy/request-copy.module.ts @@ -4,6 +4,7 @@ import { SharedModule } from '../shared/shared.module'; import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component'; import { RequestCopyRoutingModule } from './request-copy-routing.module'; import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; +import { ThemedDenyRequestCopyComponent } from './deny-request-copy/themed-deny-request-copy.component'; import { EmailRequestCopyComponent } from './email-request-copy/email-request-copy.component'; import { ThemedEmailRequestCopyComponent } from './email-request-copy/themed-email-request-copy.component'; import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-copy.component'; @@ -18,11 +19,15 @@ import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-gra declarations: [ GrantDenyRequestCopyComponent, DenyRequestCopyComponent, + ThemedDenyRequestCopyComponent, EmailRequestCopyComponent, ThemedEmailRequestCopyComponent, GrantRequestCopyComponent, ThemedGrantRequestCopyComponent, ], + exports: [ + ThemedEmailRequestCopyComponent, + ], providers: [] }) diff --git a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts index fb65aae9bc..628b2b3f83 100644 --- a/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts +++ b/src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component.ts @@ -8,7 +8,7 @@ import { // styleUrls: ['./deny-request-copy.component.scss'], styleUrls: [], // templateUrl: './deny-request-copy.component.html', - templateUrl: './../../request-copy/deny-request-copy/deny-request-copy.component.html', + templateUrl: './../../../../../app/request-copy/deny-request-copy/deny-request-copy.component.html', }) export class DenyRequestCopyComponent extends BaseComponent { diff --git a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts index d4da93a99f..a0274f6efd 100644 --- a/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts +++ b/src/themes/custom/app/request-copy/email-request-copy/email-request-copy.component.ts @@ -8,7 +8,7 @@ import { // styleUrls: ['./email-request-copy.component.scss'], styleUrls: [], // templateUrl: './email-request-copy.component.html', - templateUrl: './../../request-copy/email-request-copy/email-request-copy.component.html', + templateUrl: './../../../../../app/request-copy/email-request-copy/email-request-copy.component.html', }) export class EmailRequestCopyComponent extends BaseComponent { diff --git a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts index 20d0ae90c1..446044942e 100644 --- a/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts +++ b/src/themes/custom/app/request-copy/grant-request-copy/grant-request-copy.component.ts @@ -8,7 +8,7 @@ import { // styleUrls: ['./grant-request-copy.component.scss'], styleUrls: [], // templateUrl: './grant-request-copy.component.html', - templateUrl: './../../request-copy/grant-request-copy/grant-request-copy.component.html', + templateUrl: './../../../../../app/request-copy/grant-request-copy/grant-request-copy.component.html', }) export class GrantRequestCopyComponent extends BaseComponent { diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index 6ec946a6ba..b0f94d3ab7 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -153,6 +153,7 @@ import { ThumbnailComponent } from './app/thumbnail/thumbnail.component'; import { ItemStatusComponent } from './app/item-page/edit-item-page/item-status/item-status.component'; import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; import { FormModule } from '../../app/shared/form/form.module'; +import { RequestCopyModule } from 'src/app/request-copy/request-copy.module'; const DECLARATIONS = [ FileSectionComponent, @@ -293,6 +294,7 @@ const DECLARATIONS = [ SystemWideAlertModule, NgxGalleryModule, FormModule, + RequestCopyModule, ], declarations: DECLARATIONS, exports: [ From d2663670706f7a93e13c67f5262469ee77328a99 Mon Sep 17 00:00:00 2001 From: Tom Misilo <1446856+misilot@users.noreply.github.com> Date: Fri, 16 Jun 2023 15:37:15 -0500 Subject: [PATCH 806/833] Fix typo for the word Series --- src/assets/i18n/en.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index da9c67cbd4..0c651991ae 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2474,7 +2474,7 @@ "item.preview.dc.identifier": "Identifier:", - "item.preview.dc.relation.ispartof": "Journal or Serie", + "item.preview.dc.relation.ispartof": "Journal or Series", "item.preview.dc.identifier.doi": "DOI", From 00aa0271f2e5e5671a3b8a183188e3ec3dbb07aa Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Mon, 19 Jun 2023 09:50:46 +0300 Subject: [PATCH 807/833] src/assets/i18n: update English strings Re-word two messages for better English and consistency with other similar strings. --- src/assets/i18n/en.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 0c651991ae..6c91bae4c1 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1298,9 +1298,9 @@ "community.all-lists.head": "Subcommunities and Collections", - "community.sub-collection-list.head": "Collections of this Community", + "community.sub-collection-list.head": "Collections in this Community", - "community.sub-community-list.head": "Communities of this Community", + "community.sub-community-list.head": "Communities in this Community", "cookies.consent.accept-all": "Accept all", From 4eb229791052713fd5d15775f8251b853a48000b Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Mon, 19 Jun 2023 13:24:10 +0200 Subject: [PATCH 808/833] [DURACOM-160] Hide "Send feedback" link when CanSendFeedback is false --- src/app/footer/footer.component.html | 2 +- src/app/footer/footer.component.spec.ts | 5 ++++- src/app/footer/footer.component.ts | 10 +++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/app/footer/footer.component.html b/src/app/footer/footer.component.html index 97265d7a23..13d84e6e2e 100644 --- a/src/app/footer/footer.component.html +++ b/src/app/footer/footer.component.html @@ -75,7 +75,7 @@ {{ 'footer.link.end-user-agreement' | translate}} -
  • +
  • {{ 'footer.link.feedback' | translate}}
  • diff --git a/src/app/footer/footer.component.spec.ts b/src/app/footer/footer.component.spec.ts index 15b289d5fb..9f0250edc4 100644 --- a/src/app/footer/footer.component.spec.ts +++ b/src/app/footer/footer.component.spec.ts @@ -15,6 +15,8 @@ import { FooterComponent } from './footer.component'; import { TranslateLoaderMock } from '../shared/mocks/translate-loader.mock'; import { storeModuleConfig } from '../app.reducer'; +import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; +import { AuthorizationDataServiceStub } from '../shared/testing/authorization-service.stub'; let comp: FooterComponent; let fixture: ComponentFixture; @@ -34,7 +36,8 @@ describe('Footer component', () => { })], declarations: [FooterComponent], // declare the test component providers: [ - FooterComponent + FooterComponent, + { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, ], schemas: [CUSTOM_ELEMENTS_SCHEMA] }); diff --git a/src/app/footer/footer.component.ts b/src/app/footer/footer.component.ts index c4195c8eb3..f5e4c3799a 100644 --- a/src/app/footer/footer.component.ts +++ b/src/app/footer/footer.component.ts @@ -2,6 +2,9 @@ import { Component, Optional } from '@angular/core'; import { hasValue } from '../shared/empty.util'; import { KlaroService } from '../shared/cookies/klaro.service'; import { environment } from '../../environments/environment'; +import { Observable } from 'rxjs'; +import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; +import { FeatureID } from '../core/data/feature-authorization/feature-id'; @Component({ selector: 'ds-footer', @@ -17,8 +20,13 @@ export class FooterComponent { showTopFooter = false; showPrivacyPolicy = environment.info.enablePrivacyStatement; showEndUserAgreement = environment.info.enableEndUserAgreement; + showSendFeedback$: Observable; - constructor(@Optional() private cookies: KlaroService) { + constructor( + @Optional() private cookies: KlaroService, + private authorizationService: AuthorizationDataService, + ) { + this.showSendFeedback$ = this.authorizationService.isAuthorized(FeatureID.CanSendFeedback); } showCookieSettings() { From 52dbb213396e7d5808fa70cdebe1a197028716c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Mon, 19 Jun 2023 15:37:35 +0100 Subject: [PATCH 809/833] include the project metadata representation component --- .../entity-groups/research-entities/research-entities.module.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/entity-groups/research-entities/research-entities.module.ts b/src/app/entity-groups/research-entities/research-entities.module.ts index 680e1bd79f..95b183f630 100644 --- a/src/app/entity-groups/research-entities/research-entities.module.ts +++ b/src/app/entity-groups/research-entities/research-entities.module.ts @@ -19,6 +19,7 @@ import { OrgUnitSearchResultGridElementComponent } from './item-grid-elements/se import { ProjectSearchResultGridElementComponent } from './item-grid-elements/search-result-grid-elements/project/project-search-result-grid-element.component'; import { PersonItemMetadataListElementComponent } from './metadata-representations/person/person-item-metadata-list-element.component'; import { OrgUnitItemMetadataListElementComponent } from './metadata-representations/org-unit/org-unit-item-metadata-list-element.component'; +import { ProjectItemMetadataListElementComponent } from './metadata-representations/project/project-item-metadata-list-element.component'; import { PersonSearchResultListSubmissionElementComponent } from './submission/item-list-elements/person/person-search-result-list-submission-element.component'; import { PersonInputSuggestionsComponent } from './submission/item-list-elements/person/person-suggestions/person-input-suggestions.component'; import { NameVariantModalComponent } from './submission/name-variant-modal/name-variant-modal.component'; @@ -36,6 +37,7 @@ const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator OrgUnitComponent, PersonComponent, + ProjectItemMetadataListElementComponent, ProjectComponent, OrgUnitListElementComponent, OrgUnitItemMetadataListElementComponent, From 82d17d795f5ce952ff54bb114834009eeeb22f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 10:24:53 +0100 Subject: [PATCH 810/833] add support for dsoNameService --- ...roject-item-metadata-list-element.component.html | 8 ++++---- .../project-item-metadata-list-element.component.ts | 13 ++++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html index 175ab6e592..acc9173bf7 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.html @@ -1,12 +1,12 @@ - + - + [innerHTML]="dsoNameService.getName(mdRepresentation)" + [ngbTooltip]="dsoNameService.getName(mdRepresentation).length > 0 ? descTemplate : null"> + \ No newline at end of file diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts index 7f291b0996..34b96ed2b7 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -2,6 +2,7 @@ import { Component } from '@angular/core'; import { metadataRepresentationComponent } from '../../../../shared/metadata-representation/metadata-representation.decorator'; import { MetadataRepresentationType } from '../../../../core/shared/metadata-representation/metadata-representation.model'; import { ItemMetadataRepresentationListElementComponent } from '../../../../shared/object-list/metadata-representation-list-element/item/item-metadata-representation-list-element.component'; +import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; @metadataRepresentationComponent('Project', MetadataRepresentationType.Item) @Component({ @@ -12,4 +13,14 @@ import { ItemMetadataRepresentationListElementComponent } from '../../../../shar * The component for displaying an item of the type Project as a metadata field */ export class ProjectItemMetadataListElementComponent extends ItemMetadataRepresentationListElementComponent { -} + /** + * Initialize instance variables + * + * @param nameService + */ + constructor( + public dsoNameService: DSONameService + ) { + super(); + } +} \ No newline at end of file From 130c3c9496fb57e5a8ba401375a1db2048048d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 10:33:03 +0100 Subject: [PATCH 811/833] addressing styling issue --- .../project/project-item-metadata-list-element.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts index 34b96ed2b7..03b9e1038d 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -23,4 +23,4 @@ export class ProjectItemMetadataListElementComponent extends ItemMetadataReprese ) { super(); } -} \ No newline at end of file +} From e6fdc4597afb710b4fb405bdd345271cec20ac73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 10:34:34 +0100 Subject: [PATCH 812/833] change param name in typescript doc --- .../project/project-item-metadata-list-element.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts index 03b9e1038d..a38a1f5cff 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.ts @@ -16,7 +16,7 @@ export class ProjectItemMetadataListElementComponent extends ItemMetadataReprese /** * Initialize instance variables * - * @param nameService + * @param dsoNameService */ constructor( public dsoNameService: DSONameService From 72eaf35de153337dd3e942f306192ec3fc161800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 13:35:12 +0100 Subject: [PATCH 813/833] adding support for DSONameService --- .../project-item-metadata-list-element.component.spec.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index fd5095d2f8..afa565ce40 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -8,6 +8,8 @@ import { ItemMetadataRepresentation } from '../../../../core/shared/metadata-rep import { Item } from '../../../../core/shared/item.model'; import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; +import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -25,6 +27,9 @@ describe('ProjectItemMetadataListElementComponent', () => { NgbModule ], declarations: [ProjectItemMetadataListElementComponent], + providers: [ + { provide: DSONameService, useValue: new DSONameServiceMock() } + ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectItemMetadataListElementComponent, { set: { changeDetection: ChangeDetectionStrategy.Default } From f471957c4cb15c78ece7573823979a61dd096950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 14:06:48 +0100 Subject: [PATCH 814/833] adding support for DSONameService --- .../project-item-metadata-list-element.component.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index afa565ce40..a8534744df 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -9,7 +9,6 @@ import { Item } from '../../../../core/shared/item.model'; import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; -import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -28,7 +27,7 @@ describe('ProjectItemMetadataListElementComponent', () => { ], declarations: [ProjectItemMetadataListElementComponent], providers: [ - { provide: DSONameService, useValue: new DSONameServiceMock() } + { provide: DSONameService, useValue: dsoNameService } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectItemMetadataListElementComponent, { @@ -41,6 +40,9 @@ describe('ProjectItemMetadataListElementComponent', () => { comp = fixture.componentInstance; comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); + dsoNameService = jasmine.createSpyObj({ + getName: projectTitle + }); }); it('should show the project\'s name as a link', () => { From 1919f976f41871bc2065757b051b6992238867c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Gra=C3=A7a?= Date: Tue, 20 Jun 2023 15:30:56 +0100 Subject: [PATCH 815/833] adding support for DSONameService --- .../project-item-metadata-list-element.component.spec.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts index a8534744df..afa565ce40 100644 --- a/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts +++ b/src/app/entity-groups/research-entities/metadata-representations/project/project-item-metadata-list-element.component.spec.ts @@ -9,6 +9,7 @@ import { Item } from '../../../../core/shared/item.model'; import { ProjectItemMetadataListElementComponent } from './project-item-metadata-list-element.component'; import { MetadataValue } from '../../../../core/shared/metadata.models'; import { DSONameService } from '../../../../core/breadcrumbs/dso-name.service'; +import { DSONameServiceMock } from '../../../../shared/mocks/dso-name.service.mock'; const projectTitle = 'Lorem ipsum dolor sit amet'; const mockItem = Object.assign(new Item(), { metadata: { 'dc.title': [{ value: projectTitle }] } }); @@ -27,7 +28,7 @@ describe('ProjectItemMetadataListElementComponent', () => { ], declarations: [ProjectItemMetadataListElementComponent], providers: [ - { provide: DSONameService, useValue: dsoNameService } + { provide: DSONameService, useValue: new DSONameServiceMock() } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(ProjectItemMetadataListElementComponent, { @@ -40,9 +41,6 @@ describe('ProjectItemMetadataListElementComponent', () => { comp = fixture.componentInstance; comp.mdRepresentation = mockItemMetadataRepresentation; fixture.detectChanges(); - dsoNameService = jasmine.createSpyObj({ - getName: projectTitle - }); }); it('should show the project\'s name as a link', () => { From 07a8024daa74aea42745853a7331fac406f88da6 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Mon, 19 Jun 2023 20:59:05 +0300 Subject: [PATCH 816/833] src/app: adjust item count style Minor adjustment to community and collection item counts. Instead of using the Bootstrap `lead` class, which reduces weight but increases size, we should use the same badge / pill style used in other counts like on on the browse by pages. --- .../community-list.component.html | 15 +++++++++------ .../collection-list-element.component.html | 17 ++++++++++------- .../community-list-element.component.html | 17 ++++++++++------- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index 5043d45c93..d6fd77e79b 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -33,12 +33,15 @@ -
    - - {{ dsoNameService.getName(node.payload) }} - - [{{node.payload.archivedItemsCount}}] -
    +
    +
    + + {{ dsoNameService.getName(node.payload) }} + +   + {{node.payload.archivedItemsCount}} +
    +
    diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index 707adabde2..c50b382495 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -1,10 +1,13 @@ - - {{ dsoNameService.getName(object) }} - - - {{ dsoNameService.getName(object) }} - -[{{object.archivedItemsCount}}] +
    + + {{ dsoNameService.getName(object) }} + + + {{ dsoNameService.getName(object) }} + +   + {{object.archivedItemsCount}} +
    {{object.shortDescription}}
    diff --git a/src/app/shared/object-list/community-list-element/community-list-element.component.html b/src/app/shared/object-list/community-list-element/community-list-element.component.html index ea6782b949..2101261bdc 100644 --- a/src/app/shared/object-list/community-list-element/community-list-element.component.html +++ b/src/app/shared/object-list/community-list-element/community-list-element.component.html @@ -1,10 +1,13 @@ - - {{ dsoNameService.getName(object) }} - - - {{ dsoNameService.getName(object) }} - -[{{object.archivedItemsCount}}] +
    + + {{ dsoNameService.getName(object) }} + + + {{ dsoNameService.getName(object) }} + +   + {{object.archivedItemsCount}} +
    {{object.shortDescription}}
    From 275b057b40484218f5218555d53db22d422a6b13 Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Wed, 21 Jun 2023 17:37:22 +0000 Subject: [PATCH 817/833] Add the ability to expand / collapse via keyboard --- .../dynamic-scrollable-dropdown.component.html | 2 +- .../dynamic-scrollable-dropdown.component.ts | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html index 3a75fe1037..6e2d29b789 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.html @@ -23,7 +23,7 @@ (blur)="onBlur($event)" (click)="$event.stopPropagation(); openDropdown(sdRef);" (focus)="onFocus($event)" - (keypress)="$event.preventDefault()"> + (keydown)="selectOnKeyDown($event, sdRef)">
    Date: Wed, 21 Jun 2023 15:36:59 -0500 Subject: [PATCH 818/833] Implement basic 301 Redirect when SSR is used. --- .../core/data/dso-redirect.service.spec.ts | 24 +++++++++++++++++++ src/app/core/data/dso-redirect.service.ts | 21 +++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/app/core/data/dso-redirect.service.spec.ts b/src/app/core/data/dso-redirect.service.spec.ts index ca064b5608..64fbd94367 100644 --- a/src/app/core/data/dso-redirect.service.spec.ts +++ b/src/app/core/data/dso-redirect.service.spec.ts @@ -27,6 +27,9 @@ describe('DsoRedirectService', () => { const requestUUIDURL = `https://rest.api/rest/api/pid/find?id=${dsoUUID}`; const requestUUID = '34cfed7c-f597-49ef-9cbe-ea351f0023c2'; const objectCache = {} as ObjectCacheService; + const mockResponse = jasmine.createSpyObj(['redirect']); + const mockPlatformBrowser = 'browser'; + const mockPlatformServer = 'server'; beforeEach(() => { scheduler = getTestScheduler(); @@ -58,6 +61,8 @@ describe('DsoRedirectService', () => { objectCache, halService, router, + mockResponse, + mockPlatformBrowser // default to CSR except where explicitly SSR below ); }); @@ -141,6 +146,25 @@ describe('DsoRedirectService', () => { scheduler.flush(); expect(router.navigate).toHaveBeenCalledWith(['/communities/' + remoteData.payload.uuid]); }); + + it('should return 301 redirect when SSR is used', () => { + service = new DsoRedirectService( + requestService, + rdbService, + objectCache, + halService, + router, + mockResponse, + mockPlatformServer // explicitly SSR mode + ); + remoteData.payload.type = 'item'; + const redir = service.findByIdAndIDType(dsoHandle, IdentifierType.HANDLE); + // The framework would normally subscribe but do it here so we can test navigation. + redir.subscribe(); + scheduler.schedule(() => redir); + scheduler.flush(); + expect(mockResponse.redirect).toHaveBeenCalledWith(301, '/items/' + remoteData.payload.uuid); + }); }); describe('DataService', () => { // todo: should only test the id/uuid interpolation thingy diff --git a/src/app/core/data/dso-redirect.service.ts b/src/app/core/data/dso-redirect.service.ts index 81ce678e43..9b87590f7e 100644 --- a/src/app/core/data/dso-redirect.service.ts +++ b/src/app/core/data/dso-redirect.service.ts @@ -6,7 +6,7 @@ * http://www.dspace.org/license/ */ /* eslint-disable max-classes-per-file */ -import { Injectable } from '@angular/core'; +import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core'; import { Router } from '@angular/router'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; @@ -21,6 +21,8 @@ import { getFirstCompletedRemoteData } from '../shared/operators'; import { DSpaceObject } from '../shared/dspace-object.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { getDSORoute } from '../../app-routing-paths'; +import { RESPONSE } from '@nguniversal/express-engine/tokens'; +import { isPlatformServer } from '@angular/common'; const ID_ENDPOINT = 'pid'; const UUID_ENDPOINT = 'dso'; @@ -75,12 +77,20 @@ export class DsoRedirectService { protected objectCache: ObjectCacheService, protected halService: HALEndpointService, private router: Router, + @Optional() @Inject(RESPONSE) private response: any, + @Inject(PLATFORM_ID) private platformId: any ) { this.dataService = new DsoByIdOrUUIDDataService(requestService, rdbService, objectCache, halService); } /** - * Retrieve a DSpaceObject by + * Redirect to a DSpaceObject's path using the given identifier type and ID. + * This is used to redirect paths like "/handle/[prefix]/[suffix]" to the object's path (e.g. /items/[uuid]). + * See LookupGuard for more examples. + * + * If this is called server side (via SSR), it performs a 301 Redirect. + * If this is called client side (via CSR), it simply uses the Angular router to do the redirect. + * * @param id the identifier of the object to retrieve * @param identifierType the type of the given identifier (defaults to UUID) */ @@ -94,7 +104,12 @@ export class DsoRedirectService { if (hasValue(dso.uuid)) { let newRoute = getDSORoute(dso); if (hasValue(newRoute)) { - this.router.navigate([newRoute]); + // If running via SSR, perform a "301 Moved Permanently" redirect for SEO purposes. + if (isPlatformServer(this.platformId)) { + this.response.redirect(301, newRoute); + } else { + this.router.navigate([newRoute]); + } } } } From 47e7eb1a4fc74b768961ca3b766b661809e58db8 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 22 Jun 2023 12:14:15 +0200 Subject: [PATCH 819/833] [DURACOM-170] Fixed "add collection" behavior --- .../collection-form/collection-form.component.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/app/collection-page/collection-form/collection-form.component.ts b/src/app/collection-page/collection-form/collection-form.component.ts index 84223d260a..ebb03df3b9 100644 --- a/src/app/collection-page/collection-form/collection-form.component.ts +++ b/src/app/collection-page/collection-form/collection-form.component.ts @@ -22,6 +22,8 @@ import { MetadataValue } from '../../core/shared/metadata.models'; import { getFirstSucceededRemoteListPayload } from '../../core/shared/operators'; import { collectionFormEntityTypeSelectionConfig, collectionFormModels, } from './collection-form.models'; import { NONE_ENTITY_TYPE } from '../../core/shared/item-relationships/item-type.resource-type'; +import { hasNoValue, isNotNull } from 'src/app/shared/empty.util'; + /** * Form used for creating and editing collections @@ -66,6 +68,12 @@ export class CollectionFormComponent extends ComColFormComponent imp super(formService, translate, notificationsService, authService, requestService, objectCache); } + ngOnInit(): void { + if (hasNoValue(this.formModel) && isNotNull(this.dso)) { + this.initializeForm(); + } + } + /** * Detect changes to the dso and initialize the form, * if the dso changes, exists and it is not the first change From 6a58e49fb45a78bb2439f51dd4a8d781c7d5d330 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 22 Jun 2023 18:16:53 +0200 Subject: [PATCH 820/833] [DURACOM-172] add check to save only successful response into the SSR cache --- server.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server.ts b/server.ts index 3bbb28820a..7f698a91f8 100644 --- a/server.ts +++ b/server.ts @@ -461,6 +461,8 @@ function saveToCache(req, page: any) { const key = getCacheKey(req); // Avoid caching "/reload/[random]" paths (these are hard refreshes after logout) if (key.startsWith('/reload')) { return; } + // Avoid caching not successful responses (status code different from 2XX status) + if (hasNotSucceeded(req.res.statusCode)) { return; } // Retrieve response headers to save, if any const headers = retrieveHeaders(req.res); @@ -479,6 +481,15 @@ function saveToCache(req, page: any) { } } +/** + * Check if status code is different from 2XX + * @param statusCode + */ +function hasNotSucceeded(statusCode) { + const rgx = new RegExp(/20+/); + return !rgx.test(statusCode) +} + function retrieveHeaders(response) { const headers = Object.create({}); if (Array.isArray(environment.cache.serverSide.headers) && environment.cache.serverSide.headers.length > 0) { From d4a5308d0c7f845cbe0f0caa18437635e94a3067 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 22 Jun 2023 13:37:14 -0500 Subject: [PATCH 821/833] Refactor to use HardRedirectService. Update its redirect method to support optional statusCode --- .../core/data/dso-redirect.service.spec.ts | 45 +++++-------------- src/app/core/data/dso-redirect.service.ts | 21 +++------ .../core/services/hard-redirect.service.ts | 4 +- .../server-hard-redirect.service.spec.ts | 19 ++++++-- .../services/server-hard-redirect.service.ts | 12 +++-- 5 files changed, 44 insertions(+), 57 deletions(-) diff --git a/src/app/core/data/dso-redirect.service.spec.ts b/src/app/core/data/dso-redirect.service.spec.ts index 64fbd94367..2122dc663a 100644 --- a/src/app/core/data/dso-redirect.service.spec.ts +++ b/src/app/core/data/dso-redirect.service.spec.ts @@ -10,6 +10,7 @@ import { RequestService } from './request.service'; import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; import { Item } from '../shared/item.model'; import { EMBED_SEPARATOR } from './base/base-data.service'; +import { HardRedirectService } from '../services/hard-redirect.service'; describe('DsoRedirectService', () => { let scheduler: TestScheduler; @@ -17,7 +18,7 @@ describe('DsoRedirectService', () => { let halService: HALEndpointService; let requestService: RequestService; let rdbService: RemoteDataBuildService; - let router; + let redirectService: HardRedirectService; let remoteData; const dsoUUID = '9b4f22f4-164a-49db-8817-3316b6ee5746'; const dsoHandle = '1234567789/22'; @@ -27,9 +28,6 @@ describe('DsoRedirectService', () => { const requestUUIDURL = `https://rest.api/rest/api/pid/find?id=${dsoUUID}`; const requestUUID = '34cfed7c-f597-49ef-9cbe-ea351f0023c2'; const objectCache = {} as ObjectCacheService; - const mockResponse = jasmine.createSpyObj(['redirect']); - const mockPlatformBrowser = 'browser'; - const mockPlatformServer = 'server'; beforeEach(() => { scheduler = getTestScheduler(); @@ -41,9 +39,6 @@ describe('DsoRedirectService', () => { generateRequestId: requestUUID, send: true }); - router = { - navigate: jasmine.createSpy('navigate') - }; remoteData = createSuccessfulRemoteDataObject(Object.assign(new Item(), { type: 'item', @@ -55,14 +50,17 @@ describe('DsoRedirectService', () => { a: remoteData }) }); + + redirectService = jasmine.createSpyObj('redirectService', { + redirect: {} + }); + service = new DsoRedirectService( requestService, rdbService, objectCache, halService, - router, - mockResponse, - mockPlatformBrowser // default to CSR except where explicitly SSR below + redirectService ); }); @@ -109,7 +107,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/items/' + remoteData.payload.uuid]); + expect(redirectService.redirect).toHaveBeenCalledWith('/items/' + remoteData.payload.uuid, 301); }); it('should navigate to entities route with the corresponding entity type', () => { remoteData.payload.type = 'item'; @@ -126,7 +124,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/entities/publication/' + remoteData.payload.uuid]); + expect(redirectService.redirect).toHaveBeenCalledWith('/entities/publication/' + remoteData.payload.uuid, 301); }); it('should navigate to collections route', () => { @@ -135,7 +133,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/collections/' + remoteData.payload.uuid]); + expect(redirectService.redirect).toHaveBeenCalledWith('/collections/' + remoteData.payload.uuid, 301); }); it('should navigate to communities route', () => { @@ -144,26 +142,7 @@ describe('DsoRedirectService', () => { redir.subscribe(); scheduler.schedule(() => redir); scheduler.flush(); - expect(router.navigate).toHaveBeenCalledWith(['/communities/' + remoteData.payload.uuid]); - }); - - it('should return 301 redirect when SSR is used', () => { - service = new DsoRedirectService( - requestService, - rdbService, - objectCache, - halService, - router, - mockResponse, - mockPlatformServer // explicitly SSR mode - ); - remoteData.payload.type = 'item'; - const redir = service.findByIdAndIDType(dsoHandle, IdentifierType.HANDLE); - // The framework would normally subscribe but do it here so we can test navigation. - redir.subscribe(); - scheduler.schedule(() => redir); - scheduler.flush(); - expect(mockResponse.redirect).toHaveBeenCalledWith(301, '/items/' + remoteData.payload.uuid); + expect(redirectService.redirect).toHaveBeenCalledWith('/communities/' + remoteData.payload.uuid, 301); }); }); diff --git a/src/app/core/data/dso-redirect.service.ts b/src/app/core/data/dso-redirect.service.ts index 9b87590f7e..a27d1fb11f 100644 --- a/src/app/core/data/dso-redirect.service.ts +++ b/src/app/core/data/dso-redirect.service.ts @@ -6,8 +6,7 @@ * http://www.dspace.org/license/ */ /* eslint-disable max-classes-per-file */ -import { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core'; -import { Router } from '@angular/router'; +import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { hasValue } from '../../shared/empty.util'; @@ -21,8 +20,7 @@ import { getFirstCompletedRemoteData } from '../shared/operators'; import { DSpaceObject } from '../shared/dspace-object.model'; import { IdentifiableDataService } from './base/identifiable-data.service'; import { getDSORoute } from '../../app-routing-paths'; -import { RESPONSE } from '@nguniversal/express-engine/tokens'; -import { isPlatformServer } from '@angular/common'; +import { HardRedirectService } from '../services/hard-redirect.service'; const ID_ENDPOINT = 'pid'; const UUID_ENDPOINT = 'dso'; @@ -76,9 +74,7 @@ export class DsoRedirectService { protected rdbService: RemoteDataBuildService, protected objectCache: ObjectCacheService, protected halService: HALEndpointService, - private router: Router, - @Optional() @Inject(RESPONSE) private response: any, - @Inject(PLATFORM_ID) private platformId: any + private hardRedirectService: HardRedirectService ) { this.dataService = new DsoByIdOrUUIDDataService(requestService, rdbService, objectCache, halService); } @@ -88,9 +84,6 @@ export class DsoRedirectService { * This is used to redirect paths like "/handle/[prefix]/[suffix]" to the object's path (e.g. /items/[uuid]). * See LookupGuard for more examples. * - * If this is called server side (via SSR), it performs a 301 Redirect. - * If this is called client side (via CSR), it simply uses the Angular router to do the redirect. - * * @param id the identifier of the object to retrieve * @param identifierType the type of the given identifier (defaults to UUID) */ @@ -104,12 +97,8 @@ export class DsoRedirectService { if (hasValue(dso.uuid)) { let newRoute = getDSORoute(dso); if (hasValue(newRoute)) { - // If running via SSR, perform a "301 Moved Permanently" redirect for SEO purposes. - if (isPlatformServer(this.platformId)) { - this.response.redirect(301, newRoute); - } else { - this.router.navigate([newRoute]); - } + // Use a "301 Moved Permanently" redirect for SEO purposes + this.hardRedirectService.redirect(newRoute, 301); } } } diff --git a/src/app/core/services/hard-redirect.service.ts b/src/app/core/services/hard-redirect.service.ts index 3733059283..826c7e4fa9 100644 --- a/src/app/core/services/hard-redirect.service.ts +++ b/src/app/core/services/hard-redirect.service.ts @@ -11,8 +11,10 @@ export abstract class HardRedirectService { * * @param url * the page to redirect to + * @param statusCode + * optional HTTP status code to use for redirect (default = 302, which is a temporary redirect) */ - abstract redirect(url: string); + abstract redirect(url: string, statusCode?: number); /** * Get the current route, with query params included diff --git a/src/app/core/services/server-hard-redirect.service.spec.ts b/src/app/core/services/server-hard-redirect.service.spec.ts index 4501547b92..6bd5828921 100644 --- a/src/app/core/services/server-hard-redirect.service.spec.ts +++ b/src/app/core/services/server-hard-redirect.service.spec.ts @@ -22,20 +22,33 @@ describe('ServerHardRedirectService', () => { expect(service).toBeTruthy(); }); - describe('when performing a redirect', () => { - + describe('when performing a default redirect', () => { const redirect = 'test redirect'; beforeEach(() => { service.redirect(redirect); }); - it('should update the response object', () => { + it('should perform a 302 redirect', () => { expect(mockResponse.redirect).toHaveBeenCalledWith(302, redirect); expect(mockResponse.end).toHaveBeenCalled(); }); }); + describe('when performing a 301 redirect', () => { + const redirect = 'test 301 redirect'; + const redirectStatusCode = 301; + + beforeEach(() => { + service.redirect(redirect, redirectStatusCode); + }); + + it('should redirect with passed in status code', () => { + expect(mockResponse.redirect).toHaveBeenCalledWith(redirectStatusCode, redirect); + expect(mockResponse.end).toHaveBeenCalled(); + }); + }); + describe('when requesting the current route', () => { beforeEach(() => { diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index de8b45b0e5..8c45cc864b 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -17,10 +17,14 @@ export class ServerHardRedirectService extends HardRedirectService { } /** - * Perform a hard redirect to URL + * Perform a hard redirect to a given location. + * * @param url + * the page to redirect to + * @param statusCode + * optional HTTP status code to use for redirect (default = 302, which is a temporary redirect) */ - redirect(url: string) { + redirect(url: string, statusCode?: number) { if (url === this.req.url) { return; @@ -38,8 +42,8 @@ export class ServerHardRedirectService extends HardRedirectService { process.exit(1); } } else { - // attempt to use the already set status - let status = this.res.statusCode || 0; + // attempt to use passed in statusCode or the already set status (in request) + let status = statusCode || this.res.statusCode || 0; if (status < 300 || status >= 400) { // temporary redirect status = 302; From 163014306cb3fe5c80dc807695cb2aa4978f0ecc Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 23 Jun 2023 09:23:28 +0200 Subject: [PATCH 822/833] [DURACOM-172] improve regex --- server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.ts b/server.ts index 7f698a91f8..23327c2058 100644 --- a/server.ts +++ b/server.ts @@ -486,7 +486,7 @@ function saveToCache(req, page: any) { * @param statusCode */ function hasNotSucceeded(statusCode) { - const rgx = new RegExp(/20+/); + const rgx = new RegExp(/^20+/); return !rgx.test(statusCode) } From 3d133f6166cecd769e461c79f7b4b53413d92ff7 Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 23 Jun 2023 11:50:05 +0200 Subject: [PATCH 823/833] 103005: Fixed issue where bg colours couldn't be overwritten in themes --- src/styles/_bootstrap_variables.scss | 9 +++++++++ src/styles/_bootstrap_variables_mapping.scss | 12 ++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/styles/_bootstrap_variables.scss b/src/styles/_bootstrap_variables.scss index 4c631a294a..9d46f12abb 100644 --- a/src/styles/_bootstrap_variables.scss +++ b/src/styles/_bootstrap_variables.scss @@ -23,6 +23,8 @@ $yellow: #ec9433 !default; $red: #CF4444 !default; $dark: darken($blue, 17%) !default; + + $theme-colors: ( primary: $blue, secondary: $gray-700, @@ -44,3 +46,10 @@ $navbar-light-toggler-icon-bg: url("data:image/svg+xml;charset=utf8, Date: Fri, 23 Jun 2023 12:54:41 -0500 Subject: [PATCH 824/833] Update version tag for release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 59766e993b..719b13b23b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dspace-angular", - "version": "7.6.0-next", + "version": "7.6.0", "scripts": { "ng": "ng", "config:watch": "nodemon", From 884aa0743096b4bfe946679aa48ad3f5727575df Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 23 Jun 2023 13:04:19 -0500 Subject: [PATCH 825/833] Update version tag for development of next release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 719b13b23b..06d7063240 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dspace-angular", - "version": "7.6.0", + "version": "7.6.1-next", "scripts": { "ng": "ng", "config:watch": "nodemon", From c4342d3238b73d03cb92e8ce160884e66d14b49a Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 30 Jun 2023 14:57:09 -0500 Subject: [PATCH 826/833] Update version tag for development of next major release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 06d7063240..977a4bdc5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dspace-angular", - "version": "7.6.1-next", + "version": "8.0.0-next", "scripts": { "ng": "ng", "config:watch": "nodemon", From 8ac1e9a2838ba24f73b3617190efb942406c9883 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Wed, 5 Jul 2023 18:03:25 +0300 Subject: [PATCH 827/833] src/app: fix path to deny-request-copy component The themed-deny-request-copy.component erroneously includes the cus- tom theme's deny-request-copy component instead of its own. Closes: https://github.com/DSpace/dspace-angular/issues/2351 --- .../deny-request-copy/themed-deny-request-copy.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts index 664e4c541b..1539d49622 100644 --- a/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts +++ b/src/app/request-copy/deny-request-copy/themed-deny-request-copy.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; -import { DenyRequestCopyComponent } from 'src/themes/custom/app/request-copy/deny-request-copy/deny-request-copy.component'; +import { DenyRequestCopyComponent } from './deny-request-copy.component'; /** * Themed wrapper for deny-request-copy.component From 5208008f9558cbec4882b08852da118a29a6bfbc Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 7 Jul 2023 11:56:47 -0500 Subject: [PATCH 828/833] Enable Pull Request Opened action to assign PRs to their creator --- .../pull_request_opened.yml | 26 ------------------- .github/workflows/pull_request_opened.yml | 24 +++++++++++++++++ 2 files changed, 24 insertions(+), 26 deletions(-) delete mode 100644 .github/disabled-workflows/pull_request_opened.yml create mode 100644 .github/workflows/pull_request_opened.yml diff --git a/.github/disabled-workflows/pull_request_opened.yml b/.github/disabled-workflows/pull_request_opened.yml deleted file mode 100644 index 0dc718c0b9..0000000000 --- a/.github/disabled-workflows/pull_request_opened.yml +++ /dev/null @@ -1,26 +0,0 @@ -# This workflow runs whenever a new pull request is created -# TEMPORARILY DISABLED. Unfortunately this doesn't work for PRs created from forked repositories (which is how we tend to create PRs). -# There is no known workaround yet. See https://github.community/t/how-to-use-github-token-for-prs-from-forks/16818 -name: Pull Request opened - -# Only run for newly opened PRs against the "main" branch -on: - pull_request: - types: [opened] - branches: - - main - -jobs: - automation: - runs-on: ubuntu-latest - steps: - # Assign the PR to whomever created it. This is useful for visualizing assignments on project boards - # See https://github.com/marketplace/actions/pull-request-assigner - - name: Assign PR to creator - uses: thomaseizinger/assign-pr-creator-action@v1.0.0 - # Note, this authentication token is created automatically - # See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - # Ignore errors. It is possible the PR was created by someone who cannot be assigned - continue-on-error: true diff --git a/.github/workflows/pull_request_opened.yml b/.github/workflows/pull_request_opened.yml new file mode 100644 index 0000000000..9b61af72d1 --- /dev/null +++ b/.github/workflows/pull_request_opened.yml @@ -0,0 +1,24 @@ +# This workflow runs whenever a new pull request is created +name: Pull Request opened + +# Only run for newly opened PRs against the "main" or maintenance branches +# We allow this to run for `pull_request_target` so that github secrets are available +# (This is required to assign a PR back to the creator when the PR comes from a forked repo) +on: + pull_request_target: + types: [ opened ] + branches: + - main + - 'dspace-**' + +permissions: + pull-requests: write + +jobs: + automation: + runs-on: ubuntu-latest + steps: + # Assign the PR to whomever created it. This is useful for visualizing assignments on project boards + # See https://github.com/toshimaru/auto-author-assign + - name: Assign PR to creator + uses: toshimaru/auto-author-assign@v1.6.2 From 15be060665e9f517f75afbede082cbf6fa749cf1 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 7 Jul 2023 11:56:54 -0500 Subject: [PATCH 829/833] Ensure codescan and label_merge_conflicts run on maintenance branches --- .github/workflows/codescan.yml | 10 +++++++--- .github/workflows/label_merge_conflicts.yml | 7 ++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/codescan.yml b/.github/workflows/codescan.yml index 35a2e2d24a..8b415296c7 100644 --- a/.github/workflows/codescan.yml +++ b/.github/workflows/codescan.yml @@ -5,12 +5,16 @@ # because CodeQL requires a fresh build with all tests *disabled*. name: "Code Scanning" -# Run this code scan for all pushes / PRs to main branch. Also run once a week. +# Run this code scan for all pushes / PRs to main or maintenance branches. Also run once a week. on: push: - branches: [ main ] + branches: + - main + - 'dspace-**' pull_request: - branches: [ main ] + branches: + - main + - 'dspace-**' # Don't run if PR is only updating static documentation paths-ignore: - '**/*.md' diff --git a/.github/workflows/label_merge_conflicts.yml b/.github/workflows/label_merge_conflicts.yml index c1396b6f45..7ea3327741 100644 --- a/.github/workflows/label_merge_conflicts.yml +++ b/.github/workflows/label_merge_conflicts.yml @@ -1,11 +1,12 @@ # This workflow checks open PRs for merge conflicts and labels them when conflicts are found name: Check for merge conflicts -# Run whenever the "main" branch is updated -# NOTE: This means merge conflicts are only checked for when a PR is merged to main. +# Run this for all pushes (i.e. merges) to 'main' or maintenance branches on: push: - branches: [ main ] + branches: + - main + - 'dspace-**' # So that the `conflict_label_name` is removed if conflicts are resolved, # we allow this to run for `pull_request_target` so that github secrets are available. pull_request_target: From effe1816962b569134eea83c75704bba1721e2ae Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 7 Jul 2023 12:05:56 -0500 Subject: [PATCH 830/833] Split docker images into separate jobs to run in parallel. Ensure 'main' codebase is tagged as 'latest' --- .github/workflows/docker.yml | 84 ++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9a2c838d83..0c36d5af98 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -15,29 +15,35 @@ on: permissions: contents: read # to fetch code (actions/checkout) + +env: + # Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action) + # For a new commit on default branch (main), use the literal tag 'latest' on Docker image. + # For a new commit on other branches, use the branch name as the tag for Docker image. + # For a new tag, copy that tag name as the tag for Docker image. + IMAGE_TAGS: | + type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} + type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }} + type=ref,event=tag + # Define default tag "flavor" for docker/metadata-action per + # https://github.com/docker/metadata-action#flavor-input + # We manage the 'latest' tag ourselves to the 'main' branch (see settings above) + TAGS_FLAVOR: | + latest=false + # Architectures / Platforms for which we will build Docker images + # If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work. + # If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. + PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }} + + jobs: - docker: + ############################################### + # Build/Push the 'dspace/dspace-angular' image + ############################################### + dspace-angular: # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace-angular' if: github.repository == 'dspace/dspace-angular' runs-on: ubuntu-latest - env: - # Define tags to use for Docker images based on Git tags/branches (for docker/metadata-action) - # For a new commit on default branch (main), use the literal tag 'dspace-7_x' on Docker image. - # For a new commit on other branches, use the branch name as the tag for Docker image. - # For a new tag, copy that tag name as the tag for Docker image. - IMAGE_TAGS: | - type=raw,value=dspace-7_x,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} - type=ref,event=branch,enable=${{ !endsWith(github.ref, github.event.repository.default_branch) }} - type=ref,event=tag - # Define default tag "flavor" for docker/metadata-action per - # https://github.com/docker/metadata-action#flavor-input - # We turn off 'latest' tag by default. - TAGS_FLAVOR: | - latest=false - # Architectures / Platforms for which we will build Docker images - # If this is a PR, we ONLY build for AMD64. For PRs we only do a sanity check test to ensure Docker builds work. - # If this is NOT a PR (e.g. a tag or merge commit), also build for ARM64. - PLATFORMS: linux/amd64${{ github.event_name != 'pull_request' && ', linux/arm64' || '' }} steps: # https://github.com/actions/checkout @@ -61,9 +67,6 @@ jobs: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - ############################################### - # Build/Push the 'dspace/dspace-angular' image - ############################################### # https://github.com/docker/metadata-action # Get Metadata for docker_build step below - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular' image @@ -77,7 +80,7 @@ jobs: # https://github.com/docker/build-push-action - name: Build and push 'dspace-angular' image id: docker_build - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile @@ -89,9 +92,36 @@ jobs: tags: ${{ steps.meta_build.outputs.tags }} labels: ${{ steps.meta_build.outputs.labels }} - ##################################################### - # Build/Push the 'dspace/dspace-angular' image ('-dist' tag) - ##################################################### + ############################################################# + # Build/Push the 'dspace/dspace-angular' image ('-dist' tag) + ############################################################# + dspace-angular-dist: + # Ensure this job never runs on forked repos. It's only executed for 'dspace/dspace-angular' + if: github.repository == 'dspace/dspace-angular' + runs-on: ubuntu-latest + + steps: + # https://github.com/actions/checkout + - name: Checkout codebase + uses: actions/checkout@v3 + + # https://github.com/docker/setup-buildx-action + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v2 + + # https://github.com/docker/setup-qemu-action + - name: Set up QEMU emulation to build for multiple architectures + uses: docker/setup-qemu-action@v2 + + # https://github.com/docker/login-action + - name: Login to DockerHub + # Only login if not a PR, as PRs only trigger a Docker build and not a push + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + # https://github.com/docker/metadata-action # Get Metadata for docker_build_dist step below - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular-dist' image @@ -107,7 +137,7 @@ jobs: - name: Build and push 'dspace-angular-dist' image id: docker_build_dist - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile.dist From 08ae7bfdbad027c0888624fdbebb1a90704a8112 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Mon, 24 Jul 2023 16:10:23 -0500 Subject: [PATCH 831/833] Replace all old docker "dspace-7_x" tags with latest --- Dockerfile.dist | 2 +- docker/README.md | 6 +++--- docker/cli.yml | 2 +- docker/docker-compose-ci.yml | 2 +- docker/docker-compose-dist.yml | 2 +- docker/docker-compose-rest.yml | 4 ++-- docker/docker-compose.yml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Dockerfile.dist b/Dockerfile.dist index 2a6a66fc06..e4b467ae26 100644 --- a/Dockerfile.dist +++ b/Dockerfile.dist @@ -2,7 +2,7 @@ # See https://github.com/DSpace/dspace-angular/tree/main/docker for usage details # Test build: -# docker build -f Dockerfile.dist -t dspace/dspace-angular:dspace-7_x-dist . +# docker build -f Dockerfile.dist -t dspace/dspace-angular:latest-dist . FROM node:18-alpine as build diff --git a/docker/README.md b/docker/README.md index 42deb793f9..08801137b0 100644 --- a/docker/README.md +++ b/docker/README.md @@ -23,14 +23,14 @@ the Docker compose scripts in this 'docker' folder. This Dockerfile is used to build a *development* DSpace 7 Angular UI image, published as 'dspace/dspace-angular' ``` -docker build -t dspace/dspace-angular:dspace-7_x . +docker build -t dspace/dspace-angular:latest . ``` This image is built *automatically* after each commit is made to the `main` branch. Admins to our DockerHub repo can manually publish with the following command. ``` -docker push dspace/dspace-angular:dspace-7_x +docker push dspace/dspace-angular:latest ``` ### Dockerfile.dist @@ -39,7 +39,7 @@ The `Dockerfile.dist` is used to generate a *production* build and runtime envir ```bash # build the latest image -docker build -f Dockerfile.dist -t dspace/dspace-angular:dspace-7_x-dist . +docker build -f Dockerfile.dist -t dspace/dspace-angular:latest-dist . ``` A default/demo version of this image is built *automatically*. diff --git a/docker/cli.yml b/docker/cli.yml index 54b83d4503..223ec356b9 100644 --- a/docker/cli.yml +++ b/docker/cli.yml @@ -16,7 +16,7 @@ version: "3.7" services: dspace-cli: - image: "${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-dspace-7_x}" + image: "${DOCKER_OWNER:-dspace}/dspace-cli:${DSPACE_VER:-latest}" container_name: dspace-cli environment: # Below syntax may look odd, but it is how to override dspace.cfg settings via env variables. diff --git a/docker/docker-compose-ci.yml b/docker/docker-compose-ci.yml index 9ec8fe664a..edbb5b0759 100644 --- a/docker/docker-compose-ci.yml +++ b/docker/docker-compose-ci.yml @@ -35,7 +35,7 @@ services: solr__D__statistics__P__autoCommit: 'false' depends_on: - dspacedb - image: dspace/dspace:dspace-7_x-test + image: dspace/dspace:latest-test networks: dspacenet: ports: diff --git a/docker/docker-compose-dist.yml b/docker/docker-compose-dist.yml index 1c75539da9..a9ee4a2656 100644 --- a/docker/docker-compose-dist.yml +++ b/docker/docker-compose-dist.yml @@ -27,7 +27,7 @@ services: DSPACE_REST_HOST: api7.dspace.org DSPACE_REST_PORT: 443 DSPACE_REST_NAMESPACE: /server - image: dspace/dspace-angular:dspace-7_x-dist + image: dspace/dspace-angular:${DSPACE_VER:-latest}-dist build: context: .. dockerfile: Dockerfile.dist diff --git a/docker/docker-compose-rest.yml b/docker/docker-compose-rest.yml index e5f62600e7..ea766600ef 100644 --- a/docker/docker-compose-rest.yml +++ b/docker/docker-compose-rest.yml @@ -39,7 +39,7 @@ services: # proxies.trusted.ipranges: This setting is required for a REST API running in Docker to trust requests # from the host machine. This IP range MUST correspond to the 'dspacenet' subnet defined above. proxies__P__trusted__P__ipranges: '172.23.0' - image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}" + image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-latest-test}" depends_on: - dspacedb networks: @@ -82,7 +82,7 @@ services: # DSpace Solr container dspacesolr: container_name: dspacesolr - image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}" + image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-latest}" # Needs main 'dspace' container to start first to guarantee access to solr_configs depends_on: - dspace diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 1387b1de39..1071b8d6ce 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -24,7 +24,7 @@ services: DSPACE_REST_HOST: localhost DSPACE_REST_PORT: 8080 DSPACE_REST_NAMESPACE: /server - image: dspace/dspace-angular:dspace-7_x + image: dspace/dspace-angular:${DSPACE_VER:-latest} build: context: .. dockerfile: Dockerfile From 338b63ebb8ed847dfd2d2d872b2bc0a4994c7b83 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 28 Jul 2023 14:10:44 -0500 Subject: [PATCH 832/833] Add action to automatically create a port PR when specified --- .../workflows/port_merged_pull_request.yml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/port_merged_pull_request.yml diff --git a/.github/workflows/port_merged_pull_request.yml b/.github/workflows/port_merged_pull_request.yml new file mode 100644 index 0000000000..50faf3f886 --- /dev/null +++ b/.github/workflows/port_merged_pull_request.yml @@ -0,0 +1,44 @@ +# This workflow will attempt to port a merged pull request to +# the branch specified in a "port to" label (if exists) +name: Port merged Pull Request + +# Only run for merged PRs against the "main" or maintenance branches +# We allow this to run for `pull_request_target` so that github secrets are available +# (This is required when the PR comes from a forked repo) +on: + pull_request_target: + types: [ closed ] + branches: + - main + - 'dspace-**' + +permissions: + contents: write # so action can add comments + pull-requests: write # so action can create pull requests + +jobs: + port_pr: + runs-on: ubuntu-latest + # Don't run on closed *unmerged* pull requests + if: github.event.pull_request.merged + steps: + # Checkout code + - uses: actions/checkout@v3 + # Port PR to other branch (ONLY if labeled with "port to") + # See https://github.com/korthout/backport-action + - name: Create backport pull requests + uses: korthout/backport-action@v1 + with: + # Trigger based on a "port to [branch]" label on PR + # (This label must specify the branch name to port to) + label_pattern: '^port to ([^ ]+)$' + # Title to add to the (newly created) port PR + pull_title: '[Port ${target_branch}] ${pull_title}' + # Description to add to the (newly created) port PR + pull_description: 'Port of #${pull_number} by @${pull_author} to `${target_branch}`.' + # Copy all labels from original PR to (newly created) port PR + # NOTE: The labels matching 'label_pattern' are automatically excluded + copy_labels_pattern: '.*' + # Use a personal access token (PAT) to create PR as 'dspace-bot' user. + # A PAT is required in order for the new PR to trigger its own actions (for CI checks) + github_token: ${{ secrets.PR_PORT_TOKEN }} \ No newline at end of file From d75d12b423206e0261372b372c27c04c36336cff Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Fri, 28 Jul 2023 14:11:08 -0500 Subject: [PATCH 833/833] Minor update to label_merge_conflicts to ignore any errors (seem random at this time) --- .github/workflows/label_merge_conflicts.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/label_merge_conflicts.yml b/.github/workflows/label_merge_conflicts.yml index 7ea3327741..ccc6c401c0 100644 --- a/.github/workflows/label_merge_conflicts.yml +++ b/.github/workflows/label_merge_conflicts.yml @@ -25,6 +25,8 @@ jobs: # See: https://github.com/prince-chrismc/label-merge-conflicts-action - name: Auto-label PRs with merge conflicts uses: prince-chrismc/label-merge-conflicts-action@v3 + # Ignore any failures -- may occur (randomly?) for older, outdated PRs. + continue-on-error: true # Add "merge conflict" label if a merge conflict is detected. Remove it when resolved. # Note, the authentication token is created automatically # See: https://docs.github.com/en/actions/configuring-and-managing-workflows/authenticating-with-the-github_token
    + {{ getLabel(point) | async }} Date: Fri, 3 Mar 2023 10:08:50 -0600 Subject: [PATCH 407/833] Fix lint warnings by switching + to concat() --- cypress/e2e/breadcrumbs.cy.ts | 2 +- cypress/e2e/collection-page.cy.ts | 2 +- cypress/e2e/community-page.cy.ts | 2 +- cypress/e2e/item-page.cy.ts | 4 ++-- cypress/e2e/login-modal.cy.ts | 2 +- cypress/e2e/my-dspace.cy.ts | 2 +- cypress/e2e/search-navbar.cy.ts | 6 +++--- cypress/e2e/search-page.cy.ts | 4 ++-- cypress/e2e/submission.cy.ts | 6 +++--- cypress/support/commands.ts | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/cypress/e2e/breadcrumbs.cy.ts b/cypress/e2e/breadcrumbs.cy.ts index 157cfdce20..ea6acdafcd 100644 --- a/cypress/e2e/breadcrumbs.cy.ts +++ b/cypress/e2e/breadcrumbs.cy.ts @@ -4,7 +4,7 @@ import { testA11y } from 'cypress/support/utils'; describe('Breadcrumbs', () => { it('should pass accessibility tests', () => { // Visit an Item, as those have more breadcrumbs - cy.visit('/entities/publication/' + TEST_ENTITY_PUBLICATION); + cy.visit('/entities/publication/'.concat(TEST_ENTITY_PUBLICATION)); // Wait for breadcrumbs to be visible cy.get('ds-breadcrumbs').should('be.visible'); diff --git a/cypress/e2e/collection-page.cy.ts b/cypress/e2e/collection-page.cy.ts index 630fa0a18b..a034b4361d 100644 --- a/cypress/e2e/collection-page.cy.ts +++ b/cypress/e2e/collection-page.cy.ts @@ -4,7 +4,7 @@ import { testA11y } from 'cypress/support/utils'; describe('Collection Page', () => { it('should pass accessibility tests', () => { - cy.visit('/collections/' + TEST_COLLECTION); + cy.visit('/collections/'.concat(TEST_COLLECTION)); // tag must be loaded cy.get('ds-collection-page').should('be.visible'); diff --git a/cypress/e2e/community-page.cy.ts b/cypress/e2e/community-page.cy.ts index 34f03e829a..6c628e21ce 100644 --- a/cypress/e2e/community-page.cy.ts +++ b/cypress/e2e/community-page.cy.ts @@ -4,7 +4,7 @@ import { testA11y } from 'cypress/support/utils'; describe('Community Page', () => { it('should pass accessibility tests', () => { - cy.visit('/communities/' + TEST_COMMUNITY); + cy.visit('/communities/'.concat(TEST_COMMUNITY)); // tag must be loaded cy.get('ds-community-page').should('be.visible'); diff --git a/cypress/e2e/item-page.cy.ts b/cypress/e2e/item-page.cy.ts index 7f6282a36f..9eed711776 100644 --- a/cypress/e2e/item-page.cy.ts +++ b/cypress/e2e/item-page.cy.ts @@ -3,8 +3,8 @@ import { TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e'; import { testA11y } from 'cypress/support/utils'; describe('Item Page', () => { - const ITEMPAGE = '/items/' + TEST_ENTITY_PUBLICATION; - const ENTITYPAGE = '/entities/publication/' + TEST_ENTITY_PUBLICATION; + const ITEMPAGE = '/items/'.concat(TEST_ENTITY_PUBLICATION); + const ENTITYPAGE = '/entities/publication/'.concat(TEST_ENTITY_PUBLICATION); // Test that entities will redirect to /entities/[type]/[uuid] when accessed via /items/[uuid] it('should redirect to the entity page when navigating to an item page', () => { diff --git a/cypress/e2e/login-modal.cy.ts b/cypress/e2e/login-modal.cy.ts index 431237c9fb..b169634cfa 100644 --- a/cypress/e2e/login-modal.cy.ts +++ b/cypress/e2e/login-modal.cy.ts @@ -36,7 +36,7 @@ const page = { describe('Login Modal', () => { it('should login when clicking button & stay on same page', () => { - const ENTITYPAGE = '/entities/publication/' + TEST_ENTITY_PUBLICATION; + const ENTITYPAGE = '/entities/publication/'.concat(TEST_ENTITY_PUBLICATION); cy.visit(ENTITYPAGE); // Login menu should exist diff --git a/cypress/e2e/my-dspace.cy.ts b/cypress/e2e/my-dspace.cy.ts index cf717d936d..79786c298a 100644 --- a/cypress/e2e/my-dspace.cy.ts +++ b/cypress/e2e/my-dspace.cy.ts @@ -80,7 +80,7 @@ describe('My DSpace page', () => { cy.get('ds-authorized-collection-selector input[type="search"]').type(TEST_SUBMIT_COLLECTION_NAME); // Click on the button matching that known Collection name - cy.get('ds-authorized-collection-selector button[title="' + TEST_SUBMIT_COLLECTION_NAME + '"]').click(); + cy.get('ds-authorized-collection-selector button[title="'.concat(TEST_SUBMIT_COLLECTION_NAME).concat('"]')).click(); // New URL should include /workspaceitems, as we've started a new submission cy.url().should('include', '/workspaceitems'); diff --git a/cypress/e2e/search-navbar.cy.ts b/cypress/e2e/search-navbar.cy.ts index b13f585323..648db17fe6 100644 --- a/cypress/e2e/search-navbar.cy.ts +++ b/cypress/e2e/search-navbar.cy.ts @@ -27,7 +27,7 @@ describe('Search from Navigation Bar', () => { page.fillOutQueryInNavBar(query); page.submitQueryByPressingEnter(); // New URL should include query param - cy.url().should('include', 'query=' + query); + cy.url().should('include', 'query='.concat(query)); // Wait for search results to come back from the above GET command cy.wait('@search-results'); // At least one search result should be displayed @@ -42,7 +42,7 @@ describe('Search from Navigation Bar', () => { page.fillOutQueryInNavBar(query); page.submitQueryByPressingEnter(); // New URL should include query param - cy.url().should('include', 'query=' + query); + cy.url().should('include', 'query='.concat(query)); // Wait for search results to come back from the above GET command cy.wait('@search-results'); // At least one search result should be displayed @@ -57,7 +57,7 @@ describe('Search from Navigation Bar', () => { page.fillOutQueryInNavBar(query); page.submitQueryByPressingIcon(); // New URL should include query param - cy.url().should('include', 'query=' + query); + cy.url().should('include', 'query='.concat(query)); // Wait for search results to come back from the above GET command cy.wait('@search-results'); // At least one search result should be displayed diff --git a/cypress/e2e/search-page.cy.ts b/cypress/e2e/search-page.cy.ts index 5c1d068b74..24519cc236 100644 --- a/cypress/e2e/search-page.cy.ts +++ b/cypress/e2e/search-page.cy.ts @@ -13,7 +13,7 @@ describe('Search Page', () => { }); it('should load results and pass accessibility tests', () => { - cy.visit('/search?query=' + TEST_SEARCH_TERM); + cy.visit('/search?query='.concat(TEST_SEARCH_TERM)); cy.get('[data-test="search-box"]').should('have.value', TEST_SEARCH_TERM); // tag must be loaded @@ -45,7 +45,7 @@ describe('Search Page', () => { }); it('should have a working grid view that passes accessibility tests', () => { - cy.visit('/search?query=' + TEST_SEARCH_TERM); + cy.visit('/search?query='.concat(TEST_SEARCH_TERM)); // Click button in sidebar to display grid view cy.get('ds-search-sidebar [data-test="grid-view"]').click(); diff --git a/cypress/e2e/submission.cy.ts b/cypress/e2e/submission.cy.ts index 010513dea5..8262bc841e 100644 --- a/cypress/e2e/submission.cy.ts +++ b/cypress/e2e/submission.cy.ts @@ -5,7 +5,7 @@ describe('New Submission page', () => { it('should create a new submission when using /submit path & pass accessibility', () => { // Test that calling /submit with collection & entityType will create a new submission - cy.visit('/submit?collection=' + TEST_SUBMIT_COLLECTION_UUID + '&entityType=none'); + cy.visit('/submit?collection='.concat(TEST_SUBMIT_COLLECTION_UUID).concat('&entityType=none')); // This page is restricted, so we will be shown the login form. Fill it out & submit. cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD); @@ -33,7 +33,7 @@ describe('New Submission page', () => { it('should block submission & show errors if required fields are missing', () => { // Create a new submission - cy.visit('/submit?collection=' + TEST_SUBMIT_COLLECTION_UUID + '&entityType=none'); + cy.visit('/submit?collection='.concat(TEST_SUBMIT_COLLECTION_UUID).concat('&entityType=none')); // This page is restricted, so we will be shown the login form. Fill it out & submit. cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD); @@ -93,7 +93,7 @@ describe('New Submission page', () => { it('should allow for deposit if all required fields completed & file uploaded', () => { // Create a new submission - cy.visit('/submit?collection=' + TEST_SUBMIT_COLLECTION_UUID + '&entityType=none'); + cy.visit('/submit?collection='.concat(TEST_SUBMIT_COLLECTION_UUID).concat('&entityType=none')); // This page is restricted, so we will be shown the login form. Fill it out & submit. cy.loginViaForm(TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD); diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index c3e3058bed..75d235f056 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -56,7 +56,7 @@ function login(email: string, password: string): void { if (!config.rest.baseUrl) { console.warn("Could not load 'rest.baseUrl' from config.json. Falling back to " + FALLBACK_TEST_REST_BASE_URL); } else { - console.log("Found 'rest.baseUrl' in config.json. Using this REST API for login: " + config.rest.baseUrl); + console.log("Found 'rest.baseUrl' in config.json. Using this REST API for login: ".concat(config.rest.baseUrl)); baseRestUrl = config.rest.baseUrl; } From 79cb51b2c153f4a8c1a44f6b6b825fb7849973e0 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 3 Mar 2023 21:45:37 +0100 Subject: [PATCH 408/833] Fix hints not being displayed for dynamic array fields --- .../ds-dynamic-form-control-container.component.html | 2 +- .../ds-dynamic-form-control-container.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html index 55e354ea7a..ad2827772f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.html @@ -15,7 +15,7 @@ -
    0) { const listGroup = this.group.controls[this.model.id] as FormGroup; + if (this.model.repeatable && this.model.required) { + listGroup.setValidators(this.hasAtLeastOneVocabularyEntry()); + } const pageInfo: PageInfo = new PageInfo({ elementsPerPage: 9999, currentPage: 1 } as PageInfo); @@ -121,7 +123,7 @@ export class DsDynamicListComponent extends DynamicFormControlComponent implemen let tempList: ListItem[] = []; this.optionsList = entries.page; // Make a list of available options (checkbox/radio) and split in groups of 'model.groupLength' - entries.page.forEach((option, key) => { + entries.page.forEach((option: VocabularyEntry, key: number) => { const value = option.authority || option.value; const checked: boolean = isNotEmpty(findKey( this.model.value, @@ -156,4 +158,13 @@ export class DsDynamicListComponent extends DynamicFormControlComponent implemen } } + /** + * Checks if at least one {@link VocabularyEntry} has been selected. + */ + hasAtLeastOneVocabularyEntry(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + return control && control.value && Object.values(control.value).find((checked: boolean) => checked === true) ? null : this.model.errorMessages; + }; + } + } diff --git a/src/app/shared/form/builder/form-builder.service.spec.ts b/src/app/shared/form/builder/form-builder.service.spec.ts index cea4d7df6e..bb476e010a 100644 --- a/src/app/shared/form/builder/form-builder.service.spec.ts +++ b/src/app/shared/form/builder/form-builder.service.spec.ts @@ -220,10 +220,16 @@ describe('FormBuilderService test suite', () => { new DynamicListCheckboxGroupModel({ id: 'testCheckboxList', vocabularyOptions: vocabularyOptions, - repeatable: true + repeatable: true, + required: false, }), - new DynamicListRadioGroupModel({ id: 'testRadioList', vocabularyOptions: vocabularyOptions, repeatable: false }), + new DynamicListRadioGroupModel({ + id: 'testRadioList', + vocabularyOptions: vocabularyOptions, + repeatable: false, + required: false, + }), new DynamicRelationGroupModel({ submissionId, From 1e7ede015b59350d24058b57f425b912c7645ecf Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Mon, 6 Mar 2023 11:19:49 -0500 Subject: [PATCH 411/833] Don't allow the date picker to exceed the maximum start or end date for an access option. --- .../section-upload-file-edit.component.ts | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts index 195d291530..5ad9b21172 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { FormControl } from '@angular/forms'; import { @@ -66,7 +66,8 @@ import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynami styleUrls: ['./section-upload-file-edit.component.scss'], templateUrl: './section-upload-file-edit.component.html', }) -export class SubmissionSectionUploadFileEditComponent implements OnInit { +export class SubmissionSectionUploadFileEditComponent + implements OnInit, OnDestroy { /** * The FormComponent reference @@ -435,13 +436,31 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit { delete currentAccessCondition.startDate; } else if (accessCondition.startDate) { const startDate = this.retrieveValueFromField(accessCondition.startDate); - currentAccessCondition.startDate = dateToISOFormat(startDate); + // Clamp the start date to the maximum, if any, since the + // datepicker sometimes exceeds it. + let startDateDate = new Date(startDate); + if (accessConditionOpt.maxStartDate) { + const maxStartDateDate = new Date(accessConditionOpt.maxStartDate); + if (startDateDate > maxStartDateDate) { + startDateDate = maxStartDateDate; + } + } + currentAccessCondition.startDate = dateToISOFormat(startDateDate); } if (!accessConditionOpt.hasEndDate) { delete currentAccessCondition.endDate; } else if (accessCondition.endDate) { const endDate = this.retrieveValueFromField(accessCondition.endDate); - currentAccessCondition.endDate = dateToISOFormat(endDate); + // Clamp the end date to the maximum, if any, since the + // datepicker sometimes exceeds it. + let endDateDate = new Date(endDate); + if (accessConditionOpt.maxEndDate) { + const maxEndDateDate = new Date(accessConditionOpt.maxEndDate); + if (endDateDate > maxEndDateDate) { + endDateDate = maxEndDateDate; + } + } + currentAccessCondition.endDate = dateToISOFormat(endDateDate); } accessConditionsToSave.push(currentAccessCondition); } From 72dbb0fdefc1532c7b9c47234e7b8f2f1bd8aa5a Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Mon, 6 Mar 2023 22:09:34 +0100 Subject: [PATCH 412/833] Themed FeedbackFormComponent --- .../themed-feedback-form.component.ts | 27 +++++++++++++++++++ src/app/info/feedback/feedback.component.html | 4 +-- src/app/info/info.module.ts | 2 ++ .../feedback-form.component.html | 0 .../feedback-form.component.scss | 0 .../feedback-form/feedback-form.component.ts | 14 ++++++++++ src/themes/custom/lazy-theme.module.ts | 2 ++ 7 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/app/info/feedback/feedback-form/themed-feedback-form.component.ts create mode 100644 src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.html create mode 100644 src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.scss create mode 100644 src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.ts diff --git a/src/app/info/feedback/feedback-form/themed-feedback-form.component.ts b/src/app/info/feedback/feedback-form/themed-feedback-form.component.ts new file mode 100644 index 0000000000..9b42db629f --- /dev/null +++ b/src/app/info/feedback/feedback-form/themed-feedback-form.component.ts @@ -0,0 +1,27 @@ +import { Component } from '@angular/core'; +import { ThemedComponent } from '../../../shared/theme-support/themed.component'; +import { FeedbackFormComponent } from './feedback-form.component'; + +/** + * Themed wrapper for {@link FeedbackFormComponent} + */ +@Component({ + selector: 'ds-themed-feedback-form', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedFeedbackFormComponent extends ThemedComponent { + + protected getComponentName(): string { + return 'FeedbackFormComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/info/feedback/feedback-form/feedback-form.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./feedback-form.component'); + } + +} diff --git a/src/app/info/feedback/feedback.component.html b/src/app/info/feedback/feedback.component.html index 210bdcf1d7..ad42f0f90e 100644 --- a/src/app/info/feedback/feedback.component.html +++ b/src/app/info/feedback/feedback.component.html @@ -1,3 +1,3 @@
    - -
    \ No newline at end of file + +
    diff --git a/src/app/info/info.module.ts b/src/app/info/info.module.ts index 61eee71f3a..ccc4af0a7d 100644 --- a/src/app/info/info.module.ts +++ b/src/app/info/info.module.ts @@ -10,6 +10,7 @@ import { ThemedEndUserAgreementComponent } from './end-user-agreement/themed-end import { ThemedPrivacyComponent } from './privacy/themed-privacy.component'; import { FeedbackComponent } from './feedback/feedback.component'; import { FeedbackFormComponent } from './feedback/feedback-form/feedback-form.component'; +import { ThemedFeedbackFormComponent } from './feedback/feedback-form/themed-feedback-form.component'; import { ThemedFeedbackComponent } from './feedback/themed-feedback.component'; import { FeedbackGuard } from '../core/feedback/feedback.guard'; @@ -23,6 +24,7 @@ const DECLARATIONS = [ ThemedPrivacyComponent, FeedbackComponent, FeedbackFormComponent, + ThemedFeedbackFormComponent, ThemedFeedbackComponent ]; diff --git a/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.html b/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.scss b/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.ts b/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.ts new file mode 100644 index 0000000000..fb0041882e --- /dev/null +++ b/src/themes/custom/app/info/feedback/feedback-form/feedback-form.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { + FeedbackFormComponent as BaseComponent +} from '../../../../../../app/info/feedback/feedback-form/feedback-form.component'; + +@Component({ + selector: 'ds-feedback-form', + // templateUrl: './feedback-form.component.html', + templateUrl: '../../../../../../app/info/feedback/feedback-form/feedback-form.component.html', + // styleUrls: ['./feedback-form.component.scss'], + styleUrls: ['../../../../../../app/info/feedback/feedback-form/feedback-form.component.scss'], +}) +export class FeedbackFormComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index d2ac0ae787..4a04575920 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -114,6 +114,7 @@ import { ObjectListComponent } from './app/shared/object-list/object-list.compon import { BrowseByMetadataPageComponent } from './app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component'; import { BrowseByDatePageComponent } from './app/browse-by/browse-by-date-page/browse-by-date-page.component'; import { BrowseByTitlePageComponent } from './app/browse-by/browse-by-title-page/browse-by-title-page.component'; +import { FeedbackFormComponent } from './app/info/feedback/feedback-form/feedback-form.component'; const DECLARATIONS = [ FileSectionComponent, @@ -153,6 +154,7 @@ const DECLARATIONS = [ WorkflowItemSendBackComponent, BreadcrumbsComponent, FeedbackComponent, + FeedbackFormComponent, CommunityListComponent, ComcolPageHandleComponent, AuthNavMenuComponent, From 371bd072b31021b1c744639c7bca0703502a9690 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Mon, 6 Mar 2023 16:13:43 -0600 Subject: [PATCH 413/833] Add generateViewEvent() util to generate stats in e2e tests. Refactored xsrf.interceptor.ts to move constants to a separate file so they can be reused in e2e tests easily. --- cypress/e2e/homepage-statistics.cy.ts | 7 +- cypress/support/commands.ts | 129 ++++++++++++++---- .../auth/server-auth-request.service.spec.ts | 2 +- .../core/auth/server-auth-request.service.ts | 2 +- src/app/core/xsrf/xsrf.constants.ts | 33 +++++ src/app/core/xsrf/xsrf.interceptor.ts | 10 +- .../upload/uploader/uploader.component.ts | 2 +- 7 files changed, 144 insertions(+), 41 deletions(-) create mode 100644 src/app/core/xsrf/xsrf.constants.ts diff --git a/cypress/e2e/homepage-statistics.cy.ts b/cypress/e2e/homepage-statistics.cy.ts index 86b93d4259..2a1ab9785a 100644 --- a/cypress/e2e/homepage-statistics.cy.ts +++ b/cypress/e2e/homepage-statistics.cy.ts @@ -1,5 +1,6 @@ -import { REGEX_MATCH_NON_EMPTY_TEXT } from 'cypress/support/e2e'; +import { REGEX_MATCH_NON_EMPTY_TEXT, TEST_ENTITY_PUBLICATION } from 'cypress/support/e2e'; import { testA11y } from 'cypress/support/utils'; +import '../support/commands'; describe('Site Statistics Page', () => { it('should load if you click on "Statistics" from homepage', () => { @@ -9,6 +10,10 @@ describe('Site Statistics Page', () => { }); it('should pass accessibility tests', () => { + // generate 2 view events on an Item's page + cy.generateViewEvent(TEST_ENTITY_PUBLICATION, 'item'); + cy.generateViewEvent(TEST_ENTITY_PUBLICATION, 'item'); + cy.visit('/statistics'); // tag must be visable diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 75d235f056..2d3947d07f 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -4,10 +4,12 @@ // *********************************************** import { AuthTokenInfo, TOKENITEM } from 'src/app/core/auth/models/auth-token-info.model'; +import { DSPACE_XSRF_COOKIE, XSRF_REQUEST_HEADER } from 'src/app/core/xsrf/xsrf.constants'; // NOTE: FALLBACK_TEST_REST_BASE_URL is only used if Cypress cannot read the REST API BaseURL // from the Angular UI's config.json. See 'login()'. export const FALLBACK_TEST_REST_BASE_URL = 'http://localhost:8080/server'; +export const FALLBACK_TEST_REST_DOMAIN = 'localhost'; // Declare Cypress namespace to help with Intellisense & code completion in IDEs // ALL custom commands MUST be listed here for code completion to work @@ -30,6 +32,15 @@ declare global { * @param password password to login as */ loginViaForm(email: string, password: string): typeof loginViaForm; + + /** + * Generate view event for given object. Useful for testing statistics pages with + * pre-generated statistics. This just generates a single "hit", but can be called multiple times to + * generate multiple hits. + * @param uuid UUID of object + * @param dsoType type of DSpace Object (e.g. "item", "collection", "community") + */ + generateViewEvent(uuid: string, dsoType: string): typeof generateViewEvent; } } } @@ -56,52 +67,57 @@ function login(email: string, password: string): void { if (!config.rest.baseUrl) { console.warn("Could not load 'rest.baseUrl' from config.json. Falling back to " + FALLBACK_TEST_REST_BASE_URL); } else { - console.log("Found 'rest.baseUrl' in config.json. Using this REST API for login: ".concat(config.rest.baseUrl)); + //console.log("Found 'rest.baseUrl' in config.json. Using this REST API for login: ".concat(config.rest.baseUrl)); baseRestUrl = config.rest.baseUrl; } - // To login via REST, first we have to do a GET to obtain a valid CSRF token - cy.request( baseRestUrl + '/api/authn/status' ) - .then((response) => { - // We should receive a CSRF token returned in a response header - expect(response.headers).to.have.property('dspace-xsrf-token'); - const csrfToken = response.headers['dspace-xsrf-token']; + // Now find domain of our REST API, again with a fallback. + let baseDomain = FALLBACK_TEST_REST_DOMAIN; + if (!config.rest.host) { + console.warn("Could not load 'rest.host' from config.json. Falling back to " + FALLBACK_TEST_REST_DOMAIN); + } else { + baseDomain = config.rest.host; + } - // Now, send login POST request including that CSRF token - cy.request({ - method: 'POST', - url: baseRestUrl + '/api/authn/login', - headers: { 'X-XSRF-TOKEN' : csrfToken}, - form: true, // indicates the body should be form urlencoded - body: { user: email, password: password } - }).then((resp) => { - // We expect a successful login - expect(resp.status).to.eq(200); - // We expect to have a valid authorization header returned (with our auth token) - expect(resp.headers).to.have.property('authorization'); + // Create a fake CSRF Token. Set it in the required server-side cookie + const csrfToken = 'fakeLoginCSRFToken'; + cy.setCookie(DSPACE_XSRF_COOKIE, csrfToken, { 'domain': baseDomain }); - // Initialize our AuthTokenInfo object from the authorization header. - const authheader = resp.headers.authorization as string; - const authinfo: AuthTokenInfo = new AuthTokenInfo(authheader); + // Now, send login POST request including that CSRF token + cy.request({ + method: 'POST', + url: baseRestUrl + '/api/authn/login', + headers: { [XSRF_REQUEST_HEADER]: csrfToken}, + form: true, // indicates the body should be form urlencoded + body: { user: email, password: password } + }).then((resp) => { + // We expect a successful login + expect(resp.status).to.eq(200); + // We expect to have a valid authorization header returned (with our auth token) + expect(resp.headers).to.have.property('authorization'); - // Save our AuthTokenInfo object to our dsAuthInfo UI cookie - // This ensures the UI will recognize we are logged in on next "visit()" - cy.setCookie(TOKENITEM, JSON.stringify(authinfo)); - }); + // Initialize our AuthTokenInfo object from the authorization header. + const authheader = resp.headers.authorization as string; + const authinfo: AuthTokenInfo = new AuthTokenInfo(authheader); + + // Save our AuthTokenInfo object to our dsAuthInfo UI cookie + // This ensures the UI will recognize we are logged in on next "visit()" + cy.setCookie(TOKENITEM, JSON.stringify(authinfo)); }); + // Remove cookie with fake CSRF token, as it's no longer needed + cy.clearCookie(DSPACE_XSRF_COOKIE); }); } // Add as a Cypress command (i.e. assign to 'cy.login') Cypress.Commands.add('login', login); - /** * Login user via displayed login form * @param email email to login as * @param password password to login as */ - function loginViaForm(email: string, password: string): void { +function loginViaForm(email: string, password: string): void { // Enter email cy.get('ds-log-in [data-test="email"]').type(email); // Enter password @@ -111,3 +127,60 @@ Cypress.Commands.add('login', login); } // Add as a Cypress command (i.e. assign to 'cy.loginViaForm') Cypress.Commands.add('loginViaForm', loginViaForm); + + +/** + * Generate statistic view event for given object. Useful for testing statistics pages with + * pre-generated statistics. This just generates a single "hit", but can be called multiple times to + * generate multiple hits. + * @param uuid UUID of object + * @param dsoType type of DSpace Object (e.g. "item", "collection", "community") + */ +function generateViewEvent(uuid: string, dsoType: string): void { + // Cypress doesn't have access to the running application in Node.js. + // So, it's not possible to inject or load the AppConfig or environment of the Angular UI. + // Instead, we'll read our running application's config.json, which contains the configs & + // is regenerated at runtime each time the Angular UI application starts up. + cy.task('readUIConfig').then((str: string) => { + // Parse config into a JSON object + const config = JSON.parse(str); + + // Find the URL of our REST API. Have a fallback ready, just in case 'rest.baseUrl' cannot be found. + let baseRestUrl = FALLBACK_TEST_REST_BASE_URL; + if (!config.rest.baseUrl) { + console.warn("Could not load 'rest.baseUrl' from config.json. Falling back to " + FALLBACK_TEST_REST_BASE_URL); + } else { + baseRestUrl = config.rest.baseUrl; + } + + // Now find domain of our REST API, again with a fallback. + let baseDomain = FALLBACK_TEST_REST_DOMAIN; + if (!config.rest.host) { + console.warn("Could not load 'rest.host' from config.json. Falling back to " + FALLBACK_TEST_REST_DOMAIN); + } else { + baseDomain = config.rest.host; + } + + // Create a fake CSRF Token. Set it in the required server-side cookie + const csrfToken = 'fakeGenerateViewEventCSRFToken'; + cy.setCookie(DSPACE_XSRF_COOKIE, csrfToken, { 'domain': baseDomain }); + + // Now, send 'statistics/viewevents' POST request including that fake CSRF token in required header + cy.request({ + method: 'POST', + url: baseRestUrl + '/api/statistics/viewevents', + headers: { [XSRF_REQUEST_HEADER] : csrfToken}, + //form: true, // indicates the body should be form urlencoded + body: { targetId: uuid, targetType: dsoType } + }).then((resp) => { + // We expect a 201 (which means statistics event was created) + expect(resp.status).to.eq(201); + }); + + // Remove cookie with fake CSRF token, as it's no longer needed + cy.clearCookie(DSPACE_XSRF_COOKIE); + }); +} +// Add as a Cypress command (i.e. assign to 'cy.generateViewEvent') +Cypress.Commands.add('generateViewEvent', generateViewEvent); + diff --git a/src/app/core/auth/server-auth-request.service.spec.ts b/src/app/core/auth/server-auth-request.service.spec.ts index df6d78256b..5b0221e5df 100644 --- a/src/app/core/auth/server-auth-request.service.spec.ts +++ b/src/app/core/auth/server-auth-request.service.spec.ts @@ -8,7 +8,7 @@ import { PostRequest } from '../data/request.models'; import { XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER -} from '../xsrf/xsrf.interceptor'; +} from '../xsrf/xsrf.constants'; describe(`ServerAuthRequestService`, () => { let href: string; diff --git a/src/app/core/auth/server-auth-request.service.ts b/src/app/core/auth/server-auth-request.service.ts index d6302081bc..058322acce 100644 --- a/src/app/core/auth/server-auth-request.service.ts +++ b/src/app/core/auth/server-auth-request.service.ts @@ -13,7 +13,7 @@ import { XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER, DSPACE_XSRF_COOKIE -} from '../xsrf/xsrf.interceptor'; +} from '../xsrf/xsrf.constants'; import { map } from 'rxjs/operators'; import { Observable } from 'rxjs'; diff --git a/src/app/core/xsrf/xsrf.constants.ts b/src/app/core/xsrf/xsrf.constants.ts new file mode 100644 index 0000000000..64da5d674e --- /dev/null +++ b/src/app/core/xsrf/xsrf.constants.ts @@ -0,0 +1,33 @@ +/** + * XSRF / CSRF related constants + */ + +/** + * Name of CSRF/XSRF header we (client) may SEND in requests to backend. + * (This is a standard header name for XSRF/CSRF defined by Angular) + */ +export const XSRF_REQUEST_HEADER = 'X-XSRF-TOKEN'; + +/** + * Name of CSRF/XSRF header we (client) may RECEIVE in responses from backend + * This header is defined by DSpace backend, see https://github.com/DSpace/RestContract/blob/main/csrf-tokens.md + */ +export const XSRF_RESPONSE_HEADER = 'DSPACE-XSRF-TOKEN'; + +/** + * Name of client-side Cookie where we store the CSRF/XSRF token between requests. + * This cookie is only available to client, and should be updated whenever a new XSRF_RESPONSE_HEADER + * is found in a response from the backend. + */ +export const XSRF_COOKIE = 'XSRF-TOKEN'; + +/** + * Name of server-side cookie the backend expects the XSRF token to be in. + * When the backend receives a modifying request, it will validate the CSRF/XSRF token by looking + * for a match between the XSRF_REQUEST_HEADER and this Cookie. For more details see + * https://github.com/DSpace/RestContract/blob/main/csrf-tokens.md + * + * NOTE: This Cookie is NOT readable to the client/UI. It is only readable to the backend and will + * be sent along automatically by the user's browser. + */ +export const DSPACE_XSRF_COOKIE = 'DSPACE-XSRF-COOKIE'; diff --git a/src/app/core/xsrf/xsrf.interceptor.ts b/src/app/core/xsrf/xsrf.interceptor.ts index cded432397..c728a5cbd0 100644 --- a/src/app/core/xsrf/xsrf.interceptor.ts +++ b/src/app/core/xsrf/xsrf.interceptor.ts @@ -12,15 +12,7 @@ import { Observable, throwError } from 'rxjs'; import { tap, catchError } from 'rxjs/operators'; import { RESTURLCombiner } from '../url-combiner/rest-url-combiner'; import { CookieService } from '../services/cookie.service'; - -// Name of XSRF header we may send in requests to backend (this is a standard name defined by Angular) -export const XSRF_REQUEST_HEADER = 'X-XSRF-TOKEN'; -// Name of XSRF header we may receive in responses from backend -export const XSRF_RESPONSE_HEADER = 'DSPACE-XSRF-TOKEN'; -// Name of cookie where we store the XSRF token -export const XSRF_COOKIE = 'XSRF-TOKEN'; -// Name of cookie the backend expects the XSRF token to be in -export const DSPACE_XSRF_COOKIE = 'DSPACE-XSRF-COOKIE'; +import { XSRF_COOKIE, XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER } from './xsrf.constants'; /** * Custom Http Interceptor intercepting Http Requests & Responses to diff --git a/src/app/shared/upload/uploader/uploader.component.ts b/src/app/shared/upload/uploader/uploader.component.ts index 14b1ca9b94..ef4ce4ee45 100644 --- a/src/app/shared/upload/uploader/uploader.component.ts +++ b/src/app/shared/upload/uploader/uploader.component.ts @@ -9,7 +9,7 @@ import { UploaderOptions } from './uploader-options.model'; import { hasValue, isNotEmpty, isUndefined } from '../../empty.util'; import { UploaderProperties } from './uploader-properties.model'; import { HttpXsrfTokenExtractor } from '@angular/common/http'; -import { XSRF_COOKIE, XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER } from '../../../core/xsrf/xsrf.interceptor'; +import { XSRF_COOKIE, XSRF_REQUEST_HEADER, XSRF_RESPONSE_HEADER } from '../../../core/xsrf/xsrf.constants'; import { CookieService } from '../../../core/services/cookie.service'; import { DragService } from '../../../core/drag.service'; From 61ace6f8314c4d578143c4b709056a11c56ef030 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 7 Mar 2023 15:02:31 -0600 Subject: [PATCH 414/833] Bug fix: generateViewEvent() requires Solr to commit stats immediately. --- cypress/support/commands.ts | 12 ++++++++++-- docker/docker-compose-ci.yml | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 2d3947d07f..c70c4e37e1 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -133,6 +133,10 @@ Cypress.Commands.add('loginViaForm', loginViaForm); * Generate statistic view event for given object. Useful for testing statistics pages with * pre-generated statistics. This just generates a single "hit", but can be called multiple times to * generate multiple hits. + * + * NOTE: This requires that "solr-statistics.autoCommit=false" be set on the DSpace backend + * (as it is in our docker-compose-ci.yml used in CI). + * Otherwise, by default, new statistical events won't be saved until Solr's autocommit next triggers. * @param uuid UUID of object * @param dsoType type of DSpace Object (e.g. "item", "collection", "community") */ @@ -169,9 +173,13 @@ function generateViewEvent(uuid: string, dsoType: string): void { cy.request({ method: 'POST', url: baseRestUrl + '/api/statistics/viewevents', - headers: { [XSRF_REQUEST_HEADER] : csrfToken}, + headers: { + [XSRF_REQUEST_HEADER] : csrfToken, + // use a known public IP address to avoid being seen as a "bot" + 'X-Forwarded-For': '1.1.1.1', + }, //form: true, // indicates the body should be form urlencoded - body: { targetId: uuid, targetType: dsoType } + body: { targetId: uuid, targetType: dsoType }, }).then((resp) => { // We expect a 201 (which means statistics event was created) expect(resp.status).to.eq(201); diff --git a/docker/docker-compose-ci.yml b/docker/docker-compose-ci.yml index ef84c14f43..9ec8fe664a 100644 --- a/docker/docker-compose-ci.yml +++ b/docker/docker-compose-ci.yml @@ -30,6 +30,9 @@ services: db__P__url: 'jdbc:postgresql://dspacedb:5432/dspace' # solr.server: Ensure we are using the 'dspacesolr' image for Solr solr__P__server: http://dspacesolr:8983/solr + # Tell Statistics to commit all views immediately instead of waiting on Solr's autocommit. + # This allows us to generate statistics in e2e tests so that statistics pages can be tested thoroughly. + solr__D__statistics__P__autoCommit: 'false' depends_on: - dspacedb image: dspace/dspace:dspace-7_x-test From 6d1b9f3fa4d5d4b0fc23054a1d5ffd9c2d69b4a1 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 7 Mar 2023 16:38:25 -0600 Subject: [PATCH 415/833] Ensure all SSR caching is disabled in CI environment --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3fe88a58b9..5470b3cc2a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,6 +23,9 @@ jobs: # Spin up UI on 127.0.0.1 to avoid host resolution issues in e2e tests with Node 18+ DSPACE_UI_HOST: 127.0.0.1 DSPACE_UI_PORT: 4000 + # Ensure all SSR caching is disabled in test environment + DSPACE_CACHE_SERVERSIDE_BOTCACHE_MAX: 0 + DSPACE_CACHE_SERVERSIDE_ANONYMOUSCACHE_MAX: 0 # Tell Cypress to run e2e tests using the same UI URL CYPRESS_BASE_URL: http://127.0.0.1:4000 # When Chrome version is specified, we pin to a specific version of Chrome From e2cf97f8c18dded50dbebcc84a6a5416dc98f81f Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 9 Mar 2023 04:38:59 +0000 Subject: [PATCH 416/833] browse-by-metadata-page works correctly on numeric 'value' param --- .../browse-by-metadata-page.component.ts | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index 5de6c7d856..a8678a04be 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -109,7 +109,7 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { /** * The authority key (may be undefined) associated with {@link #value}. */ - authority: string; + authority: string; /** * The current startsWith option (fetched and updated from query-params) @@ -122,19 +122,19 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { fetchThumbnails: boolean; public constructor(protected route: ActivatedRoute, - protected browseService: BrowseService, - protected dsoService: DSpaceObjectDataService, - protected paginationService: PaginationService, - protected router: Router, - @Inject(APP_CONFIG) public appConfig: AppConfig) { + protected browseService: BrowseService, + protected dsoService: DSpaceObjectDataService, + protected paginationService: PaginationService, + protected router: Router, + @Inject(APP_CONFIG) public appConfig: AppConfig) { this.fetchThumbnails = this.appConfig.browseBy.showThumbnails; this.paginationConfig = Object.assign(new PaginationComponentOptions(), { - id: BBM_PAGINATION_ID, - currentPage: 1, - pageSize: this.appConfig.browseBy.pageSize, - }); - } + id: BBM_PAGINATION_ID, + currentPage: 1, + pageSize: this.appConfig.browseBy.pageSize, + }); + } ngOnInit(): void { @@ -149,19 +149,28 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { return [Object.assign({}, routeParams, queryParams),currentPage,currentSort]; }) ).subscribe(([params, currentPage, currentSort]: [Params, PaginationComponentOptions, SortOptions]) => { - this.browseId = params.id || this.defaultBrowseId; - this.authority = params.authority; - this.value = +params.value || params.value || ''; - this.startsWith = +params.startsWith || params.startsWith; - if (isNotEmpty(this.value)) { - this.updatePageWithItems( - browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), this.value, this.authority); - } else { - this.updatePage(browseParamsToOptions(params, currentPage, currentSort, this.browseId, false)); - } - this.updateParent(params.scope); - this.updateLogo(); - })); + this.browseId = params.id || this.defaultBrowseId; + this.authority = params.authority; + + if(typeof params.value === "string"){ + this.value = params.value.trim(); + } + + this.value = +params.value || params.value || ''; + + if(typeof params.startsWith === "string"){ + this.startsWith = params.startsWith.trim(); + } + + if (isNotEmpty(this.value)) { + this.updatePageWithItems( + browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), this.value, this.authority); + } else { + this.updatePage(browseParamsToOptions(params, currentPage, currentSort, this.browseId, false)); + } + this.updateParent(params.scope); + this.updateLogo(); + })); this.updateStartsWithTextOptions(); } @@ -213,8 +222,8 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { true, true, ...linksToFollow() as FollowLinkConfig[]).pipe( - getFirstSucceededRemoteData() - ); + getFirstSucceededRemoteData() + ); } } @@ -278,9 +287,9 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { * @returns BrowseEntrySearchOptions instance */ export function getBrowseSearchOptions(defaultBrowseId: string, - paginationConfig: PaginationComponentOptions, - sortConfig: SortOptions, - fetchThumbnails?: boolean) { + paginationConfig: PaginationComponentOptions, + sortConfig: SortOptions, + fetchThumbnails?: boolean) { if (!hasValue(fetchThumbnails)) { fetchThumbnails = false; } @@ -297,15 +306,15 @@ export function getBrowseSearchOptions(defaultBrowseId: string, * @param fetchThumbnail Optional parameter for requesting thumbnail images */ export function browseParamsToOptions(params: any, - paginationConfig: PaginationComponentOptions, - sortConfig: SortOptions, - metadata?: string, - fetchThumbnail?: boolean): BrowseEntrySearchOptions { + paginationConfig: PaginationComponentOptions, + sortConfig: SortOptions, + metadata?: string, + fetchThumbnail?: boolean): BrowseEntrySearchOptions { return new BrowseEntrySearchOptions( metadata, paginationConfig, sortConfig, - +params.startsWith || params.startsWith, + params.startsWith, params.scope, fetchThumbnail ); From 293692f1d274ceedb97b20f28c204f28f729ea2e Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 9 Mar 2023 15:45:55 +0000 Subject: [PATCH 417/833] fixing lint issues --- .../browse-by-metadata-page.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index a8678a04be..05f8aacec7 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -152,13 +152,13 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { this.browseId = params.id || this.defaultBrowseId; this.authority = params.authority; - if(typeof params.value === "string"){ + if (typeof params.value === 'string'){ this.value = params.value.trim(); } this.value = +params.value || params.value || ''; - - if(typeof params.startsWith === "string"){ + + if (typeof params.startsWith === 'string'){ this.startsWith = params.startsWith.trim(); } From 9d1991eec1d53dcaaceb00bd70e7bf630c841f59 Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 9 Mar 2023 18:39:13 +0000 Subject: [PATCH 418/833] pageSize applied in Recent Submissions --- .../collection-page/collection-page.component.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/app/collection-page/collection-page.component.ts b/src/app/collection-page/collection-page.component.ts index f730f44658..ce3b4e19b0 100644 --- a/src/app/collection-page/collection-page.component.ts +++ b/src/app/collection-page/collection-page.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, OnInit, Inject } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, combineLatest as observableCombineLatest, Observable, Subject } from 'rxjs'; import { filter, map, mergeMap, startWith, switchMap, take } from 'rxjs/operators'; @@ -29,6 +29,7 @@ import { FeatureID } from '../core/data/feature-authorization/feature-id'; import { getCollectionPageRoute } from './collection-page-routing-paths'; import { redirectOn4xx } from '../core/shared/authorized.operators'; import { BROWSE_LINKS_TO_FOLLOW } from '../core/browse/browse.service'; +import { APP_CONFIG, AppConfig } from '../../../src/config/app-config.interface'; @Component({ selector: 'ds-collection-page', @@ -69,12 +70,13 @@ export class CollectionPageComponent implements OnInit { private authService: AuthService, private paginationService: PaginationService, private authorizationDataService: AuthorizationDataService, + @Inject(APP_CONFIG) public appConfig: AppConfig, ) { - this.paginationConfig = new PaginationComponentOptions(); - this.paginationConfig.id = 'cp'; - this.paginationConfig.pageSize = 5; - this.paginationConfig.currentPage = 1; - this.sortConfig = new SortOptions('dc.date.accessioned', SortDirection.DESC); + this.paginationConfig = Object.assign(new PaginationComponentOptions(), { + id: 'cp', + currentPage: 1, + pageSize: this.appConfig.browseBy.pageSize, + }); } From 22686d52da6d5abe1e0bc85f9df69c96ccd7d202 Mon Sep 17 00:00:00 2001 From: akoscomp Date: Thu, 9 Mar 2023 21:31:47 +0200 Subject: [PATCH 419/833] Update hu language file with dspace7.5 strings Improve translationo --- src/assets/i18n/hu.json5 | 7745 ++++++++++++++++++++++++++++---------- 1 file changed, 5654 insertions(+), 2091 deletions(-) diff --git a/src/assets/i18n/hu.json5 b/src/assets/i18n/hu.json5 index bfa4a53ccf..ab5c8cebc4 100644 --- a/src/assets/i18n/hu.json5 +++ b/src/assets/i18n/hu.json5 @@ -1,5153 +1,8716 @@ { - + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", "401.help": "Nincs jogosultsága az oldal eléréséhez. Az alábbi gombbal vissza tud lépni a főoldalra.", - + // "401.link.home-page": "Take me to the home page", "401.link.home-page": "Vissza a főoldalra", - + // "401.unauthorized": "unauthorized", "401.unauthorized": "jogosulatlan", - - - + + + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", "403.help": "Nincs jogosultsága az oldal eléréséhez. Az alábbi gombbal vissza tud lépni a főoldalra.", - + // "403.link.home-page": "Take me to the home page", "403.link.home-page": "Vissza a főoldalra", - + // "403.forbidden": "forbidden", "403.forbidden": "elérhetetlen", - - - - // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", + + // "500.page-internal-server-error": "Service Unavailable", "404.help": "A keresett oldal nem található. Az oldalt elköltöztették, vagy letörölték. Az alsó gombbal visszakerülhet a honlapra ", - + + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "404.help": "A szerver ideiglenesen nem tudja kiszolgálni a kérését, karbantartás vagy más technikai okok miatt. Próbálja meg később.", + + // "500.link.home-page": "Take me to the home page", + "404.help": "Vissza a főoldalra", + + + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", + // TODO Source message changed - Revise the translation + "404.help": "A keresett oldal nem található. Az oldalt elköltöztették, vagy letörölték. Az alsó gombbal visszakerülhet a honlapra ", + // "404.link.home-page": "Take me to the home page", - "404.link.home-page": "Vissza a honlapra", - + "404.link.home-page": "Vissza a főoldalra", + // "404.page-not-found": "page not found", "404.page-not-found": "oldal nem található", - + + // "error-page.description.401": "unauthorized", + "error-page.description.401": "unauthorized", + + // "error-page.description.403": "forbidden", + "error-page.description.403": "forbidden", + + // "error-page.description.500": "Service Unavailable", + "error-page.description.500": "Service Unavailable", + + // "error-page.description.404": "page not found", + "error-page.description.404": "page not found", + + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargo", + + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Metadata only", + + // "access-status.open.access.listelement.badge": "Open Access", + "access-status.open.access.listelement.badge": "Open Access", + + // "access-status.restricted.listelement.badge": "Restricted", + "access-status.restricted.listelement.badge": "Restricted", + + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Unknown", + // "admin.curation-tasks.breadcrumbs": "System curation tasks", "admin.curation-tasks.breadcrumbs": "Karbantartási feladatok", - + // "admin.curation-tasks.title": "System curation tasks", "admin.curation-tasks.title": "Karbantartási feladatok", - + // "admin.curation-tasks.header": "System curation tasks", "admin.curation-tasks.header": "Karbantartási feladatok", - + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", "admin.registries.bitstream-formats.breadcrumbs": "Formátum regiszter", - + // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", "admin.registries.bitstream-formats.create.breadcrumbs": "Bitfolyam formátum", - + // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", "admin.registries.bitstream-formats.create.failure.content": "Bitfolyam létrehozása közben hiba történt", - + // "admin.registries.bitstream-formats.create.failure.head": "Failure", "admin.registries.bitstream-formats.create.failure.head": "Nem sikerült", - + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", "admin.registries.bitstream-formats.create.head": "Bitfolyam formátum létrehozása", - + // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", "admin.registries.bitstream-formats.create.new": "Bitfolyam formátum hozzáadása.", - + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", "admin.registries.bitstream-formats.create.success.content": "Új bitfolyam formátum sikeresen létrehozva.", - + // "admin.registries.bitstream-formats.create.success.head": "Success", "admin.registries.bitstream-formats.create.success.head": "Sikerült", - + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.failure.amount": "A {{ amount }} formátum(ok) törlése nem sikerült", - + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", "admin.registries.bitstream-formats.delete.failure.head": "Nem sikerült", - + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", "admin.registries.bitstream-formats.delete.success.amount": "A {{ amount }} formátum(ok) sikeresen törölve", - + // "admin.registries.bitstream-formats.delete.success.head": "Success", "admin.registries.bitstream-formats.delete.success.head": "Sikerült", - + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", "admin.registries.bitstream-formats.description": "Ez a bitfolyam formátum lista ismert formátumokról és azok támogatásáról nyújt információt.", - + // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", - // TODO New key - Add a translation - "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", - + "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream formátum", + // "admin.registries.bitstream-formats.edit.description.hint": "", "admin.registries.bitstream-formats.edit.description.hint": "", - + // "admin.registries.bitstream-formats.edit.description.label": "Description", "admin.registries.bitstream-formats.edit.description.label": "Leírás", - + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", "admin.registries.bitstream-formats.edit.extensions.hint": "A kiterjesztések olyan állomány kiterjesztések, amelyek arra használhatók, hogy automatikusan azonosítsák a feltöltött állomány formátumát. Minden formátumhoz megadhat több kiterjesztést.", - + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", "admin.registries.bitstream-formats.edit.extensions.label": "Állomány kiterjesztés", - + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", "admin.registries.bitstream-formats.edit.extensions.placeholder": "Írja be az állomány kiterjesztését a pont nélkül", - + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", "admin.registries.bitstream-formats.edit.failure.content": "Bitfolyam szerkesztése közben hiba történt.", - + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", "admin.registries.bitstream-formats.edit.failure.head": "Nem sikerült", - + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", "admin.registries.bitstream-formats.edit.head": "Bitfolyam formátum: {{ format }}", - + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", "admin.registries.bitstream-formats.edit.internal.hint": "Belsőként megjelölt formátumokat a felhasználó nem láthat, ezek adminisztratív célokat szolgálnak.", - + // "admin.registries.bitstream-formats.edit.internal.label": "Internal", "admin.registries.bitstream-formats.edit.internal.label": "Belső", - + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", "admin.registries.bitstream-formats.edit.mimetype.hint": "Az ehhez a formátumhoz társított MIME típus nem kell, hogy egyedi legyen.", - + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Típus", - + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", "admin.registries.bitstream-formats.edit.shortDescription.hint": "Egyedi név ennek a formátumnak, (pl. Microsoft Word XP vagy Microsoft Word 2000)", - + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", "admin.registries.bitstream-formats.edit.shortDescription.label": "Név", - + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", "admin.registries.bitstream-formats.edit.success.content": "Bitfolyam formátum szerkesztése sikerült.", - + // "admin.registries.bitstream-formats.edit.success.head": "Success", "admin.registries.bitstream-formats.edit.success.head": "Sikerült", - + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", "admin.registries.bitstream-formats.edit.supportLevel.hint": "Intézménye ilyen szintű támogatást biztosít ennek a formátumnak.", - + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", "admin.registries.bitstream-formats.edit.supportLevel.label": "Támogatási szint", - + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", "admin.registries.bitstream-formats.head": "Bitfolyam formátum leíró adatbázis", - + // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", "admin.registries.bitstream-formats.no-items": "Nincs látható bitfolyam formátum.", - + // "admin.registries.bitstream-formats.table.delete": "Delete selected", "admin.registries.bitstream-formats.table.delete": "Kiválasztottak törlése", - + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", "admin.registries.bitstream-formats.table.deselect-all": "Valamennyi kiválasztás megszüntetése", - + // "admin.registries.bitstream-formats.table.internal": "internal", "admin.registries.bitstream-formats.table.internal": "belső", - + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", "admin.registries.bitstream-formats.table.mimetype": "MIME típus", - + // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Név", - // TODO New key - Add a translation + // "admin.registries.bitstream-formats.table.id" : "ID", "admin.registries.bitstream-formats.table.id" : "ID", - - // "admin.registries.bitstream-formats.table.return": "Return", + + // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Vissza", - + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Ismert", - + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Támogatott", - + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Ismeretlen", - + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", "admin.registries.bitstream-formats.table.supportLevel.head": "Támogatási szint", - - // "admin.registries.bitstream-formats.title": "DSpace Angular :: Bitstream Format Registry", - "admin.registries.bitstream-formats.title": "DSpace Angular :: Bitfolyam formátum leíró adatbázis", - - - + + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + "admin.registries.bitstream-formats.title": "Bitfolyam formátum leíró adatbázis", + + + // "admin.registries.metadata.breadcrumbs": "Metadata registry", "admin.registries.metadata.breadcrumbs": "Metaadat leíró adatbázis", - + // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", "admin.registries.metadata.description": "A metaadat leíró adatbázis tartalmazza a tárban fellelhető valamennyi metaadat mező listáját. Ezek a mezők több sémára oszthatók. Viszont a DSpace a minősített Dublin Core sémát kéri.", - + // "admin.registries.metadata.form.create": "Create metadata schema", "admin.registries.metadata.form.create": "Metaadat séma létrehozása", - + // "admin.registries.metadata.form.edit": "Edit metadata schema", "admin.registries.metadata.form.edit": "Metaadat séma szerkesztése", - + // "admin.registries.metadata.form.name": "Name", "admin.registries.metadata.form.name": "Név", - + // "admin.registries.metadata.form.namespace": "Namespace", "admin.registries.metadata.form.namespace": "Névhely", - + // "admin.registries.metadata.head": "Metadata Registry", "admin.registries.metadata.head": "Metaadat leíró adatbázis", - + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", "admin.registries.metadata.schemas.no-items": "Nincs elérhető metaadat séma.", - + // "admin.registries.metadata.schemas.table.delete": "Delete selected", "admin.registries.metadata.schemas.table.delete": "Kiválasztottak törlése", - + // "admin.registries.metadata.schemas.table.id": "ID", "admin.registries.metadata.schemas.table.id": "Azonosító", - + // "admin.registries.metadata.schemas.table.name": "Name", "admin.registries.metadata.schemas.table.name": "Név", - + // "admin.registries.metadata.schemas.table.namespace": "Namespace", "admin.registries.metadata.schemas.table.namespace": "Névhely", - - // "admin.registries.metadata.title": "DSpace Angular :: Metadata Registry", - "admin.registries.metadata.title": "DSpace Angular :: Metaadat leíró adatbázis", - - - + + // "admin.registries.metadata.title": "Metadata Registry", + "admin.registries.metadata.title": "Metaadat leíró adatbázis", + + + // "admin.registries.schema.breadcrumbs": "Metadata schema", "admin.registries.schema.breadcrumbs": "Metaadat séma", - + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", "admin.registries.schema.description": "Ez a metaadat séma a következőhöz \"{{namespace}}\".", - + // "admin.registries.schema.fields.head": "Schema metadata fields", "admin.registries.schema.fields.head": "Séma metaadat mezők", - + // "admin.registries.schema.fields.no-items": "No metadata fields to show.", "admin.registries.schema.fields.no-items": "Nincs elérhető metaadat mező.", - + // "admin.registries.schema.fields.table.delete": "Delete selected", "admin.registries.schema.fields.table.delete": "Kiválasztások törlése", - + // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Mező", - // TODO New key - Add a translation + // "admin.registries.schema.fields.table.id" : "ID", "admin.registries.schema.fields.table.id" : "ID", - + // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Cél megjegyzés", - + // "admin.registries.schema.form.create": "Create metadata field", "admin.registries.schema.form.create": "Metaadat mező létrehozása", - + // "admin.registries.schema.form.edit": "Edit metadata field", "admin.registries.schema.form.edit": "metaadat mező szerkesztése", - + // "admin.registries.schema.form.element": "Element", "admin.registries.schema.form.element": "Elem", - + // "admin.registries.schema.form.qualifier": "Qualifier", "admin.registries.schema.form.qualifier": "Minősítő", - + // "admin.registries.schema.form.scopenote": "Scope Note", "admin.registries.schema.form.scopenote": "Cél megjegyzés", - + // "admin.registries.schema.head": "Metadata Schema", "admin.registries.schema.head": "Metaadat Séma", - + // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.created": "Metaadat séma létrehozása sikerült \"{{prefix}}\"", - + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.failure": "A {{amount}} metaadat sémák törlése nem sikerült", - + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", "admin.registries.schema.notification.deleted.success": "A {{amount}} metaadat sémák törlése sikerült", - + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", "admin.registries.schema.notification.edited": "Metaadat séma szerkesztése sikerült \"{{prefix}}\"", - + // "admin.registries.schema.notification.failure": "Error", "admin.registries.schema.notification.failure": "Hiba", - + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", "admin.registries.schema.notification.field.created": "Metaadat mező létrehozva\"{{field}}\"", - + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.failure": "A{{amount}} metaadat mezők törlése nem sikerült", - + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", "admin.registries.schema.notification.field.deleted.success": "A{{amount}} metaadat mezők törlése sikerült", - + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", "admin.registries.schema.notification.field.edited": "metaadat mező szerkesztése sikerült\"{{field}}\"", - + // "admin.registries.schema.notification.success": "Success", "admin.registries.schema.notification.success": "Sikerült", - - // "admin.registries.schema.return": "Return", + + // "admin.registries.schema.return": "Back", "admin.registries.schema.return": "Vissza", - - // "admin.registries.schema.title": "DSpace Angular :: Metadata Schema Registry", - "admin.registries.schema.title": "DSpace Angular :: Metaadat Séma leíró adatbázis", - - - + + // "admin.registries.schema.title": "Metadata Schema Registry", + "admin.registries.schema.title": "Metaadat Séma leíró adatbázis", + + + // "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.delete": "EPerson törlése", - + // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", "admin.access-control.epeople.actions.impersonate": "EPerson megszemélyesítése", - + // "admin.access-control.epeople.actions.reset": "Reset password", "admin.access-control.epeople.actions.reset": "Jelszó visszaállítása", - + // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", "admin.access-control.epeople.actions.stop-impersonating": "EPerson megszemélyesítésének befejezése", - - // "admin.access-control.epeople.title": "DSpace Angular :: EPeople", - "admin.access-control.epeople.title": "DSpace Angular :: EPeople", - + + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "ESzemély", + + // "admin.access-control.epeople.title": "EPeople", + "admin.access-control.epeople.title": "ESzemély", + // "admin.access-control.epeople.head": "EPeople", - "admin.access-control.epeople.head": "EPeople", - + "admin.access-control.epeople.head": "ESzemély", + // "admin.access-control.epeople.search.head": "Search", "admin.access-control.epeople.search.head": "Keresés", - + // "admin.access-control.epeople.button.see-all": "Browse All", "admin.access-control.epeople.button.see-all": "Valamennyi böngészése", - + // "admin.access-control.epeople.search.scope.metadata": "Metadata", "admin.access-control.epeople.search.scope.metadata": "Metaadat", - + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", "admin.access-control.epeople.search.scope.email": "E-mail (pontosan)", - + // "admin.access-control.epeople.search.button": "Search", "admin.access-control.epeople.search.button": "Keresés", - + + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Személy keresése...", + // "admin.access-control.epeople.button.add": "Add EPerson", "admin.access-control.epeople.button.add": "EPerson hozzáadása", - + // "admin.access-control.epeople.table.id": "ID", "admin.access-control.epeople.table.id": "Azonosító", - + // "admin.access-control.epeople.table.name": "Name", "admin.access-control.epeople.table.name": "Név", - + // "admin.access-control.epeople.table.email": "E-mail (exact)", "admin.access-control.epeople.table.email": "E-mail (pontosan)", - + // "admin.access-control.epeople.table.edit": "Edit", "admin.access-control.epeople.table.edit": "Szerkesztés", - + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.edit": "Szerkesztés \"{{name}}\"", - + + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Nincs jogosultsága a csoport szerkesztéséhez", + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.epeople.table.edit.buttons.remove": "Törlés \"{{name}}\"", - + // "admin.access-control.epeople.no-items": "No EPeople to show.", - "admin.access-control.epeople.no-items": "Nincs elérhető EPeople.", - + "admin.access-control.epeople.no-items": "Nincs elérhető ESzemély.", + // "admin.access-control.epeople.form.create": "Create EPerson", - "admin.access-control.epeople.form.create": "EPerson létrehozása", - + "admin.access-control.epeople.form.create": "ESzemély létrehozása", + // "admin.access-control.epeople.form.edit": "Edit EPerson", - // TODO Source message changed - Revise the translation - "admin.access-control.epeople.form.edit": "EPerson szerkesztése", - + "admin.access-control.epeople.form.edit": "ESzemély szerkesztése", + // "admin.access-control.epeople.form.firstName": "First name", "admin.access-control.epeople.form.firstName": "Keresztnév", - + // "admin.access-control.epeople.form.lastName": "Last name", "admin.access-control.epeople.form.lastName": "Családnév", - + // "admin.access-control.epeople.form.email": "E-mail", "admin.access-control.epeople.form.email": "E-mail", - + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", "admin.access-control.epeople.form.emailHint": "Érvényes e-mail cím kell, hogy legyen", - + // "admin.access-control.epeople.form.canLogIn": "Can log in", "admin.access-control.epeople.form.canLogIn": "Bejelentkezhet", - + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", "admin.access-control.epeople.form.requireCertificate": "Tanúsítvány szükséges", - + + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Vissza", + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.success": "EPerson \"{{name}} sikeresen létrehozva\"", - + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.created.failure": "EPerson \"{{name}}létrehozása nem sikerült\"", - + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.created.failure.emailInUse": "EPerson \"{{name}}\" létrehozása nem sikerült, email \"{{email}}\" már használatban van.", - + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "EPerson \"{{name}}\" szerkesztése nem sikerült, email \"{{email}}\" már használatban van.", - + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.success": "EPerson \"{{name}}\" szerkesztése sikerült", - + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.edited.failure": "EPerson \"{{name}}\" szerkesztése nem sikerült", - + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.success": "Sikeresen törölve: EPerson \"{{name}}\"", - + // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", "admin.access-control.epeople.form.notification.deleted.failure": "Nem sikerült törülni: EPerson \"{{name}}\"", - + // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Tagja a következő csoportoknak:", - + // "admin.access-control.epeople.form.table.id": "ID", "admin.access-control.epeople.form.table.id": "Azonosító", - + // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Név", - + + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Gyűjtemény/Közösség", + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", - "admin.access-control.epeople.form.memberOfNoGroups": "Ez azEPerson egyetlen csoportnak sem tagja", - + "admin.access-control.epeople.form.memberOfNoGroups": "Ez az ESzemély egyetlen csoportnak sem tagja", + // "admin.access-control.epeople.form.goToGroups": "Add to groups", "admin.access-control.epeople.form.goToGroups": "Hozzáadás csoportokhoz", - + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.failure": "EPerson: \"{{name}}\" törlése nem sikerült", - + "admin.access-control.epeople.notification.deleted.failure": "ESzemély: \"{{name}}\" törlése nem sikerült", + // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "EPerson: \"{{name}}\" törlése sikerült", - - - - // "admin.access-control.groups.title": "DSpace Angular :: Groups", - "admin.access-control.groups.title": "DSpace Angular :: Csoportok", - - // "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Edit Group", - "admin.access-control.groups.title.singleGroup": "DSpace Angular :: Csoport szerkesztése", - - // "admin.access-control.groups.title.addGroup": "DSpace Angular :: New Group", - "admin.access-control.groups.title.addGroup": "DSpace Angular :: Új csoport", - + "admin.access-control.epeople.notification.deleted.success": "ESzemély: \"{{name}}\" törlése sikerült", + + + + // "admin.access-control.groups.title": "Groups", + "admin.access-control.groups.title": "Csoportok", + + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Csoportok", + + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + "admin.access-control.groups.singleGroup.breadcrumbs": "Csoport szerkesztése", + + // "admin.access-control.groups.title.singleGroup": "Edit Group", + "admin.access-control.groups.title.singleGroup": "Csoport szerkesztése", + + // "admin.access-control.groups.title.addGroup": "New Group", + "admin.access-control.groups.title.addGroup": "Új csoport", + + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "Új csoport", + // "admin.access-control.groups.head": "Groups", "admin.access-control.groups.head": "Csoportok", - + // "admin.access-control.groups.button.add": "Add group", "admin.access-control.groups.button.add": "Csoport hozzáadása", - + // "admin.access-control.groups.search.head": "Search groups", "admin.access-control.groups.search.head": "Csoportok keresése", - + // "admin.access-control.groups.button.see-all": "Browse all", "admin.access-control.groups.button.see-all": "valamennyi böngészése", - + // "admin.access-control.groups.search.button": "Search", "admin.access-control.groups.search.button": "Keresés", - + + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Csoport keresése...", + // "admin.access-control.groups.table.id": "ID", "admin.access-control.groups.table.id": "Azonosító", - + // "admin.access-control.groups.table.name": "Name", "admin.access-control.groups.table.name": "Név", - + + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Gyűjtemény/Közösség", + // "admin.access-control.groups.table.members": "Members", "admin.access-control.groups.table.members": "Tagok", - + // "admin.access-control.groups.table.edit": "Edit", "admin.access-control.groups.table.edit": "Szerkesztés", - + // "admin.access-control.groups.table.edit.buttons.edit": "Edit \"{{name}}\"", "admin.access-control.groups.table.edit.buttons.edit": "Szerkesztés \"{{name}}\"", - + // "admin.access-control.groups.table.edit.buttons.remove": "Delete \"{{name}}\"", "admin.access-control.groups.table.edit.buttons.remove": "Törlés \"{{name}}\"", - + // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", "admin.access-control.groups.no-items": "Egyetlen csoport sem tartalmazza nevében, vagy UUID-ként ezt", - + // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", "admin.access-control.groups.notification.deleted.success": "\"{{name}}\" csoport törlése sikerült", - + // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", - // TODO Source message changed - Revise the translation "admin.access-control.groups.notification.deleted.failure.title": "\"{{name}}\" csoport törlése nem sikerült", - + // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", "admin.access-control.groups.notification.deleted.failure.content": "Ok: \"{{cause}}\"", - - - + + + // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.permanent": "Ez a csoport állandó, nem szerkeszthető vagy törölhető. Ugyanakor a csoporttagság szerkeszthető.", - + // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", "admin.access-control.groups.form.alert.workflowGroup": "A csoport nem módosítható vagy törölhető, mert használva van egy szerepkörben vagy egy folyamatban a(z) \"{{name}}\" {{comcol}} helyen. Törölheti a \"szerepkör hozzárendelése\" fülön a szerkesztés oldalon: {{comcol}}. Ugyanakkor ezen az oldalon, szerkesztheti a csoporttagokat.", - + // "admin.access-control.groups.form.head.create": "Create group", "admin.access-control.groups.form.head.create": "Csoport létrehozása", - + // "admin.access-control.groups.form.head.edit": "Edit group", "admin.access-control.groups.form.head.edit": "Csoport szerkesztése", - + // "admin.access-control.groups.form.groupName": "Group name", "admin.access-control.groups.form.groupName": "Csoport neve", - + + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Közösség vagy Gyűjtemény", + // "admin.access-control.groups.form.groupDescription": "Description", "admin.access-control.groups.form.groupDescription": "Leírás", - + // "admin.access-control.groups.form.notification.created.success": "Successfully created Group \"{{name}}\"", "admin.access-control.groups.form.notification.created.success": "\"{{name}}\" csoport létrehozása sikerült", - + // "admin.access-control.groups.form.notification.created.failure": "Failed to create Group \"{{name}}\"", "admin.access-control.groups.form.notification.created.failure": "\"{{name}}\" csoport létrehozása nem sikerült", - + // "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Failed to create Group with name: \"{{name}}\", make sure the name is not already in use.", "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Nem sikerült csoport létrehozása a következő névvel: \"{{name}}\", győződjön meg róla, hogy a név nincs már használatban.", - + // "admin.access-control.groups.form.notification.edited.failure": "Failed to edit Group \"{{name}}\"", "admin.access-control.groups.form.notification.edited.failure": "Nem sikerült szerkeszteni a csoportot \"{{name}}\"", - + // "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Name \"{{name}}\" already in use!", "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "A(z) \"{{name}}\" név már foglalt!", - + // "admin.access-control.groups.form.notification.edited.success": "Successfully edited Group \"{{name}}\"", "admin.access-control.groups.form.notification.edited.success": "Sikeresen szerkesztett csoport: \"{{name}}\"", - + // "admin.access-control.groups.form.actions.delete": "Delete Group", "admin.access-control.groups.form.actions.delete": "Csoport törlése", - + // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", "admin.access-control.groups.form.delete-group.modal.header": "Csoport törlése: \"{{ dsoName }}\"", - + // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", "admin.access-control.groups.form.delete-group.modal.info": "Biztos törli a csoportot: \"{{ dsoName }}\"", - + // "admin.access-control.groups.form.delete-group.modal.cancel": "Cancel", "admin.access-control.groups.form.delete-group.modal.cancel": "Mégsem", - + // "admin.access-control.groups.form.delete-group.modal.confirm": "Delete", "admin.access-control.groups.form.delete-group.modal.confirm": "Törlés", - + // "admin.access-control.groups.form.notification.deleted.success": "Successfully deleted group \"{{ name }}\"", "admin.access-control.groups.form.notification.deleted.success": "Csoport sikeresen törölve: \"{{ name }}\"", - + // "admin.access-control.groups.form.notification.deleted.failure.title": "Failed to delete group \"{{ name }}\"", "admin.access-control.groups.form.notification.deleted.failure.title": "Nem sikerült törölni a csoportot: \"{{ name }}\"", - + // "admin.access-control.groups.form.notification.deleted.failure.content": "Cause: \"{{ cause }}\"", "admin.access-control.groups.form.notification.deleted.failure.content": "Ok: \"{{ cause }}\"", - + // "admin.access-control.groups.form.members-list.head": "EPeople", "admin.access-control.groups.form.members-list.head": "EPeople", - + // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", "admin.access-control.groups.form.members-list.search.head": "EPeople hozzáadása", - + // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", "admin.access-control.groups.form.members-list.button.see-all": "Valamennyi böngészése", - + // "admin.access-control.groups.form.members-list.headMembers": "Current Members", "admin.access-control.groups.form.members-list.headMembers": "Jelenlegi tagok", - + // "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", "admin.access-control.groups.form.members-list.search.scope.metadata": "Metaadat", - + // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (pontosan)", - + // "admin.access-control.groups.form.members-list.search.button": "Search", "admin.access-control.groups.form.members-list.search.button": "Keresés", - + // "admin.access-control.groups.form.members-list.table.id": "ID", "admin.access-control.groups.form.members-list.table.id": "Azonosító", - + // "admin.access-control.groups.form.members-list.table.name": "Name", "admin.access-control.groups.form.members-list.table.name": "Név", - + + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identitás", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "E-mail", + + // "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.netid": "NetID", + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", "admin.access-control.groups.form.members-list.table.edit": "Törlés / Hozzáadás", - + // "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "A\"{{name}}\" nevű tag törlése", - + // "admin.access-control.groups.form.members-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.success.addMember": "A: \"{{name}}\" tag sikeresen hozzáadva", - + // "admin.access-control.groups.form.members-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.failure.addMember": "A: \"{{name}}\" tag hozzáadása nem sikerült", - + // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.success.deleteMember": "A: \"{{name}}\" tag törlése sikerült", - + // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "A: \"{{name}}\" tag törlése nem sikerült", - + // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Tag hozzáadása a következő névvel: \"{{name}}\"", - + // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Nincs jelenleg aktív csoport, előbb adjon meg egy nevet.", - + // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", "admin.access-control.groups.form.members-list.no-members-yet": "A csoportnak még nincs egy tagja sem, keressen s adjon hozzá.", - + // "admin.access-control.groups.form.members-list.no-items": "No EPeople found in that search", "admin.access-control.groups.form.members-list.no-items": "Ez a keresés nem talált EPeople-t", - + // "admin.access-control.groups.form.subgroups-list.notification.failure": "Something went wrong: \"{{cause}}\"", - // TODO New key - Add a translation - "admin.access-control.groups.form.subgroups-list.notification.failure": "Something went wrong: \"{{cause}}\"", - + "admin.access-control.groups.form.subgroups-list.notification.failure": "Valami nem sikerült: \"{{cause}}\"", + // "admin.access-control.groups.form.subgroups-list.head": "Groups", "admin.access-control.groups.form.subgroups-list.head": "Csoportok", - + // "admin.access-control.groups.form.subgroups-list.search.head": "Add Subgroup", "admin.access-control.groups.form.subgroups-list.search.head": "Alcsoport hozzáadása", - + // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", "admin.access-control.groups.form.subgroups-list.button.see-all": "valamennyi böngészése", - + // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", "admin.access-control.groups.form.subgroups-list.headSubgroups": "jelenlegi alcsoportok", - + // "admin.access-control.groups.form.subgroups-list.search.button": "Search", "admin.access-control.groups.form.subgroups-list.search.button": "keresés", - + // "admin.access-control.groups.form.subgroups-list.table.id": "ID", "admin.access-control.groups.form.subgroups-list.table.id": "Azonosító", - + // "admin.access-control.groups.form.subgroups-list.table.name": "Name", "admin.access-control.groups.form.subgroups-list.table.name": "Név", - + + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Gyűjtemény/Közösség", + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", "admin.access-control.groups.form.subgroups-list.table.edit": "Törlés / Hozzáadás", - + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Remove subgroup with name \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "A következő nevű \"{{name}}\" alcsoport törlése", - + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Add subgroup with name \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "A következő nevű \"{{name}}\" alcsoport hozzáadása", - + // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Jelenlegi csoport", - + // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "A: \"{{name}}\" alcsoport sikeresen hozzáadva", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Failed to add subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "A: \"{{name}}\" alcsoport hozzáadása nem sikerült", - + // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "A: \"{{name}}\" alcsoport sikeresen törölve", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "A: \"{{name}}\" alcsoport törlése nem sikerült", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "jelenleg nincs aktív csoport, előbb adjon meg egy nevet.", - + // "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "This is the current group, can't be added.", "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Ez a jelenlegi csoport, nem lehet hozzáadni.", - + // "admin.access-control.groups.form.subgroups-list.no-items": "No groups found with this in their name or this as UUID", "admin.access-control.groups.form.subgroups-list.no-items": "Egyetlen csoport neve vagy UUID-je sem tartalmazza ezt", - + // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "A csoportnak még nincsenek alcsoportjai.", - - // "admin.access-control.groups.form.return": "Return to groups", - "admin.access-control.groups.form.return": "Vissza a csoportokhoz", - - - + + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Vissza", + + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + // TODO New key - Add a translation + "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + + // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + // TODO New key - Add a translation + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + // TODO New key - Add a translation + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Adminisztratív keresés", - + // "admin.search.collection.edit": "Edit", "admin.search.collection.edit": "Szerkesztés", - + // "admin.search.community.edit": "Edit", "admin.search.community.edit": "Szerkesztés", - + // "admin.search.item.delete": "Delete", "admin.search.item.delete": "Törlés", - + // "admin.search.item.edit": "Edit", "admin.search.item.edit": "Szerkesztés", - - // "admin.search.item.make-private": "Make Private", - "admin.search.item.make-private": "legyen privát", - - // "admin.search.item.make-public": "Make Public", + + // "admin.search.item.make-private": "Make non-discoverable", + "admin.search.item.make-private": "Legyen privát", + + // "admin.search.item.make-public": "Make discoverable", "admin.search.item.make-public": "Legyen nyilvános", - + // "admin.search.item.move": "Move", "admin.search.item.move": "Költöztetés", - + // "admin.search.item.reinstate": "Reinstate", "admin.search.item.reinstate": "Visszaállítás", - + // "admin.search.item.withdraw": "Withdraw", "admin.search.item.withdraw": "Visszavonás", - + // "admin.search.title": "Administrative Search", "admin.search.title": "Adminisztratív keresés", - + // "administrativeView.search.results.head": "Administrative Search", "administrativeView.search.results.head": "Adminisztratív keresés", - - - - + + + + // "admin.workflow.breadcrumbs": "Administer Workflow", "admin.workflow.breadcrumbs": "Munkafolyamat irányítása", - + // "admin.workflow.title": "Administer Workflow", "admin.workflow.title": "Munkafolyamat irányítása", - + // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Munkafolyamat", - + + // "admin.workflow.item.workspace": "Workspace", + // TODO New key - Add a translation + "admin.workflow.item.workspace": "Workspace", + // "admin.workflow.item.delete": "Delete", "admin.workflow.item.delete": "Törlés", - + // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Visszaküldés", - - - + + // "admin.workflow.item.policies": "Policies", + // TODO New key - Add a translation + "admin.workflow.item.policies": "Policies", + + // "admin.workflow.item.supervision": "Supervision", + // TODO New key - Add a translation + "admin.workflow.item.supervision": "Supervision", + + + // "admin.metadata-import.breadcrumbs": "Import Metadata", "admin.metadata-import.breadcrumbs": "Metaadat importálása", - + + // "admin.batch-import.breadcrumbs": "Import Batch", + // TODO New key - Add a translation + "admin.batch-import.breadcrumbs": "Import Batch", + // "admin.metadata-import.title": "Import Metadata", "admin.metadata-import.title": "Metaadat importálása", - + + // "admin.batch-import.title": "Import Batch", + // TODO New key - Add a translation + "admin.batch-import.title": "Import Batch", + // "admin.metadata-import.page.header": "Import Metadata", "admin.metadata-import.page.header": "Metaadat importálása", - + + // "admin.batch-import.page.header": "Import Batch", + // TODO New key - Add a translation + "admin.batch-import.page.header": "Import Batch", + // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", "admin.metadata-import.page.help": "Becsatolhat vagy kikereshet CSV fájlokat, amelyek az itt tárolt fájlokra vonatkozó műveleteket tárolnak", - + + // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + // TODO New key - Add a translation + "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", "admin.metadata-import.page.dropMsg": "Húzzon ide egy metaadat CSV-t az importáláshoz", - + + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + // TODO New key - Add a translation + "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", "admin.metadata-import.page.dropMsgReplace": "Húzzon ide egy metaadat CSV-t az importálás felülírásához", - - // "admin.metadata-import.page.button.return": "Return", + + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + // TODO New key - Add a translation + "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + + // "admin.metadata-import.page.button.return": "Back", "admin.metadata-import.page.button.return": "Vissza", - + // "admin.metadata-import.page.button.proceed": "Proceed", "admin.metadata-import.page.button.proceed": "Folytassa", - + + // "admin.metadata-import.page.button.select-collection": "Select Collection", + "admin.metadata-import.page.button.select-collection": "Gyűjtemény kiválasztása", + // "admin.metadata-import.page.error.addFile": "Select file first!", "admin.metadata-import.page.error.addFile": "Előbb válassza ki a fájlt!", - - - - + + // "admin.batch-import.page.error.addFile": "Select Zip file first!", + // TODO New key - Add a translation + "admin.batch-import.page.error.addFile": "Select Zip file first!", + + // "admin.metadata-import.page.validateOnly": "Validate Only", + // TODO New key - Add a translation + "admin.metadata-import.page.validateOnly": "Validate Only", + + // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", + // TODO New key - Add a translation + "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", + + // "advanced-workflow-action.rating.form.rating.label": "Rating", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.rating.label": "Rating", + + // "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + + // "advanced-workflow-action.rating.form.review.label": "Review", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.review.label": "Review", + + // "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + + // "advanced-workflow-action.rating.description": "Please select a rating below", + // TODO New key - Add a translation + "advanced-workflow-action.rating.description": "Please select a rating below", + + // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + // TODO New key - Add a translation + "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + + + // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + // TODO New key - Add a translation + "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + + // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + // TODO New key - Add a translation + "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + + // "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + // TODO New key - Add a translation + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + + // "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + // TODO New key - Add a translation + "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + + // "admin.batch-import.page.remove": "remove", + // TODO New key - Add a translation + "admin.batch-import.page.remove": "remove", + // "auth.errors.invalid-user": "Invalid email address or password.", - "auth.errors.invalid-user": "Érvénytelen email cím, vagy jelszó.", - + "auth.errors.invalid-user": "Érvénytelen e-mail cím, vagy jelszó.", + // "auth.messages.expired": "Your session has expired. Please log in again.", "auth.messages.expired": "Az idő lejárt. Kérjük, lépjen be újra.", - - - + + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + // TODO New key - Add a translation + "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + + + + // "bitstream.download.page": "Now downloading {{bitstream}}..." , + // TODO New key - Add a translation + "bitstream.download.page": "Now downloading {{bitstream}}..." , + + // "bitstream.download.page.back": "Back" , + // TODO New key - Add a translation + "bitstream.download.page.back": "Back" , + + + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + // TODO New key - Add a translation + "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + // TODO New key - Add a translation + "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + + // "bitstream.edit.return": "Back", + // TODO New key - Add a translation + "bitstream.edit.return": "Back", + // "bitstream.edit.bitstream": "Bitstream: ", "bitstream.edit.bitstream": "Bitfolyam: ", - + // "bitstream.edit.form.description.hint": "Optionally, provide a brief description of the file, for example \"Main article\" or \"Experiment data readings\".", "bitstream.edit.form.description.hint": "Választhatóan megadhatja az állomány rövid leírását, például \"Fő cikk\" vagy \"Kísérleti adatok\".", - + // "bitstream.edit.form.description.label": "Description", "bitstream.edit.form.description.label": "Leírás", - + // "bitstream.edit.form.embargo.hint": "The first day from which access is allowed. This date cannot be modified on this form. To set an embargo date for a bitstream, go to the Item Status tab, click Authorizations..., create or edit the bitstream's READ policy, and set the Start Date as desired.", "bitstream.edit.form.embargo.hint": "Ettől a naptól engedélyezett a hozzáférés. Ez a dátum ebben a formában nem módosítható. Ha a bitfolyamhoz embargó dátumot óhajt beállítani, akkor ide: Tárgy Státus fül, kattintson: Engedélyezés..., hozza létre, vagy szerkessze a bitfolyam OLVASÁS engedélyezését és állítsa be a Kezdő Dátum kívánsága szerint.", - + // "bitstream.edit.form.embargo.label": "Embargo until specific date", "bitstream.edit.form.embargo.label": "Embargo egy megadott dátumig", - + // "bitstream.edit.form.fileName.hint": "Change the filename for the bitstream. Note that this will change the display bitstream URL, but old links will still resolve as long as the sequence ID does not change.", "bitstream.edit.form.fileName.hint": "Változtassa meg a bitfolyam állomány nevét. Ez megváltoztatja a bitfolyam URL-t is, de a régi linkek meg mindig működni fognak, hacsak a szakasz azonosító meg nem változik.", - + // "bitstream.edit.form.fileName.label": "Filename", "bitstream.edit.form.fileName.label": "Állománynév", - + // "bitstream.edit.form.newFormat.label": "Describe new format", "bitstream.edit.form.newFormat.label": "Új formátum leírása", - + // "bitstream.edit.form.newFormat.hint": "The application you used to create the file, and the version number (for example, \"ACMESoft SuperApp version 1.5\").", "bitstream.edit.form.newFormat.hint": "A program, amellyel az állományt létrehozta és a verzió száma (például, \"ACMESoft SuperApp version 1.5\").", - + // "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", "bitstream.edit.form.primaryBitstream.label": "Elsődleges bitfolyam", - + // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", "bitstream.edit.form.selectedFormat.hint": "Amennyiben a formátum nem található a fentebbi listán, válassza \"formátum nincs a listán\" feljebb majd írja le \"Új formátum leírása\".", - + // "bitstream.edit.form.selectedFormat.label": "Selected Format", "bitstream.edit.form.selectedFormat.label": "Kiválasztott formátum", - + // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", "bitstream.edit.form.selectedFormat.unknown": "Formátum nincs a listán", - + // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", "bitstream.edit.notifications.error.format.title": "Bitfolyam formátum mentése közben hiba történt", - + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + // TODO New key - Add a translation + "bitstream.edit.form.iiifLabel.label": "IIIF Label", + + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + // TODO New key - Add a translation + "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + // TODO New key - Add a translation + "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + // TODO New key - Add a translation + "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + // TODO New key - Add a translation + "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", "bitstream.edit.notifications.saved.content": "A bitfolyamban eszközölt változtatások elmentve.", - + // "bitstream.edit.notifications.saved.title": "Bitstream saved", "bitstream.edit.notifications.saved.title": "Bitfolyam elmentve", - + // "bitstream.edit.title": "Edit bitstream", "bitstream.edit.title": "Bitfolyam szerkesztése", - - - + + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + // TODO New key - Add a translation + "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + + // "bitstream-request-a-copy.alert.canDownload2": "here", + // TODO New key - Add a translation + "bitstream-request-a-copy.alert.canDownload2": "here", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + // TODO New key - Add a translation + "bitstream-request-a-copy.header": "Request a copy of the file", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + // TODO New key - Add a translation + "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + // TODO New key - Add a translation + "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + // TODO New key - Add a translation + "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + + // "bitstream-request-a-copy.name.label": "Name *", + // TODO New key - Add a translation + "bitstream-request-a-copy.name.label": "Name *", + + // "bitstream-request-a-copy.name.error": "The name is required", + // TODO New key - Add a translation + "bitstream-request-a-copy.name.error": "The name is required", + + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + // TODO New key - Add a translation + "bitstream-request-a-copy.email.label": "Your e-mail address *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + // TODO New key - Add a translation + "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + // TODO New key - Add a translation + "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + + // "bitstream-request-a-copy.allfiles.label": "Files", + // TODO New key - Add a translation + "bitstream-request-a-copy.allfiles.label": "Files", + + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + // TODO New key - Add a translation + "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + // TODO New key - Add a translation + "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + + // "bitstream-request-a-copy.message.label": "Message", + // TODO New key - Add a translation + "bitstream-request-a-copy.message.label": "Message", + + // "bitstream-request-a-copy.return": "Back", + // TODO New key - Add a translation + "bitstream-request-a-copy.return": "Back", + + // "bitstream-request-a-copy.submit": "Request copy", + // TODO New key - Add a translation + "bitstream-request-a-copy.submit": "Request copy", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + // TODO New key - Add a translation + "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + // TODO New key - Add a translation + "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + + + + // "browse.back.all-results": "All browse results", + // TODO New key - Add a translation + "browse.back.all-results": "All browse results", + // "browse.comcol.by.author": "By Author", "browse.comcol.by.author": "Szerző szerint", - + // "browse.comcol.by.dateissued": "By Issue Date", "browse.comcol.by.dateissued": "Megjelenés dátuma szerint", - + // "browse.comcol.by.subject": "By Subject", - "browse.comcol.by.subject": "Tárgy szerint", - + "browse.comcol.by.subject": "Tárgyszó szerint", + // "browse.comcol.by.title": "By Title", "browse.comcol.by.title": "Cím szerint", - + // "browse.comcol.head": "Browse", "browse.comcol.head": "Böngészés", - + // "browse.empty": "No items to show.", "browse.empty": "Nincs elérhető tárgy.", - + // "browse.metadata.author": "Author", "browse.metadata.author": "Szerző", - + // "browse.metadata.dateissued": "Issue Date", "browse.metadata.dateissued": "Megjelenés dátuma", - + // "browse.metadata.subject": "Subject", "browse.metadata.subject": "Tárgy", - + // "browse.metadata.title": "Title", "browse.metadata.title": "Cím", - + // "browse.metadata.author.breadcrumbs": "Browse by Author", "browse.metadata.author.breadcrumbs": "Böngészés szerző szerint", - + // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", "browse.metadata.dateissued.breadcrumbs": "Böngészés dátum szerint", - + // "browse.metadata.subject.breadcrumbs": "Browse by Subject", - "browse.metadata.subject.breadcrumbs": "Böngészés tárgy szerint", - + "browse.metadata.subject.breadcrumbs": "Böngészés tárgyszó szerint", + // "browse.metadata.title.breadcrumbs": "Browse by Title", "browse.metadata.title.breadcrumbs": "Böngészés cím szerint", - + + // "pagination.next.button": "Next", + "pagination.next.button": "Következő", + + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Előző", + + // "pagination.next.button.disabled.tooltip": "No more pages of results", + // TODO New key - Add a translation + "pagination.next.button.disabled.tooltip": "No more pages of results", + + // "browse.startsWith": ", starting with {{ startsWith }}", + // TODO New key - Add a translation + "browse.startsWith": ", starting with {{ startsWith }}", + // "browse.startsWith.choose_start": "(Choose start)", "browse.startsWith.choose_start": "(Válassza a kezdést)", - + // "browse.startsWith.choose_year": "(Choose year)", "browse.startsWith.choose_year": "(Válassza az évet)", - - // "browse.startsWith.jump": "Jump to a point in the index:", - "browse.startsWith.jump": "Ugrás a tartalom egy pontjához:", - + + // "browse.startsWith.choose_year.label": "Choose the issue year", + // TODO New key - Add a translation + "browse.startsWith.choose_year.label": "Choose the issue year", + + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Eremények szűrése év vagy hónap szerint", + // "browse.startsWith.months.april": "April", "browse.startsWith.months.april": "Április", - + // "browse.startsWith.months.august": "August", "browse.startsWith.months.august": "Augusztus", - + // "browse.startsWith.months.december": "December", "browse.startsWith.months.december": "December", - + // "browse.startsWith.months.february": "February", "browse.startsWith.months.february": "Február", - + // "browse.startsWith.months.january": "January", "browse.startsWith.months.january": "Január", - + // "browse.startsWith.months.july": "July", "browse.startsWith.months.july": "Július", - + // "browse.startsWith.months.june": "June", "browse.startsWith.months.june": "Június", - + // "browse.startsWith.months.march": "March", "browse.startsWith.months.march": "Március", - + // "browse.startsWith.months.may": "May", "browse.startsWith.months.may": "Május", - + // "browse.startsWith.months.none": "(Choose month)", "browse.startsWith.months.none": "(Válasszon hónapot)", - + + // "browse.startsWith.months.none.label": "Choose the issue month", + // TODO New key - Add a translation + "browse.startsWith.months.none.label": "Choose the issue month", + // "browse.startsWith.months.november": "November", "browse.startsWith.months.november": "November", - + // "browse.startsWith.months.october": "October", "browse.startsWith.months.october": "Október", - + // "browse.startsWith.months.september": "September", "browse.startsWith.months.september": "Szeptember", - - // "browse.startsWith.submit": "Go", - "browse.startsWith.submit": "Indít", - - // "browse.startsWith.type_date": "Or type in a date (year-month):", - "browse.startsWith.type_date": "Vagy írjon be egy dátumot (év-hónap):", - - // "browse.startsWith.type_text": "Or enter first few letters:", - "browse.startsWith.type_text": "Vagy írja be az első betűket:", - - // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", - "browse.title": "Böngészés {{ collection }} szerint {{ field }} {{ value }}", - - + + // "browse.startsWith.submit": "Browse", + "browse.startsWith.submit": "Böngészés", + + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Eredmények szűrése dátum szerint", + + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + // TODO New key - Add a translation + "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Eredmények szűrése az első pár betű alapján", + + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "{{ collection }} böngészése, {{ field }} {{ value }} szerint", + + // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "{{ collection }} böngészése, {{ field }} {{ value }} szerint", + + + // "search.browse.item-back": "Back to Results", + // TODO New key - Add a translation + "search.browse.item-back": "Back to Results", + + // "chips.remove": "Remove chip", - "chips.remove": "Vegye ki a chipet", - - - + "chips.remove": "Chip eltávolítása", + + + // "claimed-approved-search-result-list-element.title": "Approved", + // TODO New key - Add a translation + "claimed-approved-search-result-list-element.title": "Approved", + + // "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + // TODO New key - Add a translation + "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + + // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + // TODO New key - Add a translation + "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + + // "collection.create.head": "Create a Collection", "collection.create.head": "Hozzon létre egy gyűjteményt", - + // "collection.create.notifications.success": "Successfully created the Collection", "collection.create.notifications.success": "Guűjtemény sikeresen létrehozva", - + // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", "collection.create.sub-head": "Hozzon létre gyűjteményt a közösség számára {{ parent }}", - + // "collection.curate.header": "Curate Collection: {{collection}}", "collection.curate.header": "Gyűjtemény gondozója: {{collection}}", - + // "collection.delete.cancel": "Cancel", "collection.delete.cancel": "Mégse", - + // "collection.delete.confirm": "Confirm", "collection.delete.confirm": "Mehet", - + + // "collection.delete.processing": "Deleting", + // TODO New key - Add a translation + "collection.delete.processing": "Deleting", + // "collection.delete.head": "Delete Collection", "collection.delete.head": "Gyűjtemény törlése", - + // "collection.delete.notification.fail": "Collection could not be deleted", "collection.delete.notification.fail": "Gyűjteményt nem sikerült törölni", - + // "collection.delete.notification.success": "Successfully deleted collection", "collection.delete.notification.success": "Gyűjtemény törölve", - + // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", "collection.delete.text": "Biztos benne, hogy törölni szeretné a gyűjteményt \"{{ dso }}\"", - - - + + + // "collection.edit.delete": "Delete this collection", "collection.edit.delete": "Törölje ezt a gyűjteményt", - + // "collection.edit.head": "Edit Collection", "collection.edit.head": "Gyűjtemény szerkesztése", - + // "collection.edit.breadcrumbs": "Edit Collection", "collection.edit.breadcrumbs": "Gyűjtemény szerkesztése", - - - + + + // "collection.edit.tabs.mapper.head": "Item Mapper", // TODO New key - Add a translation "collection.edit.tabs.mapper.head": "Item Mapper", - + // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", // TODO New key - Add a translation "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", - + // "collection.edit.item-mapper.cancel": "Cancel", "collection.edit.item-mapper.cancel": "Mégse", - + // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", "collection.edit.item-mapper.collection": "Gyűjtemény: \"{{name}}\"", - + // "collection.edit.item-mapper.confirm": "Map selected items", "collection.edit.item-mapper.confirm": "Térképezze a kiválasztott tárgyakat", - + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", "collection.edit.item-mapper.description": "Ez a tárgytérképező eszköz, amellyel a gyűjtemények kezelői térképezhetnek más gyűjteményekből tárgyakat. Kereshet más gyűjteményekből tárgyakat és térképezheti azokat, vagy böngészheti a jelenleg térképezett tárgyakat.", - + // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", "collection.edit.item-mapper.head": "Tárgytérképező - Térképezzen más gyűjteményekből tárgyakat", - + // "collection.edit.item-mapper.no-search": "Please enter a query to search", "collection.edit.item-mapper.no-search": "Írja be a keresőszót", - + // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", "collection.edit.item-mapper.notifications.map.error.content": "A {{amount}} tárgyak térképezésekor hiba történt.", - + // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", "collection.edit.item-mapper.notifications.map.error.head": "Térképezési hibák", - + // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", "collection.edit.item-mapper.notifications.map.success.content": "A {{amount}} tárgyak térképezése sikerült.", - + // "collection.edit.item-mapper.notifications.map.success.head": "Mapping completed", "collection.edit.item-mapper.notifications.map.success.head": "Térképezés befejezve", - + // "collection.edit.item-mapper.notifications.unmap.error.content": "Errors occurred for removing the mappings of {{amount}} items.", "collection.edit.item-mapper.notifications.unmap.error.content": "A {{amount}} tárgyak térképezésének törlésekor hiba történt.", - + // "collection.edit.item-mapper.notifications.unmap.error.head": "Remove mapping errors", "collection.edit.item-mapper.notifications.unmap.error.head": "Térképezési hibák törlése", - + // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", "collection.edit.item-mapper.notifications.unmap.success.content": "A {{amount}} tárgyak térképezése sikeresen törölve.", - + // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", "collection.edit.item-mapper.notifications.unmap.success.head": "Térképezés törlése befejeződött", - + // "collection.edit.item-mapper.remove": "Remove selected item mappings", "collection.edit.item-mapper.remove": "Kiválasztott térgyak térképezésének törlése", - + + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + // TODO New key - Add a translation + "collection.edit.item-mapper.search-form.placeholder": "Search items...", + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", "collection.edit.item-mapper.tabs.browse": "Térképezett tárgyak böngészése", - + // "collection.edit.item-mapper.tabs.map": "Map new items", "collection.edit.item-mapper.tabs.map": "Új tárgyak térképezése", - - - + + + // "collection.edit.logo.delete.title": "Delete logo", + // TODO New key - Add a translation + "collection.edit.logo.delete.title": "Delete logo", + + // "collection.edit.logo.delete-undo.title": "Undo delete", + // TODO New key - Add a translation + "collection.edit.logo.delete-undo.title": "Undo delete", + // "collection.edit.logo.label": "Collection logo", "collection.edit.logo.label": "Gyűjtemény logo", - + // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", "collection.edit.logo.notifications.add.error": "Gyűjtemény logo feltöltése nem sikerült. Kérjük, ellenőrizze a tartalmat, mielőtt újra próbálkozna.", - + // "collection.edit.logo.notifications.add.success": "Upload Collection logo successful.", "collection.edit.logo.notifications.add.success": "Gyűjtemény logo feltöltése sikerült.", - + // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", "collection.edit.logo.notifications.delete.success.title": "Logo törölve", - + // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", "collection.edit.logo.notifications.delete.success.content": "Gyűjteménylogo sikeresen törölve", - + // "collection.edit.logo.notifications.delete.error.title": "Error deleting logo", "collection.edit.logo.notifications.delete.error.title": "Logo törlése közben hiba történt", - + // "collection.edit.logo.upload": "Drop a Collection Logo to upload", "collection.edit.logo.upload": "Feltöltéshez húzza ide a gyűjtemény Logót", - - - + + + // "collection.edit.notifications.success": "Successfully edited the Collection", "collection.edit.notifications.success": "Gyűjtemény szerkesztése sikerült", - - // "collection.edit.return": "Return", + + // "collection.edit.return": "Back", "collection.edit.return": "Vissza", - - - + + + // "collection.edit.tabs.curate.head": "Curate", "collection.edit.tabs.curate.head": "Gondozás", - + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", "collection.edit.tabs.curate.title": "Gyűjtemény szerkesztés - gondozás", - + // "collection.edit.tabs.authorizations.head": "Authorizations", // TODO New key - Add a translation "collection.edit.tabs.authorizations.head": "Authorizations", - + // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", // TODO New key - Add a translation "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", - + + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "További csomagok betöltése", + + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Továbbiak betöltése", + + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + // TODO New key - Add a translation + "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + // "collection.edit.tabs.metadata.head": "Edit Metadata", "collection.edit.tabs.metadata.head": "Metaadat szerkesztés", - + // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", "collection.edit.tabs.metadata.title": "Gyűjtemény szerkesztés - Metaadat", - + // "collection.edit.tabs.roles.head": "Assign Roles", "collection.edit.tabs.roles.head": "Jogok hozzárendelése", - + // "collection.edit.tabs.roles.title": "Collection Edit - Roles", "collection.edit.tabs.roles.title": "Gyűjtemény szerkesztése - Jogok", - + // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", "collection.edit.tabs.source.external": "Ez a gyűjtemény külső forrásból gyűjti be tartalmát", - + // "collection.edit.tabs.source.form.errors.oaiSource.required": "You must provide a set id of the target collection.", "collection.edit.tabs.source.form.errors.oaiSource.required": "Beállított azonosítót kell megadnia a célgyűjteményhez.", - + // "collection.edit.tabs.source.form.harvestType": "Content being harvested", "collection.edit.tabs.source.form.harvestType": "Tartalom begyűjtése folyamatban", - + // "collection.edit.tabs.source.form.head": "Configure an external source", "collection.edit.tabs.source.form.head": "Külső forrás beállítása", - + // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", "collection.edit.tabs.source.form.metadataConfigId": "Metaadat formátum", - + // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", "collection.edit.tabs.source.form.oaiSetId": "OAI sajátos beállított azonosító", - + // "collection.edit.tabs.source.form.oaiSource": "OAI Provider", "collection.edit.tabs.source.form.oaiSource": "OAI szolgáltató", - + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Harvest metadata and bitstreams (requires ORE support)", "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Metaadat és bitfolyam begyűjtése (ORE támogatás szükséges)", - + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Harvest metadata and references to bitstreams (requires ORE support)", "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "metaadatok és referenciák begyűjtése bitfolyamhoz (ORE támogatás szükséges)", - + // "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Harvest metadata only", "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Csupán metaadatok begyűjtése", - + // "collection.edit.tabs.source.head": "Content Source", "collection.edit.tabs.source.head": "Tartalom forrása", - + // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "collection.edit.tabs.source.notifications.discarded.content": "Változtatások elvetve. Visszaállításukhoz kattintson a 'Visszaállítás' gombra", - - // "collection.edit.tabs.source.notifications.discarded.title": "Changed discarded", - "collection.edit.tabs.source.notifications.discarded.title": "Változtatások elvetve", - + + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", + "collection.edit.tabs.source.notifications.discarded.title": "Változások elvetve", + // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", "collection.edit.tabs.source.notifications.invalid.content": "Változtatások nincsenek mentve. Kérjük, ellenőrizze, hogy valamennyi mező érvényes, mielőtt mentene.", - + // "collection.edit.tabs.source.notifications.invalid.title": "Metadata invalid", "collection.edit.tabs.source.notifications.invalid.title": "Metaadat érvénytelen", - + // "collection.edit.tabs.source.notifications.saved.content": "Your changes to this collection's content source were saved.", "collection.edit.tabs.source.notifications.saved.content": "A gyűjtemény tartalmának forrásával kapcsolatos változtatásai elmentve.", - + // "collection.edit.tabs.source.notifications.saved.title": "Content Source saved", "collection.edit.tabs.source.notifications.saved.title": "Tartalom forrása elmentve", - + // "collection.edit.tabs.source.title": "Collection Edit - Content Source", "collection.edit.tabs.source.title": "Gyűjtemény szerkesztés - tartalom forrása", - - - + + + // "collection.edit.template.add-button": "Add", "collection.edit.template.add-button": "Hozzáad", - + // "collection.edit.template.breadcrumbs": "Item template", "collection.edit.template.breadcrumbs": "Elemsablon", - + // "collection.edit.template.cancel": "Cancel", "collection.edit.template.cancel": "Mégsem", - + // "collection.edit.template.delete-button": "Delete", "collection.edit.template.delete-button": "Töröl", - + // "collection.edit.template.edit-button": "Edit", "collection.edit.template.edit-button": "Szerkeszt", - + + // "collection.edit.template.error": "An error occurred retrieving the template item", + // TODO New key - Add a translation + "collection.edit.template.error": "An error occurred retrieving the template item", + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", "collection.edit.template.head": "Gyűjtemény elemsablon szerkesztése: \"{{ collection }}\"", - + // "collection.edit.template.label": "Template item", "collection.edit.template.label": "Elemsablon", - + + // "collection.edit.template.loading": "Loading template item...", + // TODO New key - Add a translation + "collection.edit.template.loading": "Loading template item...", + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", "collection.edit.template.notifications.delete.error": "Nem sikerült törölni az elemsablont", - + // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", "collection.edit.template.notifications.delete.success": "Sikeresen töröltük az elemsablont", - + // "collection.edit.template.title": "Edit Template Item", "collection.edit.template.title": "Elemsablon szerkesztése", - - - + + + // "collection.form.abstract": "Short Description", "collection.form.abstract": "Rövid leírás", - + // "collection.form.description": "Introductory text (HTML)", "collection.form.description": "Bevezető szöveg (HTML)", - + // "collection.form.errors.title.required": "Please enter a collection name", "collection.form.errors.title.required": "Adja meg a gyűjtemény nevét", - + // "collection.form.license": "License", "collection.form.license": "Engedély", - + // "collection.form.provenance": "Provenance", "collection.form.provenance": "Eredet", - + // "collection.form.rights": "Copyright text (HTML)", "collection.form.rights": "Szerzői jog szövege (HTML)", - + // "collection.form.tableofcontents": "News (HTML)", "collection.form.tableofcontents": "Hírek (HTML)", - + // "collection.form.title": "Name", "collection.form.title": "Név", - - - + + // "collection.form.entityType": "Entity Type", + // TODO New key - Add a translation + "collection.form.entityType": "Entity Type", + + + // "collection.listelement.badge": "Collection", "collection.listelement.badge": "Gyűjtemény", - - - + + + // "collection.page.browse.recent.head": "Recent Submissions", "collection.page.browse.recent.head": "Friss feltöltések", - + // "collection.page.browse.recent.empty": "No items to show", "collection.page.browse.recent.empty": "Nincs tárgy", - + // "collection.page.edit": "Edit this collection", "collection.page.edit": "Gyűjtemény szerkesztése", - + // "collection.page.handle": "Permanent URI for this collection", "collection.page.handle": "Állandó URI ehhez a gyűjteményhez", - + // "collection.page.license": "License", "collection.page.license": "Engedély", - + // "collection.page.news": "News", "collection.page.news": "Hírek", - - - + + + // "collection.select.confirm": "Confirm selected", "collection.select.confirm": "Kiválasztás igazolása", - + // "collection.select.empty": "No collections to show", "collection.select.empty": "Nincs gyűjtemény", - + // "collection.select.table.title": "Title", "collection.select.table.title": "Cím", - - - + + + // "collection.source.controls.head": "Harvest Controls", + // TODO New key - Add a translation + "collection.source.controls.head": "Harvest Controls", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + // TODO New key - Add a translation + "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + // "collection.source.controls.test.failed": "The script to test the settings has failed", + // TODO New key - Add a translation + "collection.source.controls.test.failed": "The script to test the settings has failed", + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + // TODO New key - Add a translation + "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + // "collection.source.controls.test.submit": "Test configuration", + // TODO New key - Add a translation + "collection.source.controls.test.submit": "Test configuration", + // "collection.source.controls.test.running": "Testing configuration...", + // TODO New key - Add a translation + "collection.source.controls.test.running": "Testing configuration...", + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + // TODO New key - Add a translation + "collection.source.controls.import.submit.success": "The import has been successfully initiated", + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + // TODO New key - Add a translation + "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + // "collection.source.controls.import.submit": "Import now", + // TODO New key - Add a translation + "collection.source.controls.import.submit": "Import now", + // "collection.source.controls.import.running": "Importing...", + // TODO New key - Add a translation + "collection.source.controls.import.running": "Importing...", + // "collection.source.controls.import.failed": "An error occurred during the import", + // TODO New key - Add a translation + "collection.source.controls.import.failed": "An error occurred during the import", + // "collection.source.controls.import.completed": "The import completed", + // TODO New key - Add a translation + "collection.source.controls.import.completed": "The import completed", + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + // TODO New key - Add a translation + "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + // TODO New key - Add a translation + "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + // TODO New key - Add a translation + "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + // "collection.source.controls.reset.completed": "The reset and reimport completed", + // TODO New key - Add a translation + "collection.source.controls.reset.completed": "The reset and reimport completed", + // "collection.source.controls.reset.submit": "Reset and reimport", + // TODO New key - Add a translation + "collection.source.controls.reset.submit": "Reset and reimport", + // "collection.source.controls.reset.running": "Resetting and reimporting...", + // TODO New key - Add a translation + "collection.source.controls.reset.running": "Resetting and reimporting...", + // "collection.source.controls.harvest.status": "Harvest status:", + // TODO New key - Add a translation + "collection.source.controls.harvest.status": "Harvest status:", + // "collection.source.controls.harvest.start": "Harvest start time:", + // TODO New key - Add a translation + "collection.source.controls.harvest.start": "Harvest start time:", + // "collection.source.controls.harvest.last": "Last time harvested:", + // TODO New key - Add a translation + "collection.source.controls.harvest.last": "Last time harvested:", + // "collection.source.controls.harvest.message": "Harvest info:", + // TODO New key - Add a translation + "collection.source.controls.harvest.message": "Harvest info:", + // "collection.source.controls.harvest.no-information": "N/A", + // TODO New key - Add a translation + "collection.source.controls.harvest.no-information": "N/A", + + // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", "collection.source.update.notifications.error.content": "A megadott beállításokat ellenőriztük és nem működnek.", - + // "collection.source.update.notifications.error.title": "Server Error", "collection.source.update.notifications.error.title": "Szerverhiba", - - - - // "communityList.tabTitle": "DSpace - Community List", + + + + // "communityList.breadcrumbs": "Community List", + // TODO New key - Add a translation + "communityList.breadcrumbs": "Community List", + + // "communityList.tabTitle": "Community List", "communityList.tabTitle": "DSpace - Közösség lista", - + // "communityList.title": "List of Communities", - "communityList.title": "Közösségek listája", - + "communityList.title": "Kategóriák listája", + // "communityList.showMore": "Show More", - "communityList.showMore": "Mutasson többet", - - - + "communityList.showMore": "Tovább", + + + // "community.create.head": "Create a Community", "community.create.head": "Hozzon létre egy közösséget", - + // "community.create.notifications.success": "Successfully created the Community", "community.create.notifications.success": "Közösség sikeresen létrehozva", - + // "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}", "community.create.sub-head": "Hozzon létre egy alközösséget a közösségben {{ parent }}", - + // "community.curate.header": "Curate Community: {{community}}", "community.curate.header": "Közösség gondozása: {{community}}", - + // "community.delete.cancel": "Cancel", "community.delete.cancel": "Mégse", - + // "community.delete.confirm": "Confirm", "community.delete.confirm": "Igazolja", - + + // "community.delete.processing": "Deleting...", + // TODO New key - Add a translation + "community.delete.processing": "Deleting...", + // "community.delete.head": "Delete Community", "community.delete.head": "Közösség törlése", - + // "community.delete.notification.fail": "Community could not be deleted", "community.delete.notification.fail": "Közösség törlése nem sikerült", - + // "community.delete.notification.success": "Successfully deleted community", "community.delete.notification.success": "SKözösség sikeresen törölve", - + // "community.delete.text": "Are you sure you want to delete community \"{{ dso }}\"", "community.delete.text": "Biztos benne, hogy törölni szeretné a közösséget \"{{ dso }}\"", - + // "community.edit.delete": "Delete this community", "community.edit.delete": "Törölje ezt a közösséget", - + // "community.edit.head": "Edit Community", "community.edit.head": "Közösség szerkesztése", - + // "community.edit.breadcrumbs": "Edit Community", "community.edit.breadcrumbs": "Közösség szerkesztése", - - + + + // "community.edit.logo.delete.title": "Delete logo", + // TODO New key - Add a translation + "community.edit.logo.delete.title": "Delete logo", + + // "community.edit.logo.delete-undo.title": "Undo delete", + // TODO New key - Add a translation + "community.edit.logo.delete-undo.title": "Undo delete", + // "community.edit.logo.label": "Community logo", "community.edit.logo.label": "Közösségi logo", - + // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", "community.edit.logo.notifications.add.error": "Közösségi logo feltöltése nem sikerült Kérjük, ellenőrizze a tartalmat, mielőtt újra próbálkozna.", - + // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", "community.edit.logo.notifications.add.success": "Közösségi logo feltöltve.", - + // "community.edit.logo.notifications.delete.success.title": "Logo deleted", "community.edit.logo.notifications.delete.success.title": "Logo törölve", - + // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", "community.edit.logo.notifications.delete.success.content": "A közösség logóját sikeresen törölte", - + // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", "community.edit.logo.notifications.delete.error.title": "Logo törlése közben hiba történt", - + // "community.edit.logo.upload": "Drop a Community Logo to upload", "community.edit.logo.upload": "Feltöltéshez húzza ide a közösségi logót", - - - + + + // "community.edit.notifications.success": "Successfully edited the Community", "community.edit.notifications.success": "Közösség szerkesztése sikerült", - + // "community.edit.notifications.unauthorized": "You do not have privileges to make this change", "community.edit.notifications.unauthorized": "Nincs meg a szükséges jogosultsága a változtatáshoz", - + // "community.edit.notifications.error": "An error occured while editing the Community", "community.edit.notifications.error": "Hiba történt a közösség szerkesztésekor", - - // "community.edit.return": "Return", + + // "community.edit.return": "Back", "community.edit.return": "Vissza", - - - + + + // "community.edit.tabs.curate.head": "Curate", "community.edit.tabs.curate.head": "Gondozás", - + // "community.edit.tabs.curate.title": "Community Edit - Curate", "community.edit.tabs.curate.title": "Közösség szerkesztés - Gondozás", - + // "community.edit.tabs.metadata.head": "Edit Metadata", "community.edit.tabs.metadata.head": "Metaadat szerkesztés", - + // "community.edit.tabs.metadata.title": "Community Edit - Metadata", "community.edit.tabs.metadata.title": "Közösség szerkesztése - Metaadat", - + // "community.edit.tabs.roles.head": "Assign Roles", "community.edit.tabs.roles.head": "Feladatok kijelölése", - + // "community.edit.tabs.roles.title": "Community Edit - Roles", "community.edit.tabs.roles.title": "Közösség szerkesztése - Feladatok", - + // "community.edit.tabs.authorizations.head": "Authorizations", "community.edit.tabs.authorizations.head": "Jogosultásgok", - + // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", "community.edit.tabs.authorizations.title": "Közösségi szerkesztés - Jogosultásgok", - - - + + + // "community.listelement.badge": "Community", "community.listelement.badge": "Közösség", - - - + + + // "comcol-role.edit.no-group": "None", - "comcol-role.edit.no-group": "Egyik sem", - + "comcol-role.edit.no-group": "Semmi", + // "comcol-role.edit.create": "Create", - "comcol-role.edit.create": "Hozzon létre", - + "comcol-role.edit.create": "Létrehoz", + + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + // TODO New key - Add a translation + "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + // "comcol-role.edit.restrict": "Restrict", - "comcol-role.edit.restrict": "Korlátozzon", - + "comcol-role.edit.restrict": "Korlátoz", + // "comcol-role.edit.delete": "Delete", - "comcol-role.edit.delete": "Törölje", - - + "comcol-role.edit.delete": "Töröl", + + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + // TODO New key - Add a translation + "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + + // "comcol-role.edit.community-admin.name": "Administrators", "comcol-role.edit.community-admin.name": "Adminisztrátorok", - + // "comcol-role.edit.collection-admin.name": "Administrators", "comcol-role.edit.collection-admin.name": "Adminisztrátorok", - - + + // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.community-admin.description": "A közösségek adminisztrátorai létrehozhatnak alközösségeket vagy gyűjteményeket, irányíthatják azokat, vagy kijelölhetik azok irányítását. Továbbá ők döntik el ki tölthet fel tárgyakat bármely algyűjteménybe, ki szerkesztheti a tárgyak metaadatait (feltöltést követően) és ki adhat hozzá (térképezhet) létező tárgyakat más gyűjteményekből (felhatalmazás szükséges).", - + "comcol-role.edit.community-admin.description": "A közösségek adminisztrátorai létrehozhatnak alkategóriákat vagy gyűjteményeket, irányíthatják azokat, vagy kijelölhetik azok irányítását. Továbbá ők döntik el ki tölthet fel tárgyakat bármely algyűjteménybe, ki szerkesztheti a tárgyak metaadatait (feltöltést követően) és ki adhat hozzá (térképezhet) létező tárgyakat más gyűjteményekből (felhatalmazás szükséges).", + // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", "comcol-role.edit.collection-admin.description": "A közösségek adminisztrátorai öntik el ki tölthet fel tárgyakat bármely algyűjteménybe, ki szerkesztheti a tárgyak metaadatait (feltöltést követően) és ki adhat hozzá (térképezhet) létező tárgyakat más gyűjteményekből (felhatalmazás szükséges).", - - + + // "comcol-role.edit.submitters.name": "Submitters", "comcol-role.edit.submitters.name": "Feltöltők", - + // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", "comcol-role.edit.submitters.description": "E-People és csoportok akik feltölthetnek új tárgyakat ebbe a gyűjteménybe.", - - + + // "comcol-role.edit.item_read.name": "Default item read access", "comcol-role.edit.item_read.name": "Alapbeállított tárgy olvasási hozzáférés", - + // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", "comcol-role.edit.item_read.description": "Azon E-People és csoportok, amelyek olvashatják az ebbe a gyűjteménybe feltöltött tárgyakat. Az ebben a tekintetben végrehajtott változtatások nem visszamenő érvényűek. A meglévő tárgyak olvashatók maradnak mindazok számára, akik a feltöltés idején rendelkeztek ezzel a hozzáféréssel.", - + // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", "comcol-role.edit.item_read.anonymous-group": "Beérkező tárgyak olvasási alapbeállítása jelenleg Névtelen.", - - + + // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", "comcol-role.edit.bitstream_read.name": "Bitfolyam olvasási hozzáférés alapbeállítás", - + // "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", - "comcol-role.edit.bitstream_read.description": "A közösségek adminisztrátorai létrehozhatnak alközösségeket vagy gyűjteményeket, irányíthatják azokat, vagy kijelölhetik azok irányítását. Továbbá ők döntik el ki tölthet fel tárgyakat bármely algyűjteménybe, ki szerkesztheti a tárgyak metaadatait (feltöltést követően) és ki adhat hozzá (térképezhet) létező tárgyakat más gyűjteményekből (felhatalmazás szükséges).", - + "comcol-role.edit.bitstream_read.description": "A közösségek adminisztrátorai létrehozhatnak alkategóriákat vagy gyűjteményeket, irányíthatják azokat, vagy kijelölhetik azok irányítását. Továbbá ők döntik el ki tölthet fel tárgyakat bármely algyűjteménybe, ki szerkesztheti a tárgyak metaadatait (feltöltést követően) és ki adhat hozzá (térképezhet) létező tárgyakat más gyűjteményekből (felhatalmazás szükséges).", + // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", "comcol-role.edit.bitstream_read.anonymous-group": "Beérkező bitfolyamok olvasási alapbeállítása jelenleg Névtelen.", - - + + // "comcol-role.edit.editor.name": "Editors", "comcol-role.edit.editor.name": "Szerkesztők", - + // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", "comcol-role.edit.editor.description": "Szerkesztők szerkeszthetik a beérkező feltöltések metaadatait és elfogadhatják, vagy elutasíthatják azokat.", - - + + // "comcol-role.edit.finaleditor.name": "Final editors", "comcol-role.edit.finaleditor.name": "Végső szerkesztők", - + // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", "comcol-role.edit.finaleditor.description": "Végső szerkesztők szerkeszthetik a beérkező feltöltések metaadatait de nem utasíthatják el azokat.", - - + + // "comcol-role.edit.reviewer.name": "Reviewers", "comcol-role.edit.reviewer.name": "Lektorálók", - + // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", "comcol-role.edit.reviewer.description": "A lektorálók elfogadhatják, vagy elutasíthatják a beérkező feltöltéseket, de nem szerkeszthetik azok metaadatait.", - - - + + + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", + // TODO New key - Add a translation + "comcol-role.edit.scorereviewers.name": "Score Reviewers", + + // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + // TODO New key - Add a translation + "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + + + // "community.form.abstract": "Short Description", "community.form.abstract": "Rövid leírás", - + // "community.form.description": "Introductory text (HTML)", "community.form.description": "Bevezető szöveg (HTML)", - + // "community.form.errors.title.required": "Please enter a community name", "community.form.errors.title.required": "Kérjük adjon meg egy közösség nevet", - + // "community.form.rights": "Copyright text (HTML)", "community.form.rights": "Szerzői jog szövege (HTML)", - + // "community.form.tableofcontents": "News (HTML)", "community.form.tableofcontents": "Hírek (HTML)", - + // "community.form.title": "Name", "community.form.title": "Név", - + // "community.page.edit": "Edit this community", "community.page.edit": "Közösség szerkesztése", - + // "community.page.handle": "Permanent URI for this community", - "community.page.handle": "Állandó URI ehhez a közösséghez", - + "community.page.handle": "Állandó link (URI) ehhez a kategóriához", + // "community.page.license": "License", "community.page.license": "Engedély", - + // "community.page.news": "News", "community.page.news": "Hírek", - + // "community.all-lists.head": "Subcommunities and Collections", - "community.all-lists.head": "Alközösségek és gyűjtemények", - + "community.all-lists.head": "Alkategóriák és gyűjtemények", + // "community.sub-collection-list.head": "Collections of this Community", "community.sub-collection-list.head": "Ennek a közösségnek a gyűjteményei", - + // "community.sub-community-list.head": "Communities of this Community", - "community.sub-community-list.head": "Ennek a közösségnek a közösségei", - - - + "community.sub-community-list.head": "Ennek a kategóriának az alkategóriái", + + + // "cookies.consent.accept-all": "Accept all", "cookies.consent.accept-all": "Mind elfogad", - + // "cookies.consent.accept-selected": "Accept selected", "cookies.consent.accept-selected": "Kiválasztottat elfogad", - + // "cookies.consent.app.opt-out.description": "This app is loaded by default (but you can opt out)", "cookies.consent.app.opt-out.description": "Ez az app alaból betöltődik (de letilthatja)", - + // "cookies.consent.app.opt-out.title": "(opt-out)", "cookies.consent.app.opt-out.title": "(letilt)", - + // "cookies.consent.app.purpose": "purpose", "cookies.consent.app.purpose": "cél", - + // "cookies.consent.app.required.description": "This application is always required", "cookies.consent.app.required.description": "Ez egy szükséges alkalmazás", - + // "cookies.consent.app.required.title": "(always required)", "cookies.consent.app.required.title": "(mindig szükséges)", - + + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + // TODO New key - Add a translation + "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + // TODO New key - Add a translation + "cookies.consent.app.disable-all.title": "Enable or disable all services", + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", "cookies.consent.update": "Változások történtek az utolsó látogatása óta, frissítse a beleegyezését.", - + // "cookies.consent.close": "Close", "cookies.consent.close": "Bezár", - + // "cookies.consent.decline": "Decline", "cookies.consent.decline": "Elutasít", - + + // "cookies.consent.ok": "That's ok", + // TODO New key - Add a translation + "cookies.consent.ok": "That's ok", + + // "cookies.consent.save": "Save", + "cookies.consent.save": "Mentés", + + // "cookies.consent.content-notice.title": "Cookie Consent", + "cookies.consent.content-notice.title": "Cookie elfogadása", + // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", "cookies.consent.content-notice.description": "Mi gyűjtjük és feldolgozzuk a személyes adatait a következő célból: Hitelesítés, Beállítások, Elismerés és Statisztikák.
    Részletekért olvassa el: {privacyPolicy}.", - + + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + // TODO New key - Add a translation + "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + // "cookies.consent.content-notice.learnMore": "Customize", "cookies.consent.content-notice.learnMore": "Személyreszab", - + // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", "cookies.consent.content-modal.description": "Itt láthatja és személyre szabhatja az Önről gyűjtött adatokat.", - + // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", - "cookies.consent.content-modal.privacy-policy.name": "Adatvédelmi irányelvek", - + "cookies.consent.content-modal.privacy-policy.name": "Adatvédelmi nyilatkozat", + // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", "cookies.consent.content-modal.privacy-policy.text": "Továbbiakért olvassa el: {privacyPolicy}.", - + // "cookies.consent.content-modal.title": "Information that we collect", "cookies.consent.content-modal.title": "Gyűjtött adatok", - - - + + // "cookies.consent.content-modal.services": "services", + // TODO New key - Add a translation + "cookies.consent.content-modal.services": "services", + + // "cookies.consent.content-modal.service": "service", + // TODO New key - Add a translation + "cookies.consent.content-modal.service": "service", + // "cookies.consent.app.title.authentication": "Authentication", "cookies.consent.app.title.authentication": "Hitelesítés", - + // "cookies.consent.app.description.authentication": "Required for signing you in", "cookies.consent.app.description.authentication": "Szükséges a beléptetéséhez", - - + + // "cookies.consent.app.title.preferences": "Preferences", "cookies.consent.app.title.preferences": "Beállítások", - + // "cookies.consent.app.description.preferences": "Required for saving your preferences", "cookies.consent.app.description.preferences": "Szükséges a beállítások mentéséhez", - - - + + + // "cookies.consent.app.title.acknowledgement": "Acknowledgement", "cookies.consent.app.title.acknowledgement": "Elismerés", - + // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", "cookies.consent.app.description.acknowledgement": "Szükséges az elismerésének és beleegyezésének a mentéséhez", - - - + + + // "cookies.consent.app.title.google-analytics": "Google Analytics", "cookies.consent.app.title.google-analytics": "Google Analytics", - + // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", "cookies.consent.app.description.google-analytics": "Engedélyezi statisztikai adatok gyűjtését", - - - + + + + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + // TODO New key - Add a translation + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + + // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + // TODO New key - Add a translation + "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + + // "cookies.consent.purpose.functional": "Functional", "cookies.consent.purpose.functional": "Funkcionális", - + // "cookies.consent.purpose.statistical": "Statistical", "cookies.consent.purpose.statistical": "Statisztikai", - - + + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + // TODO New key - Add a translation + "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + + // "cookies.consent.purpose.sharing": "Sharing", + // TODO New key - Add a translation + "cookies.consent.purpose.sharing": "Sharing", + + // "curation-task.task.citationpage.label": "Generate Citation Page", + // TODO New key - Add a translation + "curation-task.task.citationpage.label": "Generate Citation Page", + // "curation-task.task.checklinks.label": "Check Links in Metadata", "curation-task.task.checklinks.label": "Hivatkozások ellenőrzése a metaadatokban", - + // "curation-task.task.noop.label": "NOOP", "curation-task.task.noop.label": "NOOP", - + // "curation-task.task.profileformats.label": "Profile Bitstream Formats", "curation-task.task.profileformats.label": "A profil bitfolyam formátumai", - + // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", "curation-task.task.requiredmetadata.label": "Szükséges metaadatok ellenőrzése", - + // "curation-task.task.translate.label": "Microsoft Translator", "curation-task.task.translate.label": "Microsoft fordító", - + // "curation-task.task.vscan.label": "Virus Scan", "curation-task.task.vscan.label": "Virus ellenőrzés", - - - + + // "curation-task.task.register-doi.label": "Register DOI", + // TODO New key - Add a translation + "curation-task.task.register-doi.label": "Register DOI", + + + // "curation.form.task-select.label": "Task:", "curation.form.task-select.label": "Feladat:", - + // "curation.form.submit": "Start", "curation.form.submit": "Start", - + // "curation.form.submit.success.head": "The curation task has been started successfully", "curation.form.submit.success.head": "A kurátor feladat siskersen elkezdődött", - + // "curation.form.submit.success.content": "You will be redirected to the corresponding process page.", "curation.form.submit.success.content": "Át lesz irányítva a megfelelő folyamatoldalra.", - + // "curation.form.submit.error.head": "Running the curation task failed", "curation.form.submit.error.head": "A kurátor feladat futtatása sikertelen", - + // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", "curation.form.submit.error.content": "Hiba történt a kurátor feladat elindításakor.", - + + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + // TODO New key - Add a translation + "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + // "curation.form.handle.label": "Handle:", "curation.form.handle.label": "Handle:", - + // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", "curation.form.handle.hint": "Hint: Írja be a(z) [your-handle-prefix]/0 hogy futtasson egy feladatok az egész oldalon (nem minden feladat alakalmas a futtatásra)", - - - + + + + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + // TODO New key - Add a translation + "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + + // "deny-request-copy.email.subject": "Request copy of document", + // TODO New key - Add a translation + "deny-request-copy.email.subject": "Request copy of document", + + // "deny-request-copy.error": "An error occurred", + // TODO New key - Add a translation + "deny-request-copy.error": "An error occurred", + + // "deny-request-copy.header": "Deny document copy request", + // TODO New key - Add a translation + "deny-request-copy.header": "Deny document copy request", + + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + // TODO New key - Add a translation + "deny-request-copy.intro": "This message will be sent to the applicant of the request", + + // "deny-request-copy.success": "Successfully denied item request", + // TODO New key - Add a translation + "deny-request-copy.success": "Successfully denied item request", + + + + // "dso.name.untitled": "Untitled", + // TODO New key - Add a translation + "dso.name.untitled": "Untitled", + + + // "dso-selector.create.collection.head": "New collection", "dso-selector.create.collection.head": "Új gyűjtemény", - + // "dso-selector.create.collection.sub-level": "Create a new collection in", "dso-selector.create.collection.sub-level": "Új közösség létrehozása benne", - + // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Új közösség", - + + // "dso-selector.create.community.or-divider": "or", + // TODO New key - Add a translation + "dso-selector.create.community.or-divider": "or", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Hozzon létre új közösséget benne", - + // "dso-selector.create.community.top-level": "Create a new top-level community", "dso-selector.create.community.top-level": "Hozzon létre csúcsszintű közösséget", - + // "dso-selector.create.item.head": "New item", "dso-selector.create.item.head": "Új tárgy", - + // "dso-selector.create.item.sub-level": "Create a new item in", "dso-selector.create.item.sub-level": "Új elem létrehozása, itt", - + // "dso-selector.create.submission.head": "New submission", "dso-selector.create.submission.head": "Új beküldés", - + // "dso-selector.edit.collection.head": "Edit collection", "dso-selector.edit.collection.head": "Szerkessze a gyűjteményt", - + // "dso-selector.edit.community.head": "Edit community", "dso-selector.edit.community.head": "Szerkessze a közösséget", - + // "dso-selector.edit.item.head": "Edit item", "dso-selector.edit.item.head": "Szerkessze a tárgyat", - + + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + // TODO New key - Add a translation + "dso-selector.error.title": "An error occurred searching for a {{ type }}", + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", "dso-selector.export-metadata.dspaceobject.head": "Metaadat exportálása innen", - + + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + // TODO New key - Add a translation + "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + + // "dso-selector.import-batch.dspaceobject.head": "Import batch from", + // TODO New key - Add a translation + "dso-selector.import-batch.dspaceobject.head": "Import batch from", + // "dso-selector.no-results": "No {{ type }} found", "dso-selector.no-results": "Nincs {{ type }} találat", - + // "dso-selector.placeholder": "Search for a {{ type }}", "dso-selector.placeholder": "Keressen egy {{ type }}", - - - + + // "dso-selector.select.collection.head": "Select a collection", + // TODO New key - Add a translation + "dso-selector.select.collection.head": "Select a collection", + + // "dso-selector.set-scope.community.head": "Select a search scope", + // TODO New key - Add a translation + "dso-selector.set-scope.community.head": "Select a search scope", + + // "dso-selector.set-scope.community.button": "Search all of DSpace", + "dso-selector.set-scope.community.button": "Keresés a teljes DSpaceben", + + // "dso-selector.set-scope.community.or-divider": "or", + // TODO New key - Add a translation + "dso-selector.set-scope.community.or-divider": "or", + + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + // TODO New key - Add a translation + "dso-selector.set-scope.community.input-header": "Search for a community or collection", + + // "dso-selector.claim.item.head": "Profile tips", + // TODO New key - Add a translation + "dso-selector.claim.item.head": "Profile tips", + + // "dso-selector.claim.item.body": "These are existing profiles that may be related to you. If you recognize yourself in one of these profiles, select it and on the detail page, among the options, choose to claim it. Otherwise you can create a new profile from scratch using the button below.", + // TODO New key - Add a translation + "dso-selector.claim.item.body": "These are existing profiles that may be related to you. If you recognize yourself in one of these profiles, select it and on the detail page, among the options, choose to claim it. Otherwise you can create a new profile from scratch using the button below.", + + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + // TODO New key - Add a translation + "dso-selector.claim.item.not-mine-label": "None of these are mine", + + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + // TODO New key - Add a translation + "dso-selector.claim.item.create-from-scratch": "Create a new one", + + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again ↻", + // TODO New key - Add a translation + "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again ↻", + + // "supervision-group-selector.header": "Supervision Group Selector", + // TODO New key - Add a translation + "supervision-group-selector.header": "Supervision Group Selector", + + // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + + // "supervision-group-selector.select.type-of-order.option.none": "NONE", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.option.none": "NONE", + + // "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + + // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + + // "supervision-group-selector.select.group.label": "Select a Group", + // TODO New key - Add a translation + "supervision-group-selector.select.group.label": "Select a Group", + + // "supervision-group-selector.button.cancel": "Cancel", + // TODO New key - Add a translation + "supervision-group-selector.button.cancel": "Cancel", + + // "supervision-group-selector.button.save": "Save", + // TODO New key - Add a translation + "supervision-group-selector.button.save": "Save", + + // "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + + // "supervision-group-selector.select.group.error": "Please select a group", + // TODO New key - Add a translation + "supervision-group-selector.select.group.error": "Please select a group", + + // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + // TODO New key - Add a translation + "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + + // "supervision-group-selector.notification.create.failure.title": "Error", + // TODO New key - Add a translation + "supervision-group-selector.notification.create.failure.title": "Error", + + // "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + // TODO New key - Add a translation + "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Metaadat exportálásának célja {{ dsoName }}", - + // "confirmation-modal.export-metadata.info": "Are you sure you want to export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.info": "Biztos benne, hogy exportálni szeretné a metaadatok a követkő céllal: {{ dsoName }}", - + // "confirmation-modal.export-metadata.cancel": "Cancel", "confirmation-modal.export-metadata.cancel": "Mégsem", - + // "confirmation-modal.export-metadata.confirm": "Export", "confirmation-modal.export-metadata.confirm": "Export", - + + // "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + // TODO New key - Add a translation + "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + + // "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + // TODO New key - Add a translation + "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + + // "confirmation-modal.export-batch.cancel": "Cancel", + // TODO New key - Add a translation + "confirmation-modal.export-batch.cancel": "Cancel", + + // "confirmation-modal.export-batch.confirm": "Export", + // TODO New key - Add a translation + "confirmation-modal.export-batch.confirm": "Export", + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.header": "EPerson törlése \"{{ dsoName }}\"", - + // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", "confirmation-modal.delete-eperson.info": "Biztos benne, hogy törli: EPerson \"{{ dsoName }}\"", - + // "confirmation-modal.delete-eperson.cancel": "Cancel", "confirmation-modal.delete-eperson.cancel": "Mégsem", - + // "confirmation-modal.delete-eperson.confirm": "Delete", "confirmation-modal.delete-eperson.confirm": "Töröl", - - + + // "confirmation-modal.delete-profile.header": "Delete Profile", + // TODO New key - Add a translation + "confirmation-modal.delete-profile.header": "Delete Profile", + + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + // TODO New key - Add a translation + "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + + // "confirmation-modal.delete-profile.cancel": "Cancel", + // TODO New key - Add a translation + "confirmation-modal.delete-profile.cancel": "Cancel", + + // "confirmation-modal.delete-profile.confirm": "Delete", + // TODO New key - Add a translation + "confirmation-modal.delete-profile.confirm": "Delete", + + // "confirmation-modal.delete-subscription.header": "Delete Subscription", + // TODO New key - Add a translation + "confirmation-modal.delete-subscription.header": "Delete Subscription", + + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + // TODO New key - Add a translation + "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + + // "confirmation-modal.delete-subscription.cancel": "Cancel", + // TODO New key - Add a translation + "confirmation-modal.delete-subscription.cancel": "Cancel", + + // "confirmation-modal.delete-subscription.confirm": "Delete", + // TODO New key - Add a translation + "confirmation-modal.delete-subscription.confirm": "Delete", + // "error.bitstream": "Error fetching bitstream", "error.bitstream": "Bitfolyam megjelenítése közben hiba történt", - + // "error.browse-by": "Error fetching items", "error.browse-by": "Tárgy megjelenítése közben hiba történt", - + // "error.collection": "Error fetching collection", "error.collection": "Gyűjtemény megjelenítése közben hiba történt", - + // "error.collections": "Error fetching collections", "error.collections": "Gyűjtemények megjelenítése közben hiba történt", - + // "error.community": "Error fetching community", "error.community": "Közösség megjelenítése közben hiba történty", - + // "error.identifier": "No item found for the identifier", "error.identifier": "Ehhez az azonosítóhoz nem találtunk tárgyat", - + // "error.default": "Error", "error.default": "Hiba", - + // "error.item": "Error fetching item", "error.item": "Tárgy megjelenítésekor hiba történt", - + // "error.items": "Error fetching items", "error.items": "Tárgyak megjelenítésekor hiba történt", - + // "error.objects": "Error fetching objects", "error.objects": "Tárgyak megjelenítésekor hiba történt", - + // "error.recent-submissions": "Error fetching recent submissions", "error.recent-submissions": "Friss feltöltések megjelenítésekor hiba történt", - + // "error.search-results": "Error fetching search results", "error.search-results": "keresési eredmények megjelenítésekor hiba történt", - + + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + // TODO New key - Add a translation + "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + // "error.sub-collections": "Error fetching sub-collections", "error.sub-collections": "Algyűjtemények megjelenítésekor hiba történt", - + // "error.sub-communities": "Error fetching sub-communities", - "error.sub-communities": "Alközösségek megjelenítésekor hiba történt", - + "error.sub-communities": "Alkategóriák megjelenítésekor hiba történt", + // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", "error.submission.sections.init-form-error": "Szakasz kezdőértékének megadásakor hiba történt, kérjük ellenőrizze az adatbeviteli forma beállításait. Részletek alább :

    ", - + // "error.top-level-communities": "Error fetching top-level communities", - "error.top-level-communities": "Csúcsszintű közösségek megjelenítésekor hiba történt", - + "error.top-level-communities": "Hiba a csúcsszintű kategóriák megjelenítésekor", + // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", "error.validation.license.notgranted": "ezt az engedélyt meg kell adnia ahhoz, hogy befejezze a feltöltést. Ha jelenleg ez nem lehetséges, elmentheti az eddigi munkát és később folytathatja, vagy törölheti a feltöltést.", - + // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", "error.validation.pattern": "Ezt a bevitelt korlátozza a jelenlegi útvonal: {{ pattern }}.", - + // "error.validation.filerequired": "The file upload is mandatory", "error.validation.filerequired": "Az állomány feltöltése kötelező", - - - + + // "error.validation.required": "This field is required", + // TODO New key - Add a translation + "error.validation.required": "This field is required", + + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + // TODO New key - Add a translation + "error.validation.NotValidEmail": "This E-mail is not a valid email", + + // "error.validation.emailTaken": "This E-mail is already taken", + // TODO New key - Add a translation + "error.validation.emailTaken": "This E-mail is already taken", + + // "error.validation.groupExists": "This group already exists", + // TODO New key - Add a translation + "error.validation.groupExists": "This group already exists", + + + // "feed.description": "Syndication feed", + // TODO New key - Add a translation + "feed.description": "Syndication feed", + + // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Hiba történ az elemhez tartozó fájlok beszerzésekor", - - - + + + // "footer.copyright": "copyright © 2002-{{ year }}", "footer.copyright": "szerzői jog © 2002-{{ year }}", - + // "footer.link.dspace": "DSpace software", "footer.link.dspace": "DSpace szoftver", - + // "footer.link.lyrasis": "LYRASIS", "footer.link.lyrasis": "LYRASIS", - + // "footer.link.cookies": "Cookie settings", "footer.link.cookies": "Süti beállítások", - + // "footer.link.privacy-policy": "Privacy policy", - "footer.link.privacy-policy": "Privacy policy", - + "footer.link.privacy-policy": "Adatvédelmi nyilatkozat", + // "footer.link.end-user-agreement":"End User Agreement", - "footer.link.end-user-agreement":"End User Agreement", - - - + "footer.link.end-user-agreement":"Felhasználói feltételek", + + // "footer.link.feedback":"Send Feedback", + "footer.link.feedback":"Visszajelzés küldése", + + + // "forgot-email.form.header": "Forgot Password", "forgot-email.form.header": "Elfelejtettem a jelszót", - - // "forgot-email.form.info": "Enter Register an account to subscribe to collections for email updates, and submit new items to DSpace.", - "forgot-email.form.info": "Lépjen be a Fiók létrehozásába, hogy feliratkozhasson gyűjtemények e-mail értesítésére, és új elemeket tölthessen fel a DSpace-be.", - + + // "forgot-email.form.info": "Enter the email address associated with the account.", + "forgot-email.form.info": "Írja be a fiókhoz rendelt e-mail címet.", + // "forgot-email.form.email": "Email Address *", - "forgot-email.form.email": "Email Cím *", - + "forgot-email.form.email": "E-mail cím *", + // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Írjon be egy e-mail címet", - - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Írjon be egy érvényes e-mail címet", - - // "forgot-email.form.email.hint": "This address will be verified and used as your login name.", - "forgot-email.form.email.hint": "Ellenőrizni fogjuk a címet és ezt fogja használni a bejelentkezéshez.", - - // "forgot-email.form.submit": "Submit", - "forgot-email.form.submit": "Beküld", - - // "forgot-email.form.success.head": "Verification email sent", - "forgot-email.form.success.head": "Ellenőrző e-mail kiküldve", - + + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + // TODO New key - Add a translation + "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + "forgot-email.form.email.hint": "Elküldtünk egy e-mailt erre a címre további utasításokkal.", + + // "forgot-email.form.submit": "Reset password", + "forgot-email.form.submit": "Jelszó visszaállítása", + + // "forgot-email.form.success.head": "Password reset email sent", + "forgot-email.form.success.head": "Jelszóvisszaállító e-mail küldve", + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "forgot-email.form.success.content": "Egy levél ki lett küldve a(z) {{ email }} címre, ami tartalmaz egy speciális hivatkozást a következő lépéshez.", - - // "forgot-email.form.error.head": "Error when trying to register email", - "forgot-email.form.error.head": "Hiba történt az e-mail cím regisztrációjánál", - - // "forgot-email.form.error.content": "An error occured when registering the following email address: {{ email }}", - "forgot-email.form.error.content": "Hiba történt a következő e-mail cím regisztrációjánál: {{ email }}", - - - + + // "forgot-email.form.error.head": "Error when trying to reset password", + "forgot-email.form.error.head": "Hiba történt a jelszó visszaállításakor", + + // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + // TODO New key - Add a translation + "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + + + // "forgot-password.title": "Forgot Password", "forgot-password.title": "Elfelejtettem a jelszót", - + // "forgot-password.form.head": "Forgot Password", "forgot-password.form.head": "Elfelejtettem a jelszót", - - // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", - "forgot-password.form.info": "Írjon be egy új jelszót a lenti mezőbe, és igazolja a második mezőbe újraírva azt. Legalább hat karakter hosszú kell legyen.", - + + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", + "forgot-password.form.info": "Írjon be egy új jelszót a lenti mezőbe, és igazolja a második mezőbe újraírva azt.", + // "forgot-password.form.card.security": "Security", "forgot-password.form.card.security": "Biztonság", - + // "forgot-password.form.identification.header": "Identify", "forgot-password.form.identification.header": "Azonosítás", - + // "forgot-password.form.identification.email": "Email address: ", "forgot-password.form.identification.email": "E-mail cím: ", - + // "forgot-password.form.label.password": "Password", "forgot-password.form.label.password": "Jelszó", - + // "forgot-password.form.label.passwordrepeat": "Retype to confirm", "forgot-password.form.label.passwordrepeat": "Írja újra a visszaigazoláshoz", - + // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", "forgot-password.form.error.empty-password": "Írja be a jelszót a lenti mezőbe.", - + // "forgot-password.form.error.matching-passwords": "The passwords do not match.", "forgot-password.form.error.matching-passwords": "A jelszavak nem egyeznek.", - - // "forgot-password.form.error.password-length": "The password should be at least 6 characters long.", - "forgot-password.form.error.password-length": "A jelszó legalább 6 karakter hosszú kell legyen.", - + // "forgot-password.form.notification.error.title": "Error when trying to submit new password", "forgot-password.form.notification.error.title": "Hiba történt a jelszó beküldésekor", - + // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", "forgot-password.form.notification.success.content": "A jelszóvisszaállítás sikeres volt. Beléphet a létrehozott felhasználóval.", - + // "forgot-password.form.notification.success.title": "Password reset completed", "forgot-password.form.notification.success.title": "Jelszóvisszaállítás befejeződött", - + // "forgot-password.form.submit": "Submit password", "forgot-password.form.submit": "Jelszó beküldése", - - - - // "form.add": "Add", - "form.add": "Hozzáadás", - + + + // "form.add": "Add more", + "form.add": "Továbbiak hozzáadása", + // "form.add-help": "Click here to add the current entry and to add another one", "form.add-help": "Kattintson ide a beírt adatok hozzáadásához, majd újabb megadásához", - + // "form.cancel": "Cancel", "form.cancel": "Mégse", - + // "form.clear": "Clear", "form.clear": "Töröl", - + // "form.clear-help": "Click here to remove the selected value", "form.clear-help": "Kattintson ide a kiválasztott érték törléséhez", - + + // "form.discard": "Discard", + "form.discard": "Elvet", + + // "form.drag": "Drag", + // TODO New key - Add a translation + "form.drag": "Drag", + // "form.edit": "Edit", "form.edit": "Szerkeszt", - + // "form.edit-help": "Click here to edit the selected value", "form.edit-help": "Kattintson ide a kiválasztott érték szerkesztéséhez", - + // "form.first-name": "First name", "form.first-name": "Keresztnév", - + // "form.group-collapse": "Collapse", "form.group-collapse": "Kicsinyít", - + // "form.group-collapse-help": "Click here to collapse", "form.group-collapse-help": "Kattintson ide a kicsinyítéshez", - + // "form.group-expand": "Expand", "form.group-expand": "Felnagyít", - + // "form.group-expand-help": "Click here to expand and add more elements", "form.group-expand-help": "Kattintson ide, hogy felnagyítsa s újabb elemeket adjon hozzá", - + // "form.last-name": "Last name", "form.last-name": "Családnév", - + // "form.loading": "Loading...", "form.loading": "Betöltés...", - + // "form.lookup": "Lookup", "form.lookup": "Keresse ki", - + // "form.lookup-help": "Click here to look up an existing relation", "form.lookup-help": "Kattintson ide egy meglévő kapcsolat kikereséséhez", - + // "form.no-results": "No results found", "form.no-results": "Nincs találat", - + // "form.no-value": "No value entered", "form.no-value": "Nem adott meg értéket", - + // "form.other-information": {}, "form.other-information": {}, - + // "form.remove": "Remove", "form.remove": "Törlés", - + // "form.save": "Save", "form.save": "Mentés", - + // "form.save-help": "Save changes", "form.save-help": "Változtatások mentése", - + // "form.search": "Search", "form.search": "Keresés", - + // "form.search-help": "Click here to look for an existing correspondence", "form.search-help": "Kattintson ide egy meglévő levelezés kikereséséhez", - - // "form.submit": "Submit", - "form.submit": "Feltöltés", - - - + + // "form.submit": "Save", + "form.submit": "Ment", + + // "form.repeatable.sort.tip": "Drop the item in the new position", + // TODO New key - Add a translation + "form.repeatable.sort.tip": "Drop the item in the new position", + + + + // "grant-deny-request-copy.deny": "Don't send copy", + // TODO New key - Add a translation + "grant-deny-request-copy.deny": "Don't send copy", + + // "grant-deny-request-copy.email.back": "Back", + // TODO New key - Add a translation + "grant-deny-request-copy.email.back": "Back", + + // "grant-deny-request-copy.email.message": "Message", + // TODO New key - Add a translation + "grant-deny-request-copy.email.message": "Message", + + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + // TODO New key - Add a translation + "grant-deny-request-copy.email.message.empty": "Please enter a message", + + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + // TODO New key - Add a translation + "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + // TODO New key - Add a translation + "grant-deny-request-copy.email.permissions.label": "Change to open access", + + // "grant-deny-request-copy.email.send": "Send", + // TODO New key - Add a translation + "grant-deny-request-copy.email.send": "Send", + + // "grant-deny-request-copy.email.subject": "Subject", + // TODO New key - Add a translation + "grant-deny-request-copy.email.subject": "Subject", + + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + // TODO New key - Add a translation + "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + + // "grant-deny-request-copy.grant": "Send copy", + // TODO New key - Add a translation + "grant-deny-request-copy.grant": "Send copy", + + // "grant-deny-request-copy.header": "Document copy request", + // TODO New key - Add a translation + "grant-deny-request-copy.header": "Document copy request", + + // "grant-deny-request-copy.home-page": "Take me to the home page", + // TODO New key - Add a translation + "grant-deny-request-copy.home-page": "Take me to the home page", + + // "grant-deny-request-copy.intro1": "If you are one of the authors of the document {{ name }}, then please use one of the options below to respond to the user's request.", + // TODO New key - Add a translation + "grant-deny-request-copy.intro1": "If you are one of the authors of the document {{ name }}, then please use one of the options below to respond to the user's request.", + + // "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + // TODO New key - Add a translation + "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + // TODO New key - Add a translation + "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + + + + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + // TODO New key - Add a translation + "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + + // "grant-request-copy.email.subject": "Request copy of document", + // TODO New key - Add a translation + "grant-request-copy.email.subject": "Request copy of document", + + // "grant-request-copy.error": "An error occurred", + // TODO New key - Add a translation + "grant-request-copy.error": "An error occurred", + + // "grant-request-copy.header": "Grant document copy request", + // TODO New key - Add a translation + "grant-request-copy.header": "Grant document copy request", + + // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + // TODO New key - Add a translation + "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + + // "grant-request-copy.success": "Successfully granted item request", + // TODO New key - Add a translation + "grant-request-copy.success": "Successfully granted item request", + + + // "health.breadcrumbs": "Health", + // TODO New key - Add a translation + "health.breadcrumbs": "Health", + + // "health-page.heading" : "Health", + // TODO New key - Add a translation + "health-page.heading" : "Health", + + // "health-page.info-tab" : "Info", + // TODO New key - Add a translation + "health-page.info-tab" : "Info", + + // "health-page.status-tab" : "Status", + // TODO New key - Add a translation + "health-page.status-tab" : "Status", + + // "health-page.error.msg": "The health check service is temporarily unavailable", + // TODO New key - Add a translation + "health-page.error.msg": "The health check service is temporarily unavailable", + + // "health-page.property.status": "Status code", + // TODO New key - Add a translation + "health-page.property.status": "Status code", + + // "health-page.section.db.title": "Database", + // TODO New key - Add a translation + "health-page.section.db.title": "Database", + + // "health-page.section.geoIp.title": "GeoIp", + // TODO New key - Add a translation + "health-page.section.geoIp.title": "GeoIp", + + // "health-page.section.solrAuthorityCore.title": "Solr: authority core", + // TODO New key - Add a translation + "health-page.section.solrAuthorityCore.title": "Solr: authority core", + + // "health-page.section.solrOaiCore.title": "Solr: oai core", + // TODO New key - Add a translation + "health-page.section.solrOaiCore.title": "Solr: oai core", + + // "health-page.section.solrSearchCore.title": "Solr: search core", + // TODO New key - Add a translation + "health-page.section.solrSearchCore.title": "Solr: search core", + + // "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + // TODO New key - Add a translation + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + + // "health-page.section-info.app.title": "Application Backend", + // TODO New key - Add a translation + "health-page.section-info.app.title": "Application Backend", + + // "health-page.section-info.java.title": "Java", + // TODO New key - Add a translation + "health-page.section-info.java.title": "Java", + + // "health-page.status": "Status", + // TODO New key - Add a translation + "health-page.status": "Status", + + // "health-page.status.ok.info": "Operational", + // TODO New key - Add a translation + "health-page.status.ok.info": "Operational", + + // "health-page.status.error.info": "Problems detected", + // TODO New key - Add a translation + "health-page.status.error.info": "Problems detected", + + // "health-page.status.warning.info": "Possible issues detected", + // TODO New key - Add a translation + "health-page.status.warning.info": "Possible issues detected", + + // "health-page.title": "Health", + // TODO New key - Add a translation + "health-page.title": "Health", + + // "health-page.section.no-issues": "No issues detected", + // TODO New key - Add a translation + "health-page.section.no-issues": "No issues detected", + + // "home.description": "", "home.description": "", - + // "home.breadcrumbs": "Home", - "home.breadcrumbs": "Haza", - - // "home.title": "DSpace Angular :: Home", - "home.title": "DSpace Angular :: Haza", - + "home.breadcrumbs": "Főoldal", + + // "home.search-form.placeholder": "Search the repository ...", + "home.search-form.placeholder": "Keresés az adattárban ...", + + // "home.title": "Home", + "home.title": "Főoldal", + // "home.top-level-communities.head": "Communities in DSpace", - "home.top-level-communities.head": "Közösségek a DSpace-en", - + "home.top-level-communities.head": "Kategóriák", + // "home.top-level-communities.help": "Select a community to browse its collections.", - "home.top-level-communities.help": "Válasszon ki egy közösséget, hogy böngéssze a gyűjteményeit.", - - - + "home.top-level-communities.help": "Válasszon ki egy kategóriát, hogy böngéssze a gyűjteményeit.", + + + // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", "info.end-user-agreement.accept": "Elolvastam és elfogadom a felhasználói feltételeket", - + // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", "info.end-user-agreement.accept.error": "Hiba történt a felhasználói feltételek elfogadásakor", - + // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", "info.end-user-agreement.accept.success": "Sikeresen frissítette a felhasználói feltételeket", - + // "info.end-user-agreement.breadcrumbs": "End User Agreement", "info.end-user-agreement.breadcrumbs": "Felhasználói feltételek", - + // "info.end-user-agreement.buttons.cancel": "Cancel", "info.end-user-agreement.buttons.cancel": "Mégsem", - + // "info.end-user-agreement.buttons.save": "Save", "info.end-user-agreement.buttons.save": "Mentés", - + // "info.end-user-agreement.head": "End User Agreement", "info.end-user-agreement.head": "Felhasználói feltételek", - + // "info.end-user-agreement.title": "End User Agreement", "info.end-user-agreement.title": "Felhasználói feltételek", - + // "info.privacy.breadcrumbs": "Privacy Statement", "info.privacy.breadcrumbs": "Adatvédelmi nyilatkozat", - + // "info.privacy.head": "Privacy Statement", "info.privacy.head": "Adatvédelmi nyilatkozat", - + // "info.privacy.title": "Privacy Statement", "info.privacy.title": "Adatvédelmi nyilatkozat", - - - - // "item.alerts.private": "This item is private", + + // "info.feedback.breadcrumbs": "Feedback", + // TODO New key - Add a translation + "info.feedback.breadcrumbs": "Feedback", + + // "info.feedback.head": "Feedback", + "info.feedback.head": "Visszajelzés", + + // "info.feedback.title": "Feedback", + "info.feedback.title": "Visszajelzés", + + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + // TODO New key - Add a translation + "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + // TODO New key - Add a translation + "info.feedback.email_help": "This address will be used to follow up on your feedback.", + + // "info.feedback.send": "Send Feedback", + "info.feedback.send": "Visszajelzés küldése", + + // "info.feedback.comments": "Comments", + "info.feedback.comments": "Megjegyzések", + + // "info.feedback.email-label": "Your Email", + "info.feedback.email-label": "Az e-mail címe", + + // "info.feedback.create.success" : "Feedback Sent Successfully!", + // TODO New key - Add a translation + "info.feedback.create.success" : "Feedback Sent Successfully!", + + // "info.feedback.error.email.required" : "A valid email address is required", + // TODO New key - Add a translation + "info.feedback.error.email.required" : "A valid email address is required", + + // "info.feedback.error.message.required" : "A comment is required", + // TODO New key - Add a translation + "info.feedback.error.message.required" : "A comment is required", + + // "info.feedback.page-label" : "Page", + // TODO New key - Add a translation + "info.feedback.page-label" : "Page", + + // "info.feedback.page_help" : "Tha page related to your feedback", + // TODO New key - Add a translation + "info.feedback.page_help" : "Tha page related to your feedback", + + + + // "item.alerts.private": "This item is non-discoverable", "item.alerts.private": "Ez az elem privát", - + // "item.alerts.withdrawn": "This item has been withdrawn", "item.alerts.withdrawn": "Ez az elem vissza lett vonva", - - - + + + // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", "item.edit.authorizations.heading": "Evvel a szerkesztővel megnézheti vagy szerkesztheti egy elem jogosutságát, és szerkesztheti egy egyedi elem componenseinek jogosutságát: bundles és bitstreams. Röviden, egy elem a kötegek gyűjteménye, és a kötegek a bitsteramek gyűjteménye. A kötegeknek többnyire van ADD/REMOVE/READ/WRITE jogosultsága, miközben a bitstreameknek csak READ/WRITE jogosultsága.", - + // "item.edit.authorizations.title": "Edit item's Policies", "item.edit.authorizations.title": "Jogosultásgok elem szerkesztése", - - - - // "item.badge.private": "Private", + + + + // "item.badge.private": "Non-discoverable", "item.badge.private": "Privát", - + // "item.badge.withdrawn": "Withdrawn", "item.badge.withdrawn": "Visszavont", - - - + + + // "item.bitstreams.upload.bundle": "Bundle", "item.bitstreams.upload.bundle": "Csomag", - - // "item.bitstreams.upload.bundle.placeholder": "Select a bundle", - "item.bitstreams.upload.bundle.placeholder": "Válasszon ki egy csomagot", - + + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", + "item.bitstreams.upload.bundle.placeholder": "Válasszon ki egy csomagot vagy írjon be egy új nevet", + // "item.bitstreams.upload.bundle.new": "Create bundle", "item.bitstreams.upload.bundle.new": "Hozzon létre csomagot", - + // "item.bitstreams.upload.bundles.empty": "This item doesn\'t contain any bundles to upload a bitstream to.", "item.bitstreams.upload.bundles.empty": "Ez a tárgy nem tartalmaz csomagot, ahova bitfolyamot lehetne feltölteni.", - + // "item.bitstreams.upload.cancel": "Cancel", "item.bitstreams.upload.cancel": "Mégse", - + // "item.bitstreams.upload.drop-message": "Drop a file to upload", "item.bitstreams.upload.drop-message": "Húzza ide a feltöltendő állományt", - + // "item.bitstreams.upload.item": "Item: ", "item.bitstreams.upload.item": "Tárgy: ", - + // "item.bitstreams.upload.notifications.bundle.created.content": "Successfully created new bundle.", "item.bitstreams.upload.notifications.bundle.created.content": "Új csomag sikeresen létrehozva.", - + // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", "item.bitstreams.upload.notifications.bundle.created.title": "Csomag létrehozva", - + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", "item.bitstreams.upload.notifications.upload.failed": "Feltöltés nem sikerült. Kérjük ellenőrizze a tartalmát, mielőtt újra próbálkozna.", - + // "item.bitstreams.upload.title": "Upload bitstream", "item.bitstreams.upload.title": "Bitfolyam feltöltése", - - - + + + // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", "item.edit.bitstreams.bundle.edit.buttons.upload": "Feltöltés", - + // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", "item.edit.bitstreams.bundle.displaying": "Jelenleg látható {{ amount }} Bitfolyam ennyiből: {{ total }}.", - + // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", "item.edit.bitstreams.bundle.load.all": "Valamennyi betöltése ({{ total }})", - + // "item.edit.bitstreams.bundle.load.more": "Load more", "item.edit.bitstreams.bundle.load.more": "Több betöltése", - + // "item.edit.bitstreams.bundle.name": "BUNDLE: {{ name }}", "item.edit.bitstreams.bundle.name": "CSOMAG: {{ name }}", - + // "item.edit.bitstreams.discard-button": "Discard", "item.edit.bitstreams.discard-button": "Elvetés", - + // "item.edit.bitstreams.edit.buttons.download": "Download", "item.edit.bitstreams.edit.buttons.download": "Letöltés", - + // "item.edit.bitstreams.edit.buttons.drag": "Drag", "item.edit.bitstreams.edit.buttons.drag": "Húzni", - + // "item.edit.bitstreams.edit.buttons.edit": "Edit", "item.edit.bitstreams.edit.buttons.edit": "Szerkesztés", - + // "item.edit.bitstreams.edit.buttons.remove": "Remove", "item.edit.bitstreams.edit.buttons.remove": "Eltávolítás", - + // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", "item.edit.bitstreams.edit.buttons.undo": "Változtatások vissza", - + // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", "item.edit.bitstreams.empty": "Ez a tárgy nem tartalmaz bitfolyamot. Kattintson a feltöltés gombra, hogy hozzon létre egyet.", - + // "item.edit.bitstreams.headers.actions": "Actions", "item.edit.bitstreams.headers.actions": "Műveletek", - + // "item.edit.bitstreams.headers.bundle": "Bundle", "item.edit.bitstreams.headers.bundle": "Csomag", - + // "item.edit.bitstreams.headers.description": "Description", "item.edit.bitstreams.headers.description": "Leírás", - + // "item.edit.bitstreams.headers.format": "Format", "item.edit.bitstreams.headers.format": "Formátum", - + // "item.edit.bitstreams.headers.name": "Name", "item.edit.bitstreams.headers.name": "Név", - + // "item.edit.bitstreams.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.bitstreams.notifications.discarded.content": "Változtatásai elvetve. Visszaállításukhoz kattintson a 'visszaállítás' gombra", - + // "item.edit.bitstreams.notifications.discarded.title": "Changes discarded", "item.edit.bitstreams.notifications.discarded.title": "Változtatások elvetve", - + // "item.edit.bitstreams.notifications.move.failed.title": "Error moving bitstreams", "item.edit.bitstreams.notifications.move.failed.title": "Bitfolyam elmozdítása közben hiba történt", - + // "item.edit.bitstreams.notifications.move.saved.content": "Your move changes to this item's bitstreams and bundles have been saved.", "item.edit.bitstreams.notifications.move.saved.content": "Művelete megváltoztatja a tárgy bitfolyamát és a csomagok el vannak mentve.", - + // "item.edit.bitstreams.notifications.move.saved.title": "Move changes saved", "item.edit.bitstreams.notifications.move.saved.title": "Változtatások elmozdítása elmentve", - + // "item.edit.bitstreams.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "item.edit.bitstreams.notifications.outdated.content": "A tárgyat amin jelenleg dolgozik egy másik felhasználó módosította. A jelenlegi változtatásokat elvetettük, hogy megelőzzük a konfliktusokat", - + // "item.edit.bitstreams.notifications.outdated.title": "Changes outdated", "item.edit.bitstreams.notifications.outdated.title": "Változtatások idejemúltak", - + // "item.edit.bitstreams.notifications.remove.failed.title": "Error deleting bitstream", "item.edit.bitstreams.notifications.remove.failed.title": "Bitfolyam törlése közben hiba történt", - + // "item.edit.bitstreams.notifications.remove.saved.content": "Your removal changes to this item's bitstreams have been saved.", "item.edit.bitstreams.notifications.remove.saved.content": "Az ön eltávolító változtatásai ennek a tárgynak a bitfolyamában el vannak mentve.", - + // "item.edit.bitstreams.notifications.remove.saved.title": "Removal changes saved", "item.edit.bitstreams.notifications.remove.saved.title": "Eltávolító változtatások mentve", - + // "item.edit.bitstreams.reinstate-button": "Undo", "item.edit.bitstreams.reinstate-button": "Visszaváltoztatás", - + // "item.edit.bitstreams.save-button": "Save", "item.edit.bitstreams.save-button": "Mentés", - + // "item.edit.bitstreams.upload-button": "Upload", "item.edit.bitstreams.upload-button": "Feltöltés", - - - + + + // "item.edit.delete.cancel": "Cancel", "item.edit.delete.cancel": "Mégse", - + // "item.edit.delete.confirm": "Delete", "item.edit.delete.confirm": "Törlés", - + // "item.edit.delete.description": "Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left.", "item.edit.delete.description": "Biztos benne, hogy ezt a tárgyat teljesen törölni óhajtja? Figyelem: jelenleg nem marad sírkő.", - + // "item.edit.delete.error": "An error occurred while deleting the item", "item.edit.delete.error": "Tárgy törlése közben hiba történt", - + // "item.edit.delete.header": "Delete item: {{ id }}", "item.edit.delete.header": "Tárgy törlése: {{ id }}", - + // "item.edit.delete.success": "The item has been deleted", "item.edit.delete.success": "Tárgy törölve", - + // "item.edit.head": "Edit Item", "item.edit.head": "Tárgy szerkesztése", - + // "item.edit.breadcrumbs": "Edit Item", "item.edit.breadcrumbs": "Tárgy szerkesztése", - - + + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + // TODO New key - Add a translation + "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + + // "item.edit.tabs.mapper.head": "Collection Mapper", // TODO New key - Add a translation "item.edit.tabs.mapper.head": "Collection Mapper", - + // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", // TODO New key - Add a translation "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", - + + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.DELETED": "Deleted", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + // TODO New key - Add a translation + "item.edit.register-doi.header": "Register a new or pending DOI", + + // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + // TODO New key - Add a translation + "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + + // "item.edit.register-doi.confirm": "Confirm", + // TODO New key - Add a translation + "item.edit.register-doi.confirm": "Confirm", + + // "item.edit.register-doi.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.register-doi.cancel": "Cancel", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + // TODO New key - Add a translation + "item.edit.register-doi.success": "DOI queued for registration successfully.", + + // "item.edit.register-doi.error": "Error registering DOI", + // TODO New key - Add a translation + "item.edit.register-doi.error": "Error registering DOI", + + // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + // TODO New key - Add a translation + "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Térképezze a tárgyat a kiválasztott gyűjteményekhez", - + // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", "item.edit.item-mapper.buttons.remove": "Törölje a tárgy térképezését a kiválasztott gyűjteményekhez", - + // "item.edit.item-mapper.cancel": "Cancel", "item.edit.item-mapper.cancel": "Mégse", - + // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", "item.edit.item-mapper.description": "Ez a térképező eszköz, amellyel az adminisztrátorok ezt a tárgyat más gyűjteményekhez térképezhetik. Kereshet gyűjteményeket amelyekhez térképezze, vagy böngészheti azon gyűjtemények listáját, amelyhez jelenleg hozzá van térképezve..", - + // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", "item.edit.item-mapper.head": "Tárgytérképező - Térképezze a tárgyat gyűjteményekhez", - + // "item.edit.item-mapper.item": "Item: \"{{name}}\"", "item.edit.item-mapper.item": "Tárgy: \"{{name}}\"", - + // "item.edit.item-mapper.no-search": "Please enter a query to search", "item.edit.item-mapper.no-search": "Kérjük írja be a keresett szót", - + // "item.edit.item-mapper.notifications.add.error.content": "Errors occurred for mapping of item to {{amount}} collections.", "item.edit.item-mapper.notifications.add.error.content": "A tárgynak a {{amount}} gyűjteményekhez való térképezésekor hiba történt.", - + // "item.edit.item-mapper.notifications.add.error.head": "Mapping errors", "item.edit.item-mapper.notifications.add.error.head": "Térképezési hibák", - + // "item.edit.item-mapper.notifications.add.success.content": "Successfully mapped item to {{amount}} collections.", "item.edit.item-mapper.notifications.add.success.content": "Tárgy sikeresen térképezve {{amount}} gyűjteményhez.", - + // "item.edit.item-mapper.notifications.add.success.head": "Mapping completed", "item.edit.item-mapper.notifications.add.success.head": "Térképezés befejeződött", - + // "item.edit.item-mapper.notifications.remove.error.content": "Errors occurred for the removal of the mapping to {{amount}} collections.", "item.edit.item-mapper.notifications.remove.error.content": "A {{amount}} gyűjteményekhez való térképezés eltávolításakor hiba történt.", - + // "item.edit.item-mapper.notifications.remove.error.head": "Removal of mapping errors", "item.edit.item-mapper.notifications.remove.error.head": "Térképezési hibák eltávolítása", - + // "item.edit.item-mapper.notifications.remove.success.content": "Successfully removed mapping of item to {{amount}} collections.", "item.edit.item-mapper.notifications.remove.success.content": "A {{amount}} gyűjteményhez való térképezés sikeresen eltávolítva.", - + // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", "item.edit.item-mapper.notifications.remove.success.head": "Térképezés eltávolítása befejeződött", - + + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + // TODO New key - Add a translation + "item.edit.item-mapper.search-form.placeholder": "Search collections...", + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", "item.edit.item-mapper.tabs.browse": "Böngéssze a térképezett gyűjteményeket", - + // "item.edit.item-mapper.tabs.map": "Map new collections", "item.edit.item-mapper.tabs.map": "Térképezzen új gyűjteményeket", - - - + + + // "item.edit.metadata.add-button": "Add", "item.edit.metadata.add-button": "Hozzáadás", - + // "item.edit.metadata.discard-button": "Discard", "item.edit.metadata.discard-button": "Elvetés", - + + // "item.edit.metadata.edit.buttons.confirm": "Confirm", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.confirm": "Confirm", + + // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Szerkesztés", - + // "item.edit.metadata.edit.buttons.remove": "Remove", "item.edit.metadata.edit.buttons.remove": "Eltávolítás", - + // "item.edit.metadata.edit.buttons.undo": "Undo changes", "item.edit.metadata.edit.buttons.undo": "Változtatások elvetése", - + // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Szerkesztés leállítása", - + + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", "item.edit.metadata.empty": "Az elem jelenleg nem tartalmaz metaadatot. Kattintson a Hozzáad-ra metaadatok hozzáadásához.", - + // "item.edit.metadata.headers.edit": "Edit", "item.edit.metadata.headers.edit": "Szerkesztés", - + // "item.edit.metadata.headers.field": "Field", "item.edit.metadata.headers.field": "Mező", - + // "item.edit.metadata.headers.language": "Lang", "item.edit.metadata.headers.language": "Nyelv", - + // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Érték", - + + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + // TODO New key - Add a translation + "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", "item.edit.metadata.metadatafield.invalid": "Kérjük válasszon egy érvényes metaadat mezőt", - + // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.metadata.notifications.discarded.content": "Módosításai elvetve. Visszaállításukhoz kattintson a 'Visszaállítás' gombra", - - // "item.edit.metadata.notifications.discarded.title": "Changed discarded", - "item.edit.metadata.notifications.discarded.title": "Módosítva elvetve", - + + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", + "item.edit.metadata.notifications.discarded.title": "Módosítás elvetve", + // "item.edit.metadata.notifications.error.title": "An error occurred", "item.edit.metadata.notifications.error.title": "Hiba történt", - + // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", "item.edit.metadata.notifications.invalid.content": "Módosításai nincsenek elmentve, Kérjük mentés előtt ellenőrizze, hogy valamennyi mező érvényes.", - + // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", "item.edit.metadata.notifications.invalid.title": "Érvénytelen metaadat", - + // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "item.edit.metadata.notifications.outdated.content": "A tárgyon amin dolgozik egy másik felhasználó módosításokat eszközölt. Az ön módosításait elvetettük, hogy megelőzzük a konfliktust", - - // "item.edit.metadata.notifications.outdated.title": "Changed outdated", - "item.edit.metadata.notifications.outdated.title": "Módosítva idejemúlt", - + + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", + "item.edit.metadata.notifications.outdated.title": "Módosítás idejemúlt", + // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", "item.edit.metadata.notifications.saved.content": "A tárgy metaadataiban eszközölt módosításai elmentve.", - + // "item.edit.metadata.notifications.saved.title": "Metadata saved", "item.edit.metadata.notifications.saved.title": "Metaadat elmentve", - + // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Visszaállítás", - + + // "item.edit.metadata.reset-order-button": "Undo reorder", + // TODO New key - Add a translation + "item.edit.metadata.reset-order-button": "Undo reorder", + // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Mentés", - - - + + + // "item.edit.modify.overview.field": "Field", "item.edit.modify.overview.field": "Mező", - + // "item.edit.modify.overview.language": "Language", "item.edit.modify.overview.language": "Nyelv", - + // "item.edit.modify.overview.value": "Value", "item.edit.modify.overview.value": "Érték", - - - - // "item.edit.move.cancel": "Cancel", - "item.edit.move.cancel": "Mégse", - + + + + // "item.edit.move.cancel": "Back", + "item.edit.move.cancel": "Vissza", + + // "item.edit.move.save-button": "Save", + // TODO New key - Add a translation + "item.edit.move.save-button": "Save", + + // "item.edit.move.discard-button": "Discard", + // TODO New key - Add a translation + "item.edit.move.discard-button": "Discard", + // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", "item.edit.move.description": "Válassza ki a gyűjteményt amelyhez ezt a tárgyat hozzá kívánja adni. A látható gyűjtemények listájának szűkítéséhez írjon be keresőszót a mezőbe.", - + // "item.edit.move.error": "An error occurred when attempting to move the item", "item.edit.move.error": "Tárgy mozgatásakor hiba történt", - + // "item.edit.move.head": "Move item: {{id}}", "item.edit.move.head": "Tárgy mozgatása: {{id}}", - + // "item.edit.move.inheritpolicies.checkbox": "Inherit policies", "item.edit.move.inheritpolicies.checkbox": "Szabályzatok öröklése", - + // "item.edit.move.inheritpolicies.description": "Inherit the default policies of the destination collection", "item.edit.move.inheritpolicies.description": "Örökölje a célgyűjtemény alapértelmezett szabályzatát", - + // "item.edit.move.move": "Move", "item.edit.move.move": "Mozgatás", - + // "item.edit.move.processing": "Moving...", "item.edit.move.processing": "Mozgatás...", - + // "item.edit.move.search.placeholder": "Enter a search query to look for collections", "item.edit.move.search.placeholder": "Írjon be keresőszót hogy gyűjteményeket találjon", - + // "item.edit.move.success": "The item has been moved successfully", "item.edit.move.success": "Tárgy mozgatása sikerült", - + // "item.edit.move.title": "Move item", "item.edit.move.title": "Tárgy mozgatása", - - - + + + // "item.edit.private.cancel": "Cancel", "item.edit.private.cancel": "Mégse", - - // "item.edit.private.confirm": "Make it Private", + + // "item.edit.private.confirm": "Make it non-discoverable", + // TODO Source message changed - Revise the translation "item.edit.private.confirm": "Legyen privát", - - // "item.edit.private.description": "Are you sure this item should be made private in the archive?", + + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", + // TODO Source message changed - Revise the translation "item.edit.private.description": "Biztos legyen ez a tárgy privát ebben az archívumban?", - - // "item.edit.private.error": "An error occurred while making the item private", + + // "item.edit.private.error": "An error occurred while making the item non-discoverable", + // TODO Source message changed - Revise the translation "item.edit.private.error": "A tárgy privát beállí1tása közben hiba történt", - - // "item.edit.private.header": "Make item private: {{ id }}", - "item.edit.private.header": "Legyen a tárgy privát: {{ id }}", - - // "item.edit.private.success": "The item is now private", + + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", + // TODO New key - Add a translation + "item.edit.private.header": "Make item non-discoverable: {{ id }}", + + // "item.edit.private.success": "The item is now non-discoverable", + // TODO Source message changed - Revise the translation "item.edit.private.success": "Ezx a tárgy most privát", - - - + + + // "item.edit.public.cancel": "Cancel", "item.edit.public.cancel": "Mégse", - - // "item.edit.public.confirm": "Make it Public", + + // "item.edit.public.confirm": "Make it discoverable", + // TODO Source message changed - Revise the translation "item.edit.public.confirm": "legyen nyilvános", - - // "item.edit.public.description": "Are you sure this item should be made public in the archive?", + + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", + // TODO Source message changed - Revise the translation "item.edit.public.description": "ABiztos legyen ez a tárgy nyilvános ebben az archívumban?", - - // "item.edit.public.error": "An error occurred while making the item public", + + // "item.edit.public.error": "An error occurred while making the item discoverable", + // TODO Source message changed - Revise the translation "item.edit.public.error": "Tárgy nyilvánossá tétele közben hiba történt", - - // "item.edit.public.header": "Make item public: {{ id }}", - "item.edit.public.header": "MLegyen a tárgy nyilvános: {{ id }}", - - // "item.edit.public.success": "The item is now public", + + // "item.edit.public.header": "Make item discoverable: {{ id }}", + // TODO New key - Add a translation + "item.edit.public.header": "Make item discoverable: {{ id }}", + + // "item.edit.public.success": "The item is now discoverable", + // TODO Source message changed - Revise the translation "item.edit.public.success": "A tárgy most nyilvános", - - - + + + // "item.edit.reinstate.cancel": "Cancel", "item.edit.reinstate.cancel": "Mégse", - + // "item.edit.reinstate.confirm": "Reinstate", "item.edit.reinstate.confirm": "Visszaállítás", - + // "item.edit.reinstate.description": "Are you sure this item should be reinstated to the archive?", "item.edit.reinstate.description": "Biztos vissza akarja állítani ezt a tárgyat az archívumba?", - + // "item.edit.reinstate.error": "An error occurred while reinstating the item", "item.edit.reinstate.error": "Tárgy visszaállítása közben hiba történt", - + // "item.edit.reinstate.header": "Reinstate item: {{ id }}", "item.edit.reinstate.header": "Tárgy visszaállítása: {{ id }}", - + // "item.edit.reinstate.success": "The item was reinstated successfully", "item.edit.reinstate.success": "Tárgy visszaállítása sikerült", - - - + + + // "item.edit.relationships.discard-button": "Discard", "item.edit.relationships.discard-button": "Elvetés", - + // "item.edit.relationships.edit.buttons.add": "Add", "item.edit.relationships.edit.buttons.add": "Hozzáad", - + // "item.edit.relationships.edit.buttons.remove": "Remove", "item.edit.relationships.edit.buttons.remove": "Eltávolítás", - + // "item.edit.relationships.edit.buttons.undo": "Undo changes", "item.edit.relationships.edit.buttons.undo": "Visszamódosítás", - + // "item.edit.relationships.no-relationships": "No relationships", "item.edit.relationships.no-relationships": "Nincs kapcsolat", - + // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "item.edit.relationships.notifications.discarded.content": "Módosításai elvetve. Visszaállításukhoz kattintson a 'Visszaállítás' gombra", - + // "item.edit.relationships.notifications.discarded.title": "Changes discarded", "item.edit.relationships.notifications.discarded.title": "Módosítások elvetve", - + // "item.edit.relationships.notifications.failed.title": "Error editing relationships", - // TODO Source message changed - Revise the translation - "item.edit.relationships.notifications.failed.title": "Kapcsolat törlésekor hiba történt", - + "item.edit.relationships.notifications.failed.title": "Hiba a kapcsolat szerkesztésekor", + // "item.edit.relationships.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "item.edit.relationships.notifications.outdated.content": "A tárgyon amin dolgozik egy másik felhasználó módosításokat eszközölt. Az ön módosításait elvetettük, hogy megelőzzük a konfliktust", - + // "item.edit.relationships.notifications.outdated.title": "Changes outdated", "item.edit.relationships.notifications.outdated.title": "Módosítások idejétmúltak", - + // "item.edit.relationships.notifications.saved.content": "Your changes to this item's relationships were saved.", "item.edit.relationships.notifications.saved.content": "A tárgy kapcsolataiban eszközölt módosításai elmentve.", - + // "item.edit.relationships.notifications.saved.title": "Relationships saved", "item.edit.relationships.notifications.saved.title": "Kapcsolatok elmentve", - + // "item.edit.relationships.reinstate-button": "Undo", "item.edit.relationships.reinstate-button": "Visszaállítás", - + // "item.edit.relationships.save-button": "Save", "item.edit.relationships.save-button": "Mentés", - + // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", "item.edit.relationships.no-entity-type": "Adja hozzá a 'dspace.entity.type' metaadatot ezen elem hivatkozásánek engedélyezéséhez", - - - + + + // "item.edit.return": "Back", + // TODO New key - Add a translation + "item.edit.return": "Back", + + // "item.edit.tabs.bitstreams.head": "Bitstreams", "item.edit.tabs.bitstreams.head": "Bitfolyamok", - + // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", "item.edit.tabs.bitstreams.title": "Tárgy szerkesztése - Bitfolyamok", - + // "item.edit.tabs.curate.head": "Curate", "item.edit.tabs.curate.head": "Gondozás", - + // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Tárgy szerkesztése - Gondozás", - + // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metaadat", - + // "item.edit.tabs.metadata.title": "Item Edit - Metadata", "item.edit.tabs.metadata.title": "Tárgy szerkesztése - Metaadat", - + // "item.edit.tabs.relationships.head": "Relationships", "item.edit.tabs.relationships.head": "Kapcsolatok", - + // "item.edit.tabs.relationships.title": "Item Edit - Relationships", "item.edit.tabs.relationships.title": "Tárgy szerkesztése - kapcsolatok", - + // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", "item.edit.tabs.status.buttons.authorizations.button": "Engedélyezés...", - + // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", "item.edit.tabs.status.buttons.authorizations.label": "Szerkessze a tárgy engedélyezési szabályait", - + // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", "item.edit.tabs.status.buttons.delete.button": "Véglegesen töröl", - + // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", "item.edit.tabs.status.buttons.delete.label": "Tárgy teljes kitörlése", - + // "item.edit.tabs.status.buttons.mappedCollections.button": "Mapped collections", "item.edit.tabs.status.buttons.mappedCollections.button": "Térképezett gyűjtemények", - + // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Térképezett gyűjtemények szervezése", - + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.move.button": "Elmozdítás...", - + // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", "item.edit.tabs.status.buttons.move.label": "Tárgy másik gyűjteménybe költöztetése", - - // "item.edit.tabs.status.buttons.private.button": "Make it private...", + + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.private.button": "Legyen privát...", - - // "item.edit.tabs.status.buttons.private.label": "Make item private", + + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.private.label": "Legyen a tárgy privát", - - // "item.edit.tabs.status.buttons.public.button": "Make it public...", + + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.public.button": "Legyen nyilvános...", - - // "item.edit.tabs.status.buttons.public.label": "Make item public", + + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.public.label": "Legyen a tárgy nyilvános", - + // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", "item.edit.tabs.status.buttons.reinstate.button": "Visszaállí1tás...", - + // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", "item.edit.tabs.status.buttons.reinstate.label": "Tárgy visszaállítása az adattárba", - + + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", - "item.edit.tabs.status.buttons.withdraw.button": "Vedd vissza ezt az elemet", - + // TODO Source message changed - Revise the translation + "item.edit.tabs.status.buttons.withdraw.button": "Visszavonás...", + // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Tárgy visszavonása az adattárból", - + // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", "item.edit.tabs.status.description": "Üdvözöljük a tárgyak szervezése oldalon. Itt visszavonhat, visszaállíthat, költöztethet vagy törölhet tárgyakat. Ugyanitt frissíthet metaadatokat illetve bitfolyamokat a többi fülnél, vagy újakat adhat hozzá", - + // "item.edit.tabs.status.head": "Status", "item.edit.tabs.status.head": "Állapot", - + // "item.edit.tabs.status.labels.handle": "Handle", "item.edit.tabs.status.labels.handle": "Mutató", - + // "item.edit.tabs.status.labels.id": "Item Internal ID", "item.edit.tabs.status.labels.id": "Tárgy belső azonosító", - + // "item.edit.tabs.status.labels.itemPage": "Item Page", "item.edit.tabs.status.labels.itemPage": "Tárgy oldala", - + // "item.edit.tabs.status.labels.lastModified": "Last Modified", "item.edit.tabs.status.labels.lastModified": "Utoljára módosították", - + // "item.edit.tabs.status.title": "Item Edit - Status", "item.edit.tabs.status.title": "Tárgy szerkesztése - Állapot", - + // "item.edit.tabs.versionhistory.head": "Version History", "item.edit.tabs.versionhistory.head": "Változatok története", - + // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", "item.edit.tabs.versionhistory.title": "Tárgy szerkesztése - Változatok története", - + // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", "item.edit.tabs.versionhistory.under-construction": "Változatok szerkesztése, vagy újak hozzáadása ezen a felületen még nem lehetséges.", - + // "item.edit.tabs.view.head": "View Item", "item.edit.tabs.view.head": "Tárgy megtekintése", - + // "item.edit.tabs.view.title": "Item Edit - View", "item.edit.tabs.view.title": "Tárgy szerkesztése - Megtekintés", - - - + + + // "item.edit.withdraw.cancel": "Cancel", "item.edit.withdraw.cancel": "Mégse", - + // "item.edit.withdraw.confirm": "Withdraw", "item.edit.withdraw.confirm": "Visszavonás", - + // "item.edit.withdraw.description": "Are you sure this item should be withdrawn from the archive?", "item.edit.withdraw.description": "Biztosan vissza akarja vonni ezt a tárgyat az archívumból?", - + // "item.edit.withdraw.error": "An error occurred while withdrawing the item", "item.edit.withdraw.error": "Tárgy visszavonásakor hiba történt", - + // "item.edit.withdraw.header": "Withdraw item: {{ id }}", "item.edit.withdraw.header": "Tárgy visszavonása: {{ id }}", - + // "item.edit.withdraw.success": "The item was withdrawn successfully", "item.edit.withdraw.success": "Tárgy visszavonása sikerült", - - - + + // "item.orcid.return": "Back", + // TODO New key - Add a translation + "item.orcid.return": "Back", + + // "item.listelement.badge": "Item", - "item.listelement.badge": "Elem", - + "item.listelement.badge": "Tétel", + // "item.page.description": "Description", "item.page.description": "Leírás", - - // "item.page.edit": "Edit this item", - "item.page.edit": "Elem szerkesztése", - + // "item.page.journal-issn": "Journal ISSN", "item.page.journal-issn": "Folyóirat ISSN", - + // "item.page.journal-title": "Journal Title", "item.page.journal-title": "Folyóirat címe", - + // "item.page.publisher": "Publisher", "item.page.publisher": "Kiadó", - + // "item.page.titleprefix": "Item: ", "item.page.titleprefix": "Elem: ", - + // "item.page.volume-title": "Volume Title", "item.page.volume-title": "Kötet címe", - + // "item.search.results.head": "Item Search Results", "item.search.results.head": "Elem keresésének eredménye", - - // "item.search.title": "DSpace Angular :: Item Search", + + // "item.search.title": "Item Search", + // TODO Source message changed - Revise the translation "item.search.title": "DSpace Angular :: Elem Keresése", - - - + + // "item.truncatable-part.show-more": "Show more", + // TODO New key - Add a translation + "item.truncatable-part.show-more": "Show more", + + // "item.truncatable-part.show-less": "Collapse", + // TODO New key - Add a translation + "item.truncatable-part.show-less": "Collapse", + + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + + // "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + + // "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + + // "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + // TODO New key - Add a translation + "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + + // "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + // TODO New key - Add a translation + "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + + // "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + // TODO New key - Add a translation + "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + + // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + // TODO New key - Add a translation + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + + + // "item.page.abstract": "Abstract", "item.page.abstract": "Kivonat", - + // "item.page.author": "Authors", "item.page.author": "Szerzők", - + // "item.page.citation": "Citation", "item.page.citation": "Idézések", - + // "item.page.collections": "Collections", "item.page.collections": "Gyűjtemények", - + + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "Betöltés...", + + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Továbbiak betöltése", + // "item.page.date": "Date", "item.page.date": "Dátum", - + // "item.page.edit": "Edit this item", "item.page.edit": "Elem szerkesztése", - + // "item.page.files": "Files", "item.page.files": "Állományok", - + // "item.page.filesection.description": "Description:", "item.page.filesection.description": "Leírás:", - + // "item.page.filesection.download": "Download", "item.page.filesection.download": "Letöltés", - + // "item.page.filesection.format": "Format:", "item.page.filesection.format": "Formátum:", - + // "item.page.filesection.name": "Name:", "item.page.filesection.name": "Név:", - + // "item.page.filesection.size": "Size:", "item.page.filesection.size": "Méret:", - + // "item.page.journal.search.title": "Articles in this journal", "item.page.journal.search.title": "Cikkek ebben a kiadványban", - + // "item.page.link.full": "Full item page", - "item.page.link.full": "Teljes tárgy oldala", - + "item.page.link.full": "A tétel részletes nézete", + // "item.page.link.simple": "Simple item page", - "item.page.link.simple": "Egyszerű tárgy oldala", - + "item.page.link.simple": "A tétel rövid nézete", + + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID", + + // "item.page.orcid.tooltip": "Open ORCID setting page", + // TODO New key - Add a translation + "item.page.orcid.tooltip": "Open ORCID setting page", + // "item.page.person.search.title": "Articles by this author", "item.page.person.search.title": "Cikkek ettől a szerzőtől", - + // "item.page.related-items.view-more": "Show {{ amount }} more", "item.page.related-items.view-more": "Mutasson {{ amount }} többet", - + // "item.page.related-items.view-less": "Hide last {{ amount }}", "item.page.related-items.view-less": "Rejtse el az utolsó {{ amount }}", - + // "item.page.relationships.isAuthorOfPublication": "Publications", "item.page.relationships.isAuthorOfPublication": "Publikációk", - + // "item.page.relationships.isJournalOfPublication": "Publications", "item.page.relationships.isJournalOfPublication": "Publikációk", - + // "item.page.relationships.isOrgUnitOfPerson": "Authors", "item.page.relationships.isOrgUnitOfPerson": "Szerzők", - + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", "item.page.relationships.isOrgUnitOfProject": "Kutatási projektek", - + // "item.page.subject": "Keywords", "item.page.subject": "Kulcsszavak", - + // "item.page.uri": "URI", "item.page.uri": "URI", - + // "item.page.bitstreams.view-more": "Show more", - "item.page.bitstreams.view-more": "Mutass többet", - + "item.page.bitstreams.view-more": "Tovább", + // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Bezár", - + // "item.page.filesection.original.bundle" : "Original bundle", "item.page.filesection.original.bundle" : "Eredeti csomag", - + // "item.page.filesection.license.bundle" : "License bundle", "item.page.filesection.license.bundle" : "Licenccsomag", - + + // "item.page.return": "Back", + "item.page.return": "Vissza", + + // "item.page.version.create": "Create new version", + // TODO New key - Add a translation + "item.page.version.create": "Create new version", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // TODO New key - Add a translation + "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + + // "item.page.claim.button": "Claim", + // TODO New key - Add a translation + "item.page.claim.button": "Claim", + + // "item.page.claim.tooltip": "Claim this item as profile", + // TODO New key - Add a translation + "item.page.claim.tooltip": "Claim this item as profile", + // "item.preview.dc.identifier.uri": "Identifier:", "item.preview.dc.identifier.uri": "Azonosító:", - + // "item.preview.dc.contributor.author": "Authors:", "item.preview.dc.contributor.author": "Szerzők:", - + // "item.preview.dc.date.issued": "Published date:", "item.preview.dc.date.issued": "Kiadás dátuma:", - + // "item.preview.dc.description.abstract": "Abstract:", "item.preview.dc.description.abstract": "Kivonat:", - + // "item.preview.dc.identifier.other": "Other identifier:", "item.preview.dc.identifier.other": "Más azonosító:", - + // "item.preview.dc.language.iso": "Language:", "item.preview.dc.language.iso": "Nyelv:", - + // "item.preview.dc.subject": "Subjects:", "item.preview.dc.subject": "Téma:", - + // "item.preview.dc.title": "Title:", "item.preview.dc.title": "Cím:", - + + // "item.preview.dc.type": "Type:", + // TODO New key - Add a translation + "item.preview.dc.type": "Type:", + + // "item.preview.oaire.citation.issue" : "Issue", + // TODO New key - Add a translation + "item.preview.oaire.citation.issue" : "Issue", + + // "item.preview.oaire.citation.volume" : "Volume", + // TODO New key - Add a translation + "item.preview.oaire.citation.volume" : "Volume", + + // "item.preview.dc.relation.issn" : "ISSN", + // TODO New key - Add a translation + "item.preview.dc.relation.issn" : "ISSN", + + // "item.preview.dc.identifier.isbn" : "ISBN", + // TODO New key - Add a translation + "item.preview.dc.identifier.isbn" : "ISBN", + + // "item.preview.dc.identifier": "Identifier:", + // TODO New key - Add a translation + "item.preview.dc.identifier": "Identifier:", + + // "item.preview.dc.relation.ispartof" : "Journal or Serie", + // TODO New key - Add a translation + "item.preview.dc.relation.ispartof" : "Journal or Serie", + + // "item.preview.dc.identifier.doi" : "DOI", + // TODO New key - Add a translation + "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.person.familyName": "Surname:", "item.preview.person.familyName": "Keresztnév:", - + // "item.preview.person.givenName": "Name:", "item.preview.person.givenName": "Vezetéknév:", - + // "item.preview.person.identifier.orcid": "ORCID:", "item.preview.person.identifier.orcid": "ORCID:", - - + + // "item.preview.project.funder.name": "Funder:", + // TODO New key - Add a translation + "item.preview.project.funder.name": "Funder:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + // TODO New key - Add a translation + "item.preview.project.funder.identifier": "Funder Identifier:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + // TODO New key - Add a translation + "item.preview.oaire.awardNumber": "Funding ID:", + + // "item.preview.dc.title.alternative": "Acronym:", + // TODO New key - Add a translation + "item.preview.dc.title.alternative": "Acronym:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + // TODO New key - Add a translation + "item.preview.dc.coverage.spatial": "Jurisdiction:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + // TODO New key - Add a translation + "item.preview.oaire.fundingStream": "Funding Stream:", + + + // "item.select.confirm": "Confirm selected", "item.select.confirm": "Kiválasztás igazolása", - + // "item.select.empty": "No items to show", "item.select.empty": "Nincs megtekinthető tárgy", - + // "item.select.table.author": "Author", "item.select.table.author": "Szerző", - + // "item.select.table.collection": "Collection", "item.select.table.collection": "Gyűjtemény", - + // "item.select.table.title": "Title", "item.select.table.title": "Cím", - - + + // "item.version.history.empty": "There are no other versions for this item yet.", "item.version.history.empty": "Ennek a tárgynak még nincs más változata.", - + // "item.version.history.head": "Version History", "item.version.history.head": "Változatok története", - - // "item.version.history.return": "Return", + + // "item.version.history.return": "Back", + // TODO Source message changed - Revise the translation "item.version.history.return": "Vissza", - + // "item.version.history.selected": "Selected version", "item.version.history.selected": "Kiválasztott változat", - + + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + // TODO New key - Add a translation + "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + // "item.version.history.table.version": "Version", "item.version.history.table.version": "Változat", - + // "item.version.history.table.item": "Item", "item.version.history.table.item": "Tárgy", - + // "item.version.history.table.editor": "Editor", "item.version.history.table.editor": "Kiadó", - + // "item.version.history.table.date": "Date", "item.version.history.table.date": "Dátum", - + // "item.version.history.table.summary": "Summary", "item.version.history.table.summary": "Összefoglaló", - - - + + // "item.version.history.table.workspaceItem": "Workspace item", + // TODO New key - Add a translation + "item.version.history.table.workspaceItem": "Workspace item", + + // "item.version.history.table.workflowItem": "Workflow item", + // TODO New key - Add a translation + "item.version.history.table.workflowItem": "Workflow item", + + // "item.version.history.table.actions": "Action", + // TODO New key - Add a translation + "item.version.history.table.actions": "Action", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + // TODO New key - Add a translation + "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + + // "item.version.history.table.action.editSummary": "Edit summary", + // TODO New key - Add a translation + "item.version.history.table.action.editSummary": "Edit summary", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + // TODO New key - Add a translation + "item.version.history.table.action.saveSummary": "Save summary edits", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + // TODO New key - Add a translation + "item.version.history.table.action.discardSummary": "Discard summary edits", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + // TODO New key - Add a translation + "item.version.history.table.action.newVersion": "Create new version from this one", + + // "item.version.history.table.action.deleteVersion": "Delete version", + // TODO New key - Add a translation + "item.version.history.table.action.deleteVersion": "Delete version", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + // TODO New key - Add a translation + "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + + // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", "item.version.notice": "Ez nem ennek a tárgynak a legutóbbi változata. A legutóbbi változat megtalálható itt here.", - - - + + + // "item.version.create.modal.header": "New version", + // TODO New key - Add a translation + "item.version.create.modal.header": "New version", + + // "item.version.create.modal.text": "Create a new version for this item", + // TODO New key - Add a translation + "item.version.create.modal.text": "Create a new version for this item", + + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + // TODO New key - Add a translation + "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + // TODO New key - Add a translation + "item.version.create.modal.button.confirm": "Create", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + // TODO New key - Add a translation + "item.version.create.modal.button.confirm.tooltip": "Create new version", + + // "item.version.create.modal.button.cancel": "Cancel", + // TODO New key - Add a translation + "item.version.create.modal.button.cancel": "Cancel", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + // TODO New key - Add a translation + "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + + // "item.version.create.modal.form.summary.label": "Summary", + // TODO New key - Add a translation + "item.version.create.modal.form.summary.label": "Summary", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + // TODO New key - Add a translation + "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + + // "item.version.create.modal.submitted.header": "Creating new version...", + // TODO New key - Add a translation + "item.version.create.modal.submitted.header": "Creating new version...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + // TODO New key - Add a translation + "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + + // "item.version.create.notification.success" : "New version has been created with version number {{version}}", + // TODO New key - Add a translation + "item.version.create.notification.success" : "New version has been created with version number {{version}}", + + // "item.version.create.notification.failure" : "New version has not been created", + // TODO New key - Add a translation + "item.version.create.notification.failure" : "New version has not been created", + + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // TODO New key - Add a translation + "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + + + // "item.version.delete.modal.header": "Delete version", + // TODO New key - Add a translation + "item.version.delete.modal.header": "Delete version", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + // TODO New key - Add a translation + "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + + // "item.version.delete.modal.button.confirm": "Delete", + // TODO New key - Add a translation + "item.version.delete.modal.button.confirm": "Delete", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + // TODO New key - Add a translation + "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + + // "item.version.delete.modal.button.cancel": "Cancel", + // TODO New key - Add a translation + "item.version.delete.modal.button.cancel": "Cancel", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + // TODO New key - Add a translation + "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + + // "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + // TODO New key - Add a translation + "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + + // "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + // TODO New key - Add a translation + "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + + + // "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", + // TODO New key - Add a translation + "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", + + // "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + // TODO New key - Add a translation + "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + + + + // "itemtemplate.edit.metadata.add-button": "Add", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.add-button": "Add", + + // "itemtemplate.edit.metadata.discard-button": "Discard", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.discard-button": "Discard", + + // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + + // "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + + // "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + + // "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + + // "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + + // "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + + // "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + + // "itemtemplate.edit.metadata.headers.edit": "Edit", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.edit": "Edit", + + // "itemtemplate.edit.metadata.headers.field": "Field", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.field": "Field", + + // "itemtemplate.edit.metadata.headers.language": "Lang", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.language": "Lang", + + // "itemtemplate.edit.metadata.headers.value": "Value", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.value": "Value", + + // "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + + // "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + + // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + + // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + + // "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + + // "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + + // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + + // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + + // "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + + // "itemtemplate.edit.metadata.reinstate-button": "Undo", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.reinstate-button": "Undo", + + // "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + + // "itemtemplate.edit.metadata.save-button": "Save", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.save-button": "Save", + + + // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Folyóirat", - + // "journal.page.description": "Description", "journal.page.description": "Leírás", - + // "journal.page.edit": "Edit this item", "journal.page.edit": "Elem szerkesztése", - + // "journal.page.editor": "Editor-in-Chief", "journal.page.editor": "Főszerkesztő", - + // "journal.page.issn": "ISSN", "journal.page.issn": "ISSN", - + // "journal.page.publisher": "Publisher", "journal.page.publisher": "Kiadó", - + // "journal.page.titleprefix": "Journal: ", "journal.page.titleprefix": "Folyóirat: ", - + // "journal.search.results.head": "Journal Search Results", - "journal.search.results.head": "Folyóirat keresési eredmények", - - // "journal.search.title": "DSpace Angular :: Journal Search", - "journal.search.title": "DSpace Angular :: Folyóirat keresés", - - - + "journal.search.results.head": "Folyóirat keresés eredménye", + + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Folyóirat keresés eredménye", + + // "journal.search.title": "Journal Search", + "journal.search.title": "Folyóirat keresés", + + + // "journalissue.listelement.badge": "Journal Issue", "journalissue.listelement.badge": "Folyóirat szám", - + // "journalissue.page.description": "Description", "journalissue.page.description": "Leírás", - + // "journalissue.page.edit": "Edit this item", "journalissue.page.edit": "Elem szerkesztése", - + // "journalissue.page.issuedate": "Issue Date", "journalissue.page.issuedate": "Megjelenés dátuma", - + // "journalissue.page.journal-issn": "Journal ISSN", "journalissue.page.journal-issn": "Folyóirat ISSN", - + // "journalissue.page.journal-title": "Journal Title", "journalissue.page.journal-title": "Folyóirat címe", - + // "journalissue.page.keyword": "Keywords", "journalissue.page.keyword": "Kulcsszavak", - + // "journalissue.page.number": "Number", "journalissue.page.number": "Szám", - + // "journalissue.page.titleprefix": "Journal Issue: ", "journalissue.page.titleprefix": "Folyóirat száma: ", - - - + + + // "journalvolume.listelement.badge": "Journal Volume", "journalvolume.listelement.badge": "Folyóirat kötet", - + // "journalvolume.page.description": "Description", "journalvolume.page.description": "Leírás", - + // "journalvolume.page.edit": "Edit this item", "journalvolume.page.edit": "Elem szerkesztése", - + // "journalvolume.page.issuedate": "Issue Date", "journalvolume.page.issuedate": "Megjelenés dátuma", - + // "journalvolume.page.titleprefix": "Journal Volume: ", "journalvolume.page.titleprefix": "Folyóirat kötet: ", - + // "journalvolume.page.volume": "Volume", "journalvolume.page.volume": "Kötet", - - - + + + // "iiifsearchable.listelement.badge": "Document Media", + // TODO New key - Add a translation + "iiifsearchable.listelement.badge": "Document Media", + + // "iiifsearchable.page.titleprefix": "Document: ", + // TODO New key - Add a translation + "iiifsearchable.page.titleprefix": "Document: ", + + // "iiifsearchable.page.doi": "Permanent Link: ", + // TODO New key - Add a translation + "iiifsearchable.page.doi": "Permanent Link: ", + + // "iiifsearchable.page.issue": "Issue: ", + // TODO New key - Add a translation + "iiifsearchable.page.issue": "Issue: ", + + // "iiifsearchable.page.description": "Description: ", + // TODO New key - Add a translation + "iiifsearchable.page.description": "Description: ", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + // TODO New key - Add a translation + "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + + // "iiif.listelement.badge": "Image Media", + // TODO New key - Add a translation + "iiif.listelement.badge": "Image Media", + + // "iiif.page.titleprefix": "Image: ", + // TODO New key - Add a translation + "iiif.page.titleprefix": "Image: ", + + // "iiif.page.doi": "Permanent Link: ", + // TODO New key - Add a translation + "iiif.page.doi": "Permanent Link: ", + + // "iiif.page.issue": "Issue: ", + // TODO New key - Add a translation + "iiif.page.issue": "Issue: ", + + // "iiif.page.description": "Description: ", + // TODO New key - Add a translation + "iiif.page.description": "Description: ", + + // "loading.bitstream": "Loading bitstream...", "loading.bitstream": "Bitfolyam betöltése...", - + // "loading.bitstreams": "Loading bitstreams...", "loading.bitstreams": "Bitfolyamok betöltése...", - + // "loading.browse-by": "Loading items...", "loading.browse-by": "Tárgy betöltése...", - + // "loading.browse-by-page": "Loading page...", "loading.browse-by-page": "Oldal betöltése...", - + // "loading.collection": "Loading collection...", "loading.collection": "Gyűjtemény betöltése...", - + // "loading.collections": "Loading collections...", "loading.collections": "Gyűjtemények betöltése...", - + // "loading.content-source": "Loading content source...", "loading.content-source": "tartalom forrásának betöltése...", - + // "loading.community": "Loading community...", "loading.community": "Közösség betöltése...", - + // "loading.default": "Loading...", "loading.default": "Betöltés...", - + // "loading.item": "Loading item...", "loading.item": "Tárgy betöltése...", - + // "loading.items": "Loading items...", "loading.items": "Tárgyak betöltése...", - + // "loading.mydspace-results": "Loading items...", "loading.mydspace-results": "Tárgyak betöltése...", - + // "loading.objects": "Loading...", "loading.objects": "betöltés...", - + // "loading.recent-submissions": "Loading recent submissions...", "loading.recent-submissions": "Legújabb feltöltések betöltése...", - + // "loading.search-results": "Loading search results...", "loading.search-results": "keresési eredmények betöltése...", - + // "loading.sub-collections": "Loading sub-collections...", "loading.sub-collections": "Algyűjtemények betöltése...", - + // "loading.sub-communities": "Loading sub-communities...", - "loading.sub-communities": "Alközösségek betöltése...", - + "loading.sub-communities": "Alkategóriák betöltése...", + // "loading.top-level-communities": "Loading top-level communities...", - "loading.top-level-communities": "Csúcsszintű közösségek betöltése...", - - - + "loading.top-level-communities": "Csúcsszintű kategóriák betöltése...", + + + // "login.form.email": "Email address", - "login.form.email": "Email cím", - + "login.form.email": "E-mail cím", + // "login.form.forgot-password": "Have you forgotten your password?", "login.form.forgot-password": "Elfelejtette a jelszót?", - + // "login.form.header": "Please log in to DSpace", "login.form.header": "Lépjen be a DSpace-re", - + // "login.form.new-user": "New user? Click here to register.", - "login.form.new-user": "Új felhasználó? Kattintson ide a regisztráláshoz.", - + "login.form.new-user": "Új felhasználó? Regisztráljon.", + // "login.form.or-divider": "or", "login.form.or-divider": "vagy", - + + // "login.form.oidc": "Log in with OIDC", + // TODO New key - Add a translation + "login.form.oidc": "Log in with OIDC", + + // "login.form.orcid": "Log in with ORCID", + // TODO New key - Add a translation + "login.form.orcid": "Log in with ORCID", + // "login.form.password": "Password", "login.form.password": "Jelszó", - + // "login.form.shibboleth": "Log in with Shibboleth", "login.form.shibboleth": "Lépjen be Shibboleth-el", - + // "login.form.submit": "Log in", - "login.form.submit": "Belépés", - + "login.form.submit": "Bejelentkezés", + // "login.title": "Login", - "login.title": "Belépés", - + "login.title": "Bejelentkezés", + // "login.breadcrumbs": "Login", - "login.breadcrumbs": "Belépés", - - - + "login.breadcrumbs": "Bejelentkezés", + + + // "logout.form.header": "Log out from DSpace", "logout.form.header": "Kilépés a DSpace-ből", - + // "logout.form.submit": "Log out", "logout.form.submit": "Kilépés", - + // "logout.title": "Logout", "logout.title": "Kilépés", - - - - // "menu.header.admin": "Admin", + + + + // "menu.header.admin": "Management", + // TODO Source message changed - Revise the translation "menu.header.admin": "Admin", - + // "menu.header.image.logo": "Repository logo", "menu.header.image.logo": "Adattár logo", - - - + + // "menu.header.admin.description": "Management menu", + // TODO New key - Add a translation + "menu.header.admin.description": "Management menu", + + + // "menu.section.access_control": "Access Control", "menu.section.access_control": "Hozzáférési kontroll", - + // "menu.section.access_control_authorizations": "Authorizations", "menu.section.access_control_authorizations": "Engedélyezések", - + // "menu.section.access_control_groups": "Groups", "menu.section.access_control_groups": "csoportok", - + // "menu.section.access_control_people": "People", "menu.section.access_control_people": "Emberek", - - - + + + // "menu.section.admin_search": "Admin Search", "menu.section.admin_search": "Admin keresés", - - - + + + // "menu.section.browse_community": "This Community", "menu.section.browse_community": "ez a közösség", - + // "menu.section.browse_community_by_author": "By Author", "menu.section.browse_community_by_author": "Szerző szerint", - + // "menu.section.browse_community_by_issue_date": "By Issue Date", "menu.section.browse_community_by_issue_date": "Megjelenés dátuma szerint", - + // "menu.section.browse_community_by_title": "By Title", "menu.section.browse_community_by_title": "Cím szerint", - + // "menu.section.browse_global": "All of DSpace", - "menu.section.browse_global": "A teljes DSpace", - + "menu.section.browse_global": "Böngészés", + // "menu.section.browse_global_by_author": "By Author", "menu.section.browse_global_by_author": "Szerző szerint", - + // "menu.section.browse_global_by_dateissued": "By Issue Date", "menu.section.browse_global_by_dateissued": "Megjelenés dátuma szerint", - + // "menu.section.browse_global_by_subject": "By Subject", - "menu.section.browse_global_by_subject": "Tárgy szerint", - + "menu.section.browse_global_by_subject": "Tárgyszó szerint", + // "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_by_title": "Cím szerint", - + // "menu.section.browse_global_communities_and_collections": "Communities & Collections", - "menu.section.browse_global_communities_and_collections": "Közösségek & Gyűjtemények", - - - + "menu.section.browse_global_communities_and_collections": "Kategóriák & Gyűjtemények", + + + // "menu.section.control_panel": "Control Panel", "menu.section.control_panel": "Vezérlőpult", - + // "menu.section.curation_task": "Curation Task", "menu.section.curation_task": "Gondozási feladat", - - - + + + // "menu.section.edit": "Edit", "menu.section.edit": "Szerkesztés", - + // "menu.section.edit_collection": "Collection", "menu.section.edit_collection": "Gyűjtemény", - + // "menu.section.edit_community": "Community", "menu.section.edit_community": "Közösség", - + // "menu.section.edit_item": "Item", "menu.section.edit_item": "Tárgy", - - - + + + // "menu.section.export": "Export", "menu.section.export": "Export", - + // "menu.section.export_collection": "Collection", "menu.section.export_collection": "Gyűjtemény", - + // "menu.section.export_community": "Community", "menu.section.export_community": "Közösség", - + // "menu.section.export_item": "Item", "menu.section.export_item": "Tárgy", - + // "menu.section.export_metadata": "Metadata", "menu.section.export_metadata": "Metaadat", - - - + + // "menu.section.export_batch": "Batch Export (ZIP)", + // TODO New key - Add a translation + "menu.section.export_batch": "Batch Export (ZIP)", + + // "menu.section.icon.access_control": "Access Control menu section", "menu.section.icon.access_control": "Hozzáférés kontroll menü felület", - + // "menu.section.icon.admin_search": "Admin search menu section", "menu.section.icon.admin_search": "Admin keresés menü felület", - + // "menu.section.icon.control_panel": "Control Panel menu section", "menu.section.icon.control_panel": "Vezérlőpult menü felület", - - // "menu.section.icon.curation_task": "Curation Task menu section", - "menu.section.icon.curation_task": "Gondozási feladat menü felület", - + + // "menu.section.icon.curation_tasks": "Curation Task menu section", + // TODO New key - Add a translation + "menu.section.icon.curation_tasks": "Curation Task menu section", + // "menu.section.icon.edit": "Edit menu section", "menu.section.icon.edit": "Szerkesztés menü felület", - + // "menu.section.icon.export": "Export menu section", "menu.section.icon.export": "Export menü felület", - + // "menu.section.icon.find": "Find menu section", "menu.section.icon.find": "Keresés menü felület", - + + // "menu.section.icon.health": "Health check menu section", + // TODO New key - Add a translation + "menu.section.icon.health": "Health check menu section", + // "menu.section.icon.import": "Import menu section", "menu.section.icon.import": "Import menü felület", - + // "menu.section.icon.new": "New menu section", "menu.section.icon.new": "Új menü felület", - + // "menu.section.icon.pin": "Pin sidebar", "menu.section.icon.pin": "Oldalsáv rögzítése", - - // "menu.section.icon.processes": "Processes menu section", + + // "menu.section.icon.processes": "Processes Health", + // TODO Source message changed - Revise the translation "menu.section.icon.processes": "Menü felület feldolgozása", - + // "menu.section.icon.registries": "Registries menu section", "menu.section.icon.registries": "Leíró adatbázis menü felület", - + // "menu.section.icon.statistics_task": "Statistics Task menu section", "menu.section.icon.statistics_task": "Statisztikai feladatok menü felület", - + + // "menu.section.icon.workflow": "Administer workflow menu section", + // TODO New key - Add a translation + "menu.section.icon.workflow": "Administer workflow menu section", + // "menu.section.icon.unpin": "Unpin sidebar", "menu.section.icon.unpin": "Oldalbár rögzítés megszüntetése", - - - + + + // "menu.section.import": "Import", "menu.section.import": "Import", - + // "menu.section.import_batch": "Batch Import (ZIP)", "menu.section.import_batch": "Csomag Import (ZIP)", - + // "menu.section.import_metadata": "Metadata", "menu.section.import_metadata": "Metaadat", - - - + + + // "menu.section.new": "New", "menu.section.new": "Új", - + // "menu.section.new_collection": "Collection", "menu.section.new_collection": "Gyűjtemény", - + // "menu.section.new_community": "Community", "menu.section.new_community": "Közösség", - + // "menu.section.new_item": "Item", "menu.section.new_item": "Tárgy", - + // "menu.section.new_item_version": "Item Version", "menu.section.new_item_version": "Tárgy változat", - + // "menu.section.new_process": "Process", "menu.section.new_process": "Folyamat", - - - + + + // "menu.section.pin": "Pin sidebar", "menu.section.pin": "Oldalsáv rögzítése", - + // "menu.section.unpin": "Unpin sidebar", "menu.section.unpin": "Oldalsáv rögzítés megszüntetése", - - - + + + // "menu.section.processes": "Processes", "menu.section.processes": "Folyamatok", - - - + + // "menu.section.health": "Health", + // TODO New key - Add a translation + "menu.section.health": "Health", + + + // "menu.section.registries": "Registries", "menu.section.registries": "Leíró adatbázisok", - + // "menu.section.registries_format": "Format", "menu.section.registries_format": "Formátum", - + // "menu.section.registries_metadata": "Metadata", "menu.section.registries_metadata": "Metaadat", - - - + + + // "menu.section.statistics": "Statistics", "menu.section.statistics": "Statisztikák", - + // "menu.section.statistics_task": "Statistics Task", "menu.section.statistics_task": "Statisztikai feladatok", - - - + + + // "menu.section.toggle.access_control": "Toggle Access Control section", "menu.section.toggle.access_control": "Váltás a Hozzáférés kontrol felületre", - + // "menu.section.toggle.control_panel": "Toggle Control Panel section", "menu.section.toggle.control_panel": "Váltás a Vezérlőpult felületre", - + // "menu.section.toggle.curation_task": "Toggle Curation Task section", "menu.section.toggle.curation_task": "Gondozási feladat felületre váltás", - + // "menu.section.toggle.edit": "Toggle Edit section", "menu.section.toggle.edit": "Szerkesztés felületre váltás", - + // "menu.section.toggle.export": "Toggle Export section", "menu.section.toggle.export": "Export felületre váltás", - + // "menu.section.toggle.find": "Toggle Find section", "menu.section.toggle.find": "Kereső felületre váltás", - + // "menu.section.toggle.import": "Toggle Import section", "menu.section.toggle.import": "Import felületre váltás", - + // "menu.section.toggle.new": "Toggle New section", "menu.section.toggle.new": "Új felületre váltás", - + // "menu.section.toggle.registries": "Toggle Registries section", "menu.section.toggle.registries": "Leíró adatbázisok felületre váltás", - + // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", "menu.section.toggle.statistics_task": "Statisztikai feladatok felületre váltás", - - + + // "menu.section.workflow": "Administer Workflow", "menu.section.workflow": "Munkafolyamat irányítása", - - + + + // "metadata-export-search.tooltip": "Export search results as CSV", + // TODO New key - Add a translation + "metadata-export-search.tooltip": "Export search results as CSV", + // "metadata-export-search.submit.success": "The export was started successfully", + // TODO New key - Add a translation + "metadata-export-search.submit.success": "The export was started successfully", + // "metadata-export-search.submit.error": "Starting the export has failed", + // TODO New key - Add a translation + "metadata-export-search.submit.error": "Starting the export has failed", + + + // "mydspace.breadcrumbs": "MyDSpace", + // TODO New key - Add a translation + "mydspace.breadcrumbs": "MyDSpace", + // "mydspace.description": "", "mydspace.description": "", - - // "mydspace.general.text-here": "here", - "mydspace.general.text-here": "itt", - + // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", "mydspace.messages.controller-help": "Válassza ezt, hogy üzenjen a tárgy feltöltőjének.", - + // "mydspace.messages.description-placeholder": "Insert your message here...", "mydspace.messages.description-placeholder": "Írja ide az üzenetét...", - + // "mydspace.messages.hide-msg": "Hide message", "mydspace.messages.hide-msg": "Rejtse el az üzenetet", - + // "mydspace.messages.mark-as-read": "Mark as read", "mydspace.messages.mark-as-read": "Jelölje meg elolvasottként", - + // "mydspace.messages.mark-as-unread": "Mark as unread", "mydspace.messages.mark-as-unread": "Jelölje meg el nem olvasottként", - + // "mydspace.messages.no-content": "No content.", "mydspace.messages.no-content": "Nincs tartalom.", - + // "mydspace.messages.no-messages": "No messages yet.", "mydspace.messages.no-messages": "Még nincs üzenet.", - + // "mydspace.messages.send-btn": "Send", "mydspace.messages.send-btn": "Elküld", - + // "mydspace.messages.show-msg": "Show message", "mydspace.messages.show-msg": "Üzenetet megjelenít", - + // "mydspace.messages.subject-placeholder": "Subject...", "mydspace.messages.subject-placeholder": "Tárgy...", - + // "mydspace.messages.submitter-help": "Select this option to send a message to controller.", "mydspace.messages.submitter-help": "Válassza ezt, hogy üzenjen a kontrollernek.", - + // "mydspace.messages.title": "Messages", "mydspace.messages.title": "Üzenetek", - + // "mydspace.messages.to": "To", "mydspace.messages.to": "Címzett", - + // "mydspace.new-submission": "New submission", "mydspace.new-submission": "Új feltöltés", - + // "mydspace.new-submission-external": "Import metadata from external source", "mydspace.new-submission-external": "Metaadat importálása külső forrásból", - + // "mydspace.new-submission-external-short": "Import metadata", "mydspace.new-submission-external-short": "Metaadat importálása", - + // "mydspace.results.head": "Your submissions", "mydspace.results.head": "Az ön feltöltései", - + // "mydspace.results.no-abstract": "No Abstract", "mydspace.results.no-abstract": "Nincs kivonat", - + // "mydspace.results.no-authors": "No Authors", "mydspace.results.no-authors": "Nincsenek szerzők", - + // "mydspace.results.no-collections": "No Collections", "mydspace.results.no-collections": "Nincs gyűjtemény", - + // "mydspace.results.no-date": "No Date", "mydspace.results.no-date": "Nincs dátum", - + // "mydspace.results.no-files": "No Files", "mydspace.results.no-files": "Nincs állomány", - + // "mydspace.results.no-results": "There were no items to show", "mydspace.results.no-results": "Nincs megjeleníthető tárgy", - + // "mydspace.results.no-title": "No title", "mydspace.results.no-title": "Nincs cím", - + // "mydspace.results.no-uri": "No Uri", "mydspace.results.no-uri": "Nincs Uri", - - // "mydspace.show.workflow": "All tasks", + + // "mydspace.search-form.placeholder": "Search in mydspace...", + // TODO New key - Add a translation + "mydspace.search-form.placeholder": "Search in mydspace...", + + // "mydspace.show.workflow": "Workflow tasks", + // TODO Source message changed - Revise the translation "mydspace.show.workflow": "Valamennyi feladat", - + // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Az ön feltöltései", - + + // "mydspace.show.supervisedWorkspace": "Supervised items", + // TODO New key - Add a translation + "mydspace.show.supervisedWorkspace": "Supervised items", + // "mydspace.status.archived": "Archived", "mydspace.status.archived": "Tárolva", - + // "mydspace.status.validation": "Validation", "mydspace.status.validation": "Érvényesítés", - + // "mydspace.status.waiting-for-controller": "Waiting for controller", "mydspace.status.waiting-for-controller": "Várakozás a kontrollerre", - + // "mydspace.status.workflow": "Workflow", "mydspace.status.workflow": "Munkafolyamat", - + // "mydspace.status.workspace": "Workspace", "mydspace.status.workspace": "Munkafelület", - + // "mydspace.title": "MyDSpace", "mydspace.title": "MyDSpace", - + // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", "mydspace.upload.upload-failed": "Új munkafelület létrehozásakor hiba történt. Kérjük ellenőrizze a tartalmat mielőtt újra próbálkozna.", - + // "mydspace.upload.upload-failed-manyentries": "Unprocessable file. Detected too many entries but allowed only one for file.", "mydspace.upload.upload-failed-manyentries": "Feldolgozhatalan fájl. Több elem észlelve, de fájlonként csak egy engedélyezve.", - + // "mydspace.upload.upload-failed-moreonefile": "Unprocessable request. Only one file is allowed.", "mydspace.upload.upload-failed-moreonefile": "Feldolgozhatalan kérés. Csak egy fájl van engedélyezve.", - + // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", "mydspace.upload.upload-multiple-successful": "{{qty}} Új munkafelület tárgyak létrehozva.", - - // "mydspace.upload.upload-successful": "New workspace item created. Click {{here}} for edit it.", - "mydspace.upload.upload-successful": "Új munkafelület tárgy létrehozva. Kattintson {{here}} hogy szerkessze.", - + // "mydspace.view-btn": "View", "mydspace.view-btn": "Megtekintés", - - - + + + // "nav.browse.header": "All of DSpace", - "nav.browse.header": "A teljes DSpace", - + "nav.browse.header": "Böngészés", + // "nav.community-browse.header": "By Community", "nav.community-browse.header": "Közösség szerint", - + + // "nav.context-help-toggle": "Toggle context help", + // TODO New key - Add a translation + "nav.context-help-toggle": "Toggle context help", + // "nav.language": "Language switch", "nav.language": "Nyelvváltás", - + // "nav.login": "Log In", - "nav.login": "Belépés", - + "nav.login": "Bejelentkezés", + + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + // TODO New key - Add a translation + "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + // "nav.logout": "Log Out", "nav.logout": "Kilépés", - + + // "nav.main.description": "Main navigation bar", + // TODO New key - Add a translation + "nav.main.description": "Main navigation bar", + // "nav.mydspace": "MyDSpace", "nav.mydspace": "MyDSpace", - + // "nav.profile": "Profile", "nav.profile": "Profil", - + // "nav.search": "Search", "nav.search": "Keresés", - + // "nav.statistics.header": "Statistics", "nav.statistics.header": "Statisztika", - + // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "EPerson megszemélyesítésének leállítása", - - - + + // "nav.subscriptions" : "Subscriptions", + // TODO New key - Add a translation + "nav.subscriptions" : "Subscriptions", + + // "nav.toggle" : "Toggle navigation", + // TODO New key - Add a translation + "nav.toggle" : "Toggle navigation", + + // "nav.user.description" : "User profile bar", + // TODO New key - Add a translation + "nav.user.description" : "User profile bar", + + // "none.listelement.badge": "Item", + // TODO New key - Add a translation + "none.listelement.badge": "Item", + + // "orgunit.listelement.badge": "Organizational Unit", "orgunit.listelement.badge": "Szervezeti egység", - + + // "orgunit.listelement.no-title": "Untitled", + // TODO New key - Add a translation + "orgunit.listelement.no-title": "Untitled", + // "orgunit.page.city": "City", "orgunit.page.city": "Város", - + // "orgunit.page.country": "Country", "orgunit.page.country": "Ország", - + // "orgunit.page.dateestablished": "Date established", "orgunit.page.dateestablished": "Alapítási dátum", - + // "orgunit.page.description": "Description", "orgunit.page.description": "Leírás", - + // "orgunit.page.edit": "Edit this item", "orgunit.page.edit": "Elem szerkesztése", - + // "orgunit.page.id": "ID", "orgunit.page.id": "Azonosító", - + // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Szervezeti egység: ", - - - + + + + // "pagination.options.description": "Pagination options", + // TODO New key - Add a translation + "pagination.options.description": "Pagination options", + // "pagination.results-per-page": "Results Per Page", - "pagination.results-per-page": "Eredmények oldalanként", - + "pagination.results-per-page": "Találatok oldalanként", + // "pagination.showing.detail": "{{ range }} of {{ total }}", "pagination.showing.detail": "{{ range }} ennyiből {{ total }}", - + // "pagination.showing.label": "Now showing ", "pagination.showing.label": "Jelenleg látható ", - + // "pagination.sort-direction": "Sort Options", "pagination.sort-direction": "Rendszerezési lehetőségek", - - - + + + // "person.listelement.badge": "Person", "person.listelement.badge": "Személy", - + // "person.listelement.no-title": "No name found", "person.listelement.no-title": "A névre nincs találat", - + // "person.page.birthdate": "Birth Date", "person.page.birthdate": "Születés dátuma", - + // "person.page.edit": "Edit this item", "person.page.edit": "Elem szerkesztése", - + // "person.page.email": "Email Address", - "person.page.email": "Email cím", - + "person.page.email": "E-mail cím", + // "person.page.firstname": "First Name", "person.page.firstname": "Keresztnév", - + // "person.page.jobtitle": "Job Title", "person.page.jobtitle": "Munkakör", - + // "person.page.lastname": "Last Name", "person.page.lastname": "Családnév", - + + // "person.page.name": "Name", + // TODO New key - Add a translation + "person.page.name": "Name", + // "person.page.link.full": "Show all metadata", "person.page.link.full": "valamennyi metaadat megjelenítése", - + // "person.page.orcid": "ORCID", "person.page.orcid": "ORCID", - + // "person.page.staffid": "Staff ID", "person.page.staffid": "Személyzeti azonosító", - + // "person.page.titleprefix": "Person: ", "person.page.titleprefix": "Személy: ", - + // "person.search.results.head": "Person Search Results", "person.search.results.head": "Személy keresési eredmények", - - // "person.search.title": "DSpace Angular :: Person Search", + + // "person-relationships.search.results.head": "Person Search Results", + "person-relationships.search.results.head": "Személy keresési eredménye", + + // "person.search.title": "Person Search", + // TODO Source message changed - Revise the translation "person.search.title": "DSpace Angular :: Személy keresése", - - - + + + // "process.new.select-parameters": "Parameters", "process.new.select-parameters": "Paraméterek", - + // "process.new.cancel": "Cancel", "process.new.cancel": "Mégsem", - - // "process.new.submit": "Submit", + + // "process.new.submit": "Save", + // TODO Source message changed - Revise the translation "process.new.submit": "Beküld", - + // "process.new.select-script": "Script", "process.new.select-script": "Szkript", - + // "process.new.select-script.placeholder": "Choose a script...", "process.new.select-script.placeholder": "Szkript kiválasztása...", - + // "process.new.select-script.required": "Script is required", "process.new.select-script.required": "Szkript szükséges", - + // "process.new.parameter.file.upload-button": "Select file...", "process.new.parameter.file.upload-button": "Fájl kiválasztása...", - + // "process.new.parameter.file.required": "Please select a file", "process.new.parameter.file.required": "Kérem válasszon egy fájlt", - + // "process.new.parameter.string.required": "Parameter value is required", "process.new.parameter.string.required": "Szüséges egy paraméter érték", - + // "process.new.parameter.type.value": "value", "process.new.parameter.type.value": "érték", - + // "process.new.parameter.type.file": "file", "process.new.parameter.type.file": "fájl", - + // "process.new.parameter.required.missing": "The following parameters are required but still missing:", "process.new.parameter.required.missing": "A következő paraméter szükséges:", - + // "process.new.notification.success.title": "Success", "process.new.notification.success.title": "Sikerült", - + // "process.new.notification.success.content": "The process was successfully created", "process.new.notification.success.content": "A folyamat sikeresen létrehozva", - + // "process.new.notification.error.title": "Error", "process.new.notification.error.title": "Hiba", - + // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Hiba történt a folyamat létrehozásakor", - + // "process.new.header": "Create a new process", "process.new.header": "Új folyamat létrehozása", - + // "process.new.title": "Create a new process", "process.new.title": "Új folyamat létrehozása", - + // "process.new.breadcrumbs": "Create a new process", "process.new.breadcrumbs": "Új folyamat létrehozása", - - - + + + // "process.detail.arguments" : "Arguments", "process.detail.arguments" : "Érvek", - + // "process.detail.arguments.empty" : "This process doesn't contain any arguments", "process.detail.arguments.empty" : "Ez a folyamat nem tartalmaz érveket", - + // "process.detail.back" : "Back", "process.detail.back" : "Vissza", - + // "process.detail.output" : "Process Output", "process.detail.output" : "Folyamat eredménye", - + // "process.detail.logs.button": "Retrieve process output", "process.detail.logs.button": "Folyamatkimenet lekérése", - + // "process.detail.logs.loading": "Retrieving", "process.detail.logs.loading": "Lekérés", - + // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Ennek a folyamatnak nincs kimenete", - + // "process.detail.output-files" : "Output Files", "process.detail.output-files" : "Kimeneti fájlok", - + // "process.detail.output-files.empty" : "This process doesn't contain any output files", "process.detail.output-files.empty" : "Ennek a folyamatnak nincsenek kimeneti fájljai", - + // "process.detail.script" : "Script", "process.detail.script" : "Szkript", - + // "process.detail.title" : "Process: {{ id }} - {{ name }}", "process.detail.title" : "Folyamat: {{ id }} - {{ name }}", - + // "process.detail.start-time" : "Start time", "process.detail.start-time" : "Kezdési idő", - + // "process.detail.end-time" : "Finish time", "process.detail.end-time" : "Végzési idő", - + // "process.detail.status" : "Status", "process.detail.status" : "Állapot", - + // "process.detail.create" : "Create similar process", "process.detail.create" : "Hasonló folyamat létrehozása", - - - - // "process.overview.table.finish" : "Finish time", + + // "process.detail.actions": "Actions", + // TODO New key - Add a translation + "process.detail.actions": "Actions", + + // "process.detail.delete.button": "Delete process", + // TODO New key - Add a translation + "process.detail.delete.button": "Delete process", + + // "process.detail.delete.header": "Delete process", + // TODO New key - Add a translation + "process.detail.delete.header": "Delete process", + + // "process.detail.delete.body": "Are you sure you want to delete the current process?", + // TODO New key - Add a translation + "process.detail.delete.body": "Are you sure you want to delete the current process?", + + // "process.detail.delete.cancel": "Cancel", + // TODO New key - Add a translation + "process.detail.delete.cancel": "Cancel", + + // "process.detail.delete.confirm": "Delete process", + // TODO New key - Add a translation + "process.detail.delete.confirm": "Delete process", + + // "process.detail.delete.success": "The process was successfully deleted.", + // TODO New key - Add a translation + "process.detail.delete.success": "The process was successfully deleted.", + + // "process.detail.delete.error": "Something went wrong when deleting the process", + // TODO New key - Add a translation + "process.detail.delete.error": "Something went wrong when deleting the process", + + + + // "process.overview.table.finish" : "Finish time (UTC)", + // TODO Source message changed - Revise the translation "process.overview.table.finish" : "Végzési idő", - + // "process.overview.table.id" : "Process ID", "process.overview.table.id" : "Folyamat ID", - + // "process.overview.table.name" : "Name", "process.overview.table.name" : "Név", - - // "process.overview.table.start" : "Start time", + + // "process.overview.table.start" : "Start time (UTC)", + // TODO Source message changed - Revise the translation "process.overview.table.start" : "Kezdési idő", - + // "process.overview.table.status" : "Status", "process.overview.table.status" : "Állapot", - + // "process.overview.table.user" : "User", "process.overview.table.user" : "Felhasználó", - + // "process.overview.title": "Processes Overview", "process.overview.title": "Folyaamt áttekintő", - + // "process.overview.breadcrumbs": "Processes Overview", "process.overview.breadcrumbs": "Folyamat áttekintő", - + // "process.overview.new": "New", "process.overview.new": "Új", - - + + // "process.overview.table.actions": "Actions", + // TODO New key - Add a translation + "process.overview.table.actions": "Actions", + + // "process.overview.delete": "Delete {{count}} processes", + // TODO New key - Add a translation + "process.overview.delete": "Delete {{count}} processes", + + // "process.overview.delete.clear": "Clear delete selection", + // TODO New key - Add a translation + "process.overview.delete.clear": "Clear delete selection", + + // "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + // TODO New key - Add a translation + "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + + // "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + // TODO New key - Add a translation + "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + + // "process.overview.delete.header": "Delete processes", + // TODO New key - Add a translation + "process.overview.delete.header": "Delete processes", + + // "process.bulk.delete.error.head": "Error on deleteing process", + // TODO New key - Add a translation + "process.bulk.delete.error.head": "Error on deleteing process", + + // "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + // TODO New key - Add a translation + "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + + // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + // TODO New key - Add a translation + "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + + + // "profile.breadcrumbs": "Update Profile", "profile.breadcrumbs": "Profil frissítése", - + // "profile.card.identify": "Identify", "profile.card.identify": "Azonosít", - + // "profile.card.security": "Security", "profile.card.security": "Biztonság", - - // "profile.form.submit": "Update Profile", + + // "profile.form.submit": "Save", + // TODO Source message changed - Revise the translation "profile.form.submit": "Profil frissítése", - + // "profile.groups.head": "Authorization groups you belong to", "profile.groups.head": "Felhatalmazási csoportok amelyekhez ön tartozik", - + + // "profile.special.groups.head": "Authorization special groups you belong to", + // TODO New key - Add a translation + "profile.special.groups.head": "Authorization special groups you belong to", + // "profile.head": "Update Profile", "profile.head": "Profil frissítése", - + // "profile.metadata.form.error.firstname.required": "First Name is required", "profile.metadata.form.error.firstname.required": "Keresztnév kötelező", - + // "profile.metadata.form.error.lastname.required": "Last Name is required", "profile.metadata.form.error.lastname.required": "Családnév kötelező", - + // "profile.metadata.form.label.email": "Email Address", - "profile.metadata.form.label.email": "Email cím", - + "profile.metadata.form.label.email": "E-mail cím", + // "profile.metadata.form.label.firstname": "First Name", "profile.metadata.form.label.firstname": "Keresztnév", - + // "profile.metadata.form.label.language": "Language", "profile.metadata.form.label.language": "Nyelv", - + // "profile.metadata.form.label.lastname": "Last Name", "profile.metadata.form.label.lastname": "Családnév", - + // "profile.metadata.form.label.phone": "Contact Telephone", "profile.metadata.form.label.phone": "Telefonos elérhetőség", - + // "profile.metadata.form.notifications.success.content": "Your changes to the profile were saved.", "profile.metadata.form.notifications.success.content": "Profilmódosítások elmentve.", - + // "profile.metadata.form.notifications.success.title": "Profile saved", "profile.metadata.form.notifications.success.title": "Profil elmentve", - + // "profile.notifications.warning.no-changes.content": "No changes were made to the Profile.", "profile.notifications.warning.no-changes.content": "Profil nem módosult.", - + // "profile.notifications.warning.no-changes.title": "No changes", "profile.notifications.warning.no-changes.title": "Nincs változtatás", - + // "profile.security.form.error.matching-passwords": "The passwords do not match.", "profile.security.form.error.matching-passwords": "A jelszavak nem találnak.", - - // "profile.security.form.error.password-length": "The password should be at least 6 characters long.", - "profile.security.form.error.password-length": "A jelszó legalább 6 karakter hosszú kell, hogy legyen", - - // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", + // TODO Source message changed - Revise the translation "profile.security.form.info": "Opcionálisan beírhatja jelszavát az alsó mezőbe majd igazolhatja azt, beírva a második mezőbe. Legalább hat karakter hosszú kell, hogy legyen.", - + // "profile.security.form.label.password": "Password", "profile.security.form.label.password": "Jelszó", - + // "profile.security.form.label.passwordrepeat": "Retype to confirm", "profile.security.form.label.passwordrepeat": "Írja be újra a jelszót", - + + // "profile.security.form.label.current-password": "Current password", + // TODO New key - Add a translation + "profile.security.form.label.current-password": "Current password", + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", "profile.security.form.notifications.success.content": "Jelszó módosítása elmentve.", - + // "profile.security.form.notifications.success.title": "Password saved", "profile.security.form.notifications.success.title": "Jelszó elmentve", - + // "profile.security.form.notifications.error.title": "Error changing passwords", "profile.security.form.notifications.error.title": "Jelszó megváltoztatásakor hiba történt", - - // "profile.security.form.notifications.error.not-long-enough": "The password has to be at least 6 characters long.", - "profile.security.form.notifications.error.not-long-enough": "A jelszó legalább 8 karakter kell, hogy legyen.", - + + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + // TODO New key - Add a translation + "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", "profile.security.form.notifications.error.not-same": "A megadott jelszavak nem azonosak.", - + + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + // TODO New key - Add a translation + "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + // "profile.title": "Update Profile", "profile.title": "Profil frissítése", - - - + + // "profile.card.researcher": "Researcher Profile", + // TODO New key - Add a translation + "profile.card.researcher": "Researcher Profile", + // "project.listelement.badge": "Research Project", "project.listelement.badge": "Kutatási projekt", - + // "project.page.contributor": "Contributors", "project.page.contributor": "Közreműködők", - + // "project.page.description": "Description", "project.page.description": "Leírás", - + // "project.page.edit": "Edit this item", "project.page.edit": "Elem szerkesztése", - + // "project.page.expectedcompletion": "Expected Completion", "project.page.expectedcompletion": "Várható befejezés", - + // "project.page.funder": "Funders", "project.page.funder": "Támogatók", - + // "project.page.id": "ID", "project.page.id": "Azonosító", - + // "project.page.keyword": "Keywords", "project.page.keyword": "Kulcsszavak", - + // "project.page.status": "Status", "project.page.status": "Állapot", - + // "project.page.titleprefix": "Research Project: ", "project.page.titleprefix": "Kutatási projekt: ", - + // "project.search.results.head": "Project Search Results", - "project.search.results.head": "Projekt keresési eredmények", - - - + "project.search.results.head": "Projekt keresési eredménye", + + // "project-relationships.search.results.head": "Project Search Results", + "project-relationships.search.results.head": "Projekt keresési eredménye", + + + // "publication.listelement.badge": "Publication", "publication.listelement.badge": "Publikáció", - + // "publication.page.description": "Description", "publication.page.description": "Leírás", - + // "publication.page.edit": "Edit this item", "publication.page.edit": "Elem szerkesztése", - + // "publication.page.journal-issn": "Journal ISSN", "publication.page.journal-issn": "Folyóirat ISSN", - + // "publication.page.journal-title": "Journal Title", "publication.page.journal-title": "Folyóirat címe", - + // "publication.page.publisher": "Publisher", "publication.page.publisher": "Kiadó", - + // "publication.page.titleprefix": "Publication: ", "publication.page.titleprefix": "Publikáció: ", - + // "publication.page.volume-title": "Volume Title", "publication.page.volume-title": "Kötet címe", - + // "publication.search.results.head": "Publication Search Results", - "publication.search.results.head": "Publikáció keresési eredmények", - - // "publication.search.title": "DSpace Angular :: Publication Search", + "publication.search.results.head": "Publikáció keresés eredménye", + + // "publication-relationships.search.results.head": "Publication Search Results", + "publication-relationships.search.results.head": "Publikáció keresés eredménye", + + // "publication.search.title": "Publication Search", + // TODO Source message changed - Revise the translation "publication.search.title": "DSpace Angular :: Publikáció keresése", - - + + + // "media-viewer.next": "Next", + // TODO New key - Add a translation + "media-viewer.next": "Next", + + // "media-viewer.previous": "Previous", + // TODO New key - Add a translation + "media-viewer.previous": "Previous", + + // "media-viewer.playlist": "Playlist", + // TODO New key - Add a translation + "media-viewer.playlist": "Playlist", + + // "register-email.title": "New user registration", "register-email.title": "Új felhasználó regisztrálása", - + // "register-page.create-profile.header": "Create Profile", "register-page.create-profile.header": "Profil létrehozása", - + // "register-page.create-profile.identification.header": "Identify", "register-page.create-profile.identification.header": "Azonosítás", - + // "register-page.create-profile.identification.email": "Email Address", "register-page.create-profile.identification.email": "E-mail cím", - + // "register-page.create-profile.identification.first-name": "First Name *", "register-page.create-profile.identification.first-name": "Keresztnév *", - + // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", "register-page.create-profile.identification.first-name.error": "Írja be a keresztnevet", - + // "register-page.create-profile.identification.last-name": "Last Name *", "register-page.create-profile.identification.last-name": "Családnév *", - + // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", "register-page.create-profile.identification.last-name.error": "Írja be a családnevet", - + // "register-page.create-profile.identification.contact": "Contact Telephone", "register-page.create-profile.identification.contact": "Telefonszám", - + // "register-page.create-profile.identification.language": "Language", "register-page.create-profile.identification.language": "Nyelv", - + // "register-page.create-profile.security.header": "Security", "register-page.create-profile.security.header": "Biztonság", - - // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box. It should be at least six characters long.", + + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", + // TODO Source message changed - Revise the translation "register-page.create-profile.security.info": "Írjon be egy jelszót a lenti mezőbe, és írja be újra az alatta levőbe. Legalább hat karakter hosszú kell legyen.", - + // "register-page.create-profile.security.label.password": "Password *", "register-page.create-profile.security.label.password": "Jelszó *", - + // "register-page.create-profile.security.label.passwordrepeat": "Retype to confirm *", "register-page.create-profile.security.label.passwordrepeat": "Jelszó visszaigazolása *", - + // "register-page.create-profile.security.error.empty-password": "Please enter a password in the box below.", "register-page.create-profile.security.error.empty-password": "Írja be a jelszót a lenti mezőbe.", - + // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", "register-page.create-profile.security.error.matching-passwords": "A jelszavak nem egyeznek.", - - // "register-page.create-profile.security.error.password-length": "The password should be at least 6 characters long.", - "register-page.create-profile.security.error.password-length": "A jelszó legalább 6 karakter hosszú kell legyen.", - + // "register-page.create-profile.submit": "Complete Registration", "register-page.create-profile.submit": "Regisztráció befejezése", - + // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", "register-page.create-profile.submit.error.content": "Hiba történt a regisztrációs folyamat során.", - + // "register-page.create-profile.submit.error.head": "Registration failed", "register-page.create-profile.submit.error.head": "Hibás regisztráció", - + // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", "register-page.create-profile.submit.success.content": "Sikeres regisztráció. Beléphet a létrehozott felhasználóval.", - + // "register-page.create-profile.submit.success.head": "Registration completed", "register-page.create-profile.submit.success.head": "Sikeres regisztráció", - - + + // "register-page.registration.header": "New user registration", "register-page.registration.header": "Új felhasználó regisztrálása", - + // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", "register-page.registration.info": "Hozzon létre egy felhasználót, hogy feliratkozhasson gyűjtemények e-mail értesítésére, és új elemeket tölthessen fel a DSpace-be.", - + // "register-page.registration.email": "Email Address *", "register-page.registration.email": "E-mail cím *", - + // "register-page.registration.email.error.required": "Please fill in an email address", "register-page.registration.email.error.required": "Töltse ki az e-mail címet", - - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Írjon be egy érvényes e-mail címet", - + + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + // TODO New key - Add a translation + "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + + // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + // TODO New key - Add a translation + "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Az e-mail cím ellenőrizve lesz és evvel tud belépni a rendszerbe.", - + // "register-page.registration.submit": "Register", "register-page.registration.submit": "Regisztráció", - + // "register-page.registration.success.head": "Verification email sent", "register-page.registration.success.head": "Ellenőrző e-mail elküldve", - + // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", "register-page.registration.success.content": "Egy e-mail elküldve a(z) {{ email }} címre, tartalmaz egy speciális címet a további utasításokhoz.", - + // "register-page.registration.error.head": "Error when trying to register email", "register-page.registration.error.head": "Hiba történt az e-mail cím regisztrációjakor", - + // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", "register-page.registration.error.content": "Hiba történt a következő e-mail cím regisztrációjakor: {{ email }}", - - - + + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + // TODO New key - Add a translation + "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + + // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + // TODO New key - Add a translation + "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + + + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + + // "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + + // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + // TODO New key - Add a translation + "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", // TODO New key - Add a translation "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", - + // "relationships.add.error.server.content": "The server returned an error", // TODO New key - Add a translation "relationships.add.error.server.content": "The server returned an error", - + // "relationships.add.error.title": "Unable to add relationship", // TODO New key - Add a translation "relationships.add.error.title": "Unable to add relationship", - + // "relationships.isAuthorOf": "Authors", "relationships.isAuthorOf": "Szerzők", - + // "relationships.isAuthorOf.Person": "Authors (persons)", "relationships.isAuthorOf.Person": "Szerzők (személye)", - + // "relationships.isAuthorOf.OrgUnit": "Authors (organizational units)", "relationships.isAuthorOf.OrgUnit": "Szerzők (szervezeti egységek)", - + // "relationships.isIssueOf": "Journal Issues", "relationships.isIssueOf": "Folyóirat számok", - + // "relationships.isJournalIssueOf": "Journal Issue", "relationships.isJournalIssueOf": "Folyóirat szám", - + // "relationships.isJournalOf": "Journals", "relationships.isJournalOf": "Folyóiratok", - + // "relationships.isOrgUnitOf": "Organizational Units", "relationships.isOrgUnitOf": "Szervezeti egységek", - + // "relationships.isPersonOf": "Authors", "relationships.isPersonOf": "Szerzők", - + // "relationships.isProjectOf": "Research Projects", "relationships.isProjectOf": "Kutatási projektek", - + // "relationships.isPublicationOf": "Publications", "relationships.isPublicationOf": "Publikációk", - + // "relationships.isPublicationOfJournalIssue": "Articles", "relationships.isPublicationOfJournalIssue": "Cikkek", - + // "relationships.isSingleJournalOf": "Journal", "relationships.isSingleJournalOf": "Folyóirat", - + // "relationships.isSingleVolumeOf": "Journal Volume", "relationships.isSingleVolumeOf": "Folyóirat kötet", - + // "relationships.isVolumeOf": "Journal Volumes", "relationships.isVolumeOf": "Folyóirat kötetek", - + // "relationships.isContributorOf": "Contributors", "relationships.isContributorOf": "Közreműködők", - - - + + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + "relationships.isContributorOf.OrgUnit": "Hozzájáruló (Szervezet)", + + // "relationships.isContributorOf.Person": "Contributor", + "relationships.isContributorOf.Person": "Hozzájáruló", + + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + // TODO New key - Add a translation + "relationships.isFundingAgencyOf.OrgUnit": "Funder", + + + // "repository.image.logo": "Repository logo", + "repository.image.logo": "Adattár logó", + + // "repository.title.prefix": "DSpace Angular :: ", + "repository.title.prefix": "EDA ", + + // "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefixDSpace": "EDA ", + + // "resource-policies.add.button": "Add", "resource-policies.add.button": "Hozzáad", - + // "resource-policies.add.for.": "Add a new policy", "resource-policies.add.for.": "Új szabály", - + // "resource-policies.add.for.bitstream": "Add a new Bitstream policy", "resource-policies.add.for.bitstream": "Új Bitstream szabály", - + // "resource-policies.add.for.bundle": "Add a new Bundle policy", "resource-policies.add.for.bundle": "Új Bundle szabály", - + // "resource-policies.add.for.item": "Add a new Item policy", "resource-policies.add.for.item": "Új elem szabály", - + // "resource-policies.add.for.community": "Add a new Community policy", "resource-policies.add.for.community": "Új közösségi szabály hozzáadása", - + // "resource-policies.add.for.collection": "Add a new Collection policy", "resource-policies.add.for.collection": "Új gyűjtemény szabály hozzáadása", - + // "resource-policies.create.page.heading": "Create new resource policy for ", "resource-policies.create.page.heading": "Új erőforráa szabály ...", - + // "resource-policies.create.page.failure.content": "An error occurred while creating the resource policy.", "resource-policies.create.page.failure.content": "Hiba történt az erőforrás szabály létrehozásakor.", - + // "resource-policies.create.page.success.content": "Operation successful", "resource-policies.create.page.success.content": "A művelet sikeres", - + // "resource-policies.create.page.title": "Create new resource policy", "resource-policies.create.page.title": "Új erőforráa szabály", - + // "resource-policies.delete.btn": "Delete selected", "resource-policies.delete.btn": "Kijelöltek törlése", - + // "resource-policies.delete.btn.title": "Delete selected resource policies", "resource-policies.delete.btn.title": "Kijelölt erőforrás szabályok törlése", - + // "resource-policies.delete.failure.content": "An error occurred while deleting selected resource policies.", "resource-policies.delete.failure.content": "Hiba történt az erőforrás szabályok törlésekor.", - + // "resource-policies.delete.success.content": "Operation successful", "resource-policies.delete.success.content": "A művelet sikeres", - + // "resource-policies.edit.page.heading": "Edit resource policy ", "resource-policies.edit.page.heading": "Erőfforás szabály szerkesztése ", - + // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", "resource-policies.edit.page.failure.content": "Hiba történt az erőforrás szabály szerkesztésekor.", - + + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + // TODO New key - Add a translation + "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + + // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + // TODO New key - Add a translation + "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + // "resource-policies.edit.page.success.content": "Operation successful", "resource-policies.edit.page.success.content": "A művelet sikeres", - + // "resource-policies.edit.page.title": "Edit resource policy", "resource-policies.edit.page.title": "Erőfforás szabály szerkesztése", - + // "resource-policies.form.action-type.label": "Select the action type", "resource-policies.form.action-type.label": "Művelet típus kiválasztása", - + // "resource-policies.form.action-type.required": "You must select the resource policy action.", "resource-policies.form.action-type.required": "Ki kell válasszon egy műveletet.", - + // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", // TODO Source message changed - Revise the translation "resource-policies.form.eperson-group-list.label": "Az eperson vagy csoport amihez rendeli a jogosultságot", - + // "resource-policies.form.eperson-group-list.select.btn": "Select", "resource-policies.form.eperson-group-list.select.btn": "Kiválaszt", - + // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", "resource-policies.form.eperson-group-list.tab.eperson": "ePerson keresése", - + // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", "resource-policies.form.eperson-group-list.tab.group": "Csoport keresése", - + // "resource-policies.form.eperson-group-list.table.headers.action": "Action", "resource-policies.form.eperson-group-list.table.headers.action": "Művelet", - + // "resource-policies.form.eperson-group-list.table.headers.id": "ID", "resource-policies.form.eperson-group-list.table.headers.id": "ID", - + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Név", - + + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + + // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + + // "resource-policies.form.eperson-group-list.modal.close": "Ok", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.close": "Ok", + // "resource-policies.form.date.end.label": "End Date", "resource-policies.form.date.end.label": "Végső dátum", - + // "resource-policies.form.date.start.label": "Start Date", "resource-policies.form.date.start.label": "Kezdő dátum", - + // "resource-policies.form.description.label": "Description", "resource-policies.form.description.label": "Leírás", - + // "resource-policies.form.name.label": "Name", "resource-policies.form.name.label": "Név", - + // "resource-policies.form.policy-type.label": "Select the policy type", "resource-policies.form.policy-type.label": "Szabály típus kiválasztása", - + // "resource-policies.form.policy-type.required": "You must select the resource policy type.", "resource-policies.form.policy-type.required": "Ki kell válasszon egy szabálytípust.", - + // "resource-policies.table.headers.action": "Action", "resource-policies.table.headers.action": "Művelet", - + // "resource-policies.table.headers.date.end": "End Date", "resource-policies.table.headers.date.end": "Végső dátum", - + // "resource-policies.table.headers.date.start": "Start Date", "resource-policies.table.headers.date.start": "Kezdő dátum", - + // "resource-policies.table.headers.edit": "Edit", "resource-policies.table.headers.edit": "Szerkeszt", - + // "resource-policies.table.headers.edit.group": "Edit group", "resource-policies.table.headers.edit.group": "Csoport módosítása", - + // "resource-policies.table.headers.edit.policy": "Edit policy", "resource-policies.table.headers.edit.policy": "Szabály módosítása", - + // "resource-policies.table.headers.eperson": "EPerson", "resource-policies.table.headers.eperson": "EPerson", - + // "resource-policies.table.headers.group": "Group", "resource-policies.table.headers.group": "Csoport", - + // "resource-policies.table.headers.id": "ID", "resource-policies.table.headers.id": "ID", - + // "resource-policies.table.headers.name": "Name", "resource-policies.table.headers.name": "Név", - + // "resource-policies.table.headers.policyType": "type", "resource-policies.table.headers.policyType": "típus", - + // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", "resource-policies.table.headers.title.for.bitstream": "Bitstream szabály", - + // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", "resource-policies.table.headers.title.for.bundle": "Bundle szabály", - + // "resource-policies.table.headers.title.for.item": "Policies for Item", "resource-policies.table.headers.title.for.item": "Elem szabály", - + // "resource-policies.table.headers.title.for.community": "Policies for Community", "resource-policies.table.headers.title.for.community": "Közösségi szabályok", - + // "resource-policies.table.headers.title.for.collection": "Policies for Collection", "resource-policies.table.headers.title.for.collection": "Gyűjtemény szabályok", - - - + + + // "search.description": "", "search.description": "", - + // "search.switch-configuration.title": "Show", "search.switch-configuration.title": "Megtekintés", - - // "search.title": "DSpace Angular :: Search", + + // "search.title": "Search", + // TODO Source message changed - Revise the translation "search.title": "DSpace Angular :: Keresés", - + // "search.breadcrumbs": "Search", "search.breadcrumbs": "Keresés", - - + + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Keresés az adattárban ...", + + // "search.filters.applied.f.author": "Author", "search.filters.applied.f.author": "Szerző", - + // "search.filters.applied.f.dateIssued.max": "End date", "search.filters.applied.f.dateIssued.max": "Végső dátum", - + // "search.filters.applied.f.dateIssued.min": "Start date", "search.filters.applied.f.dateIssued.min": "Kezdő dátum", - + // "search.filters.applied.f.dateSubmitted": "Date submitted", "search.filters.applied.f.dateSubmitted": "Feltöltés dátuma", - - // "search.filters.applied.f.discoverable": "Private", + + // "search.filters.applied.f.discoverable": "Non-discoverable", + // TODO Source message changed - Revise the translation "search.filters.applied.f.discoverable": "Privát", - + // "search.filters.applied.f.entityType": "Item Type", "search.filters.applied.f.entityType": "Tárgy típusa", - + // "search.filters.applied.f.has_content_in_original_bundle": "Has files", - "search.filters.applied.f.has_content_in_original_bundle": "Állományokat tartalmaz", - + "search.filters.applied.f.has_content_in_original_bundle": "Fájlokat tartalmaz", + // "search.filters.applied.f.itemtype": "Type", "search.filters.applied.f.itemtype": "Típus", - + // "search.filters.applied.f.namedresourcetype": "Status", "search.filters.applied.f.namedresourcetype": "Állapot", - + // "search.filters.applied.f.subject": "Subject", - "search.filters.applied.f.subject": "Tárgy", - + "search.filters.applied.f.subject": "Tárgyszó", + // "search.filters.applied.f.submitter": "Submitter", "search.filters.applied.f.submitter": "Feltöltő", - + // "search.filters.applied.f.jobTitle": "Job Title", "search.filters.applied.f.jobTitle": "Munkakör", - + // "search.filters.applied.f.birthDate.max": "End birth date", "search.filters.applied.f.birthDate.max": "Születési dátum vége", - + // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Születési dátum eleje", - + + // "search.filters.applied.f.supervisedBy": "Supervised by", + // TODO New key - Add a translation + "search.filters.applied.f.supervisedBy": "Supervised by", + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Visszavonva", - - - + + + // "search.filters.filter.author.head": "Author", "search.filters.filter.author.head": "Szerző", - + // "search.filters.filter.author.placeholder": "Author name", "search.filters.filter.author.placeholder": "Szerző neve", - + + // "search.filters.filter.author.label": "Search author name", + // TODO New key - Add a translation + "search.filters.filter.author.label": "Search author name", + // "search.filters.filter.birthDate.head": "Birth Date", "search.filters.filter.birthDate.head": "Születési dátum", - + // "search.filters.filter.birthDate.placeholder": "Birth Date", "search.filters.filter.birthDate.placeholder": "Születési dátum", - + + // "search.filters.filter.birthDate.label": "Search birth date", + // TODO New key - Add a translation + "search.filters.filter.birthDate.label": "Search birth date", + + // "search.filters.filter.collapse": "Collapse filter", + // TODO New key - Add a translation + "search.filters.filter.collapse": "Collapse filter", + // "search.filters.filter.creativeDatePublished.head": "Date Published", "search.filters.filter.creativeDatePublished.head": "Publikálás dátuma", - + // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", "search.filters.filter.creativeDatePublished.placeholder": "Publikálás dátuma", - + + // "search.filters.filter.creativeDatePublished.label": "Search date published", + // TODO New key - Add a translation + "search.filters.filter.creativeDatePublished.label": "Search date published", + // "search.filters.filter.creativeWorkEditor.head": "Editor", "search.filters.filter.creativeWorkEditor.head": "Szerkesztő", - + // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", "search.filters.filter.creativeWorkEditor.placeholder": "Szerkesztő", - + + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkEditor.label": "Search editor", + // "search.filters.filter.creativeWorkKeywords.head": "Subject", "search.filters.filter.creativeWorkKeywords.head": "Tárgy", - + // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", "search.filters.filter.creativeWorkKeywords.placeholder": "Tárgy", - + + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkKeywords.label": "Search subject", + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", "search.filters.filter.creativeWorkPublisher.head": "Kiadó", - + // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", "search.filters.filter.creativeWorkPublisher.placeholder": "Kiadó", - + + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + // TODO New key - Add a translation + "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + // "search.filters.filter.dateIssued.head": "Date", "search.filters.filter.dateIssued.head": "Dátum", - - // "search.filters.filter.dateIssued.max.placeholder": "Minimum Date", + + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + // TODO Source message changed - Revise the translation "search.filters.filter.dateIssued.max.placeholder": "Minimum Dátum", - - // "search.filters.filter.dateIssued.min.placeholder": "Maximum Date", + + // "search.filters.filter.dateIssued.max.label": "End", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.max.label": "End", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + // TODO Source message changed - Revise the translation "search.filters.filter.dateIssued.min.placeholder": "Maximum Dátum", - + + // "search.filters.filter.dateIssued.min.label": "Start", + // TODO New key - Add a translation + "search.filters.filter.dateIssued.min.label": "Start", + // "search.filters.filter.dateSubmitted.head": "Date submitted", "search.filters.filter.dateSubmitted.head": "Feltöltés dátuma", - + // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", "search.filters.filter.dateSubmitted.placeholder": "Feltöltés dátuma", - - // "search.filters.filter.discoverable.head": "Private", + + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + // TODO New key - Add a translation + "search.filters.filter.dateSubmitted.label": "Search date submitted", + + // "search.filters.filter.discoverable.head": "Non-discoverable", + // TODO Source message changed - Revise the translation "search.filters.filter.discoverable.head": "Privát", - + // "search.filters.filter.withdrawn.head": "Withdrawn", "search.filters.filter.withdrawn.head": "Visszavonva", - + // "search.filters.filter.entityType.head": "Item Type", "search.filters.filter.entityType.head": "Tárgy típusa", - + // "search.filters.filter.entityType.placeholder": "Item Type", "search.filters.filter.entityType.placeholder": "Tárgy típusa", - + + // "search.filters.filter.entityType.label": "Search item type", + // TODO New key - Add a translation + "search.filters.filter.entityType.label": "Search item type", + + // "search.filters.filter.expand": "Expand filter", + // TODO New key - Add a translation + "search.filters.filter.expand": "Expand filter", + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", "search.filters.filter.has_content_in_original_bundle.head": "Állományokat tartalmaz", - + // "search.filters.filter.itemtype.head": "Type", "search.filters.filter.itemtype.head": "Típus", - + // "search.filters.filter.itemtype.placeholder": "Type", "search.filters.filter.itemtype.placeholder": "Típus", - + + // "search.filters.filter.itemtype.label": "Search type", + // TODO New key - Add a translation + "search.filters.filter.itemtype.label": "Search type", + // "search.filters.filter.jobTitle.head": "Job Title", "search.filters.filter.jobTitle.head": "Munkakör", - + // "search.filters.filter.jobTitle.placeholder": "Job Title", "search.filters.filter.jobTitle.placeholder": "Munkakör", - + + // "search.filters.filter.jobTitle.label": "Search job title", + // TODO New key - Add a translation + "search.filters.filter.jobTitle.label": "Search job title", + // "search.filters.filter.knowsLanguage.head": "Known language", "search.filters.filter.knowsLanguage.head": "Ismert nyelv", - + // "search.filters.filter.knowsLanguage.placeholder": "Known language", "search.filters.filter.knowsLanguage.placeholder": "Ismert nyelv", - + + // "search.filters.filter.knowsLanguage.label": "Search known language", + // TODO New key - Add a translation + "search.filters.filter.knowsLanguage.label": "Search known language", + // "search.filters.filter.namedresourcetype.head": "Status", "search.filters.filter.namedresourcetype.head": "Állapot", - + // "search.filters.filter.namedresourcetype.placeholder": "Status", "search.filters.filter.namedresourcetype.placeholder": "Állapot", - + + // "search.filters.filter.namedresourcetype.label": "Search status", + // TODO New key - Add a translation + "search.filters.filter.namedresourcetype.label": "Search status", + // "search.filters.filter.objectpeople.head": "People", "search.filters.filter.objectpeople.head": "Emberek", - + // "search.filters.filter.objectpeople.placeholder": "People", "search.filters.filter.objectpeople.placeholder": "Emberek", - + + // "search.filters.filter.objectpeople.label": "Search people", + // TODO New key - Add a translation + "search.filters.filter.objectpeople.label": "Search people", + // "search.filters.filter.organizationAddressCountry.head": "Country", "search.filters.filter.organizationAddressCountry.head": "Országy", - + // "search.filters.filter.organizationAddressCountry.placeholder": "Country", "search.filters.filter.organizationAddressCountry.placeholder": "Ország", - + + // "search.filters.filter.organizationAddressCountry.label": "Search country", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressCountry.label": "Search country", + // "search.filters.filter.organizationAddressLocality.head": "City", "search.filters.filter.organizationAddressLocality.head": "Város", - + // "search.filters.filter.organizationAddressLocality.placeholder": "City", "search.filters.filter.organizationAddressLocality.placeholder": "Város", - + + // "search.filters.filter.organizationAddressLocality.label": "Search city", + // TODO New key - Add a translation + "search.filters.filter.organizationAddressLocality.label": "Search city", + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", "search.filters.filter.organizationFoundingDate.head": "Alapítás dátuma", - + // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", "search.filters.filter.organizationFoundingDate.placeholder": "Alapítás dátuma", - + + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + // TODO New key - Add a translation + "search.filters.filter.organizationFoundingDate.label": "Search date founded", + // "search.filters.filter.scope.head": "Scope", "search.filters.filter.scope.head": "Célja", - + // "search.filters.filter.scope.placeholder": "Scope filter", "search.filters.filter.scope.placeholder": "Cél szűrő", - + + // "search.filters.filter.scope.label": "Search scope filter", + // TODO New key - Add a translation + "search.filters.filter.scope.label": "Search scope filter", + // "search.filters.filter.show-less": "Collapse", "search.filters.filter.show-less": "Összevon", - + // "search.filters.filter.show-more": "Show more", - "search.filters.filter.show-more": "Többet megjelenít", - + "search.filters.filter.show-more": "Tovább", + // "search.filters.filter.subject.head": "Subject", "search.filters.filter.subject.head": "Tárgy", - + // "search.filters.filter.subject.placeholder": "Subject", "search.filters.filter.subject.placeholder": "Tárgy", - + + // "search.filters.filter.subject.label": "Search subject", + // TODO New key - Add a translation + "search.filters.filter.subject.label": "Search subject", + // "search.filters.filter.submitter.head": "Submitter", "search.filters.filter.submitter.head": "Feltöltő", - + // "search.filters.filter.submitter.placeholder": "Submitter", "search.filters.filter.submitter.placeholder": "Feltöltő", - - - + + // "search.filters.filter.submitter.label": "Search submitter", + // TODO New key - Add a translation + "search.filters.filter.submitter.label": "Search submitter", + + // "search.filters.filter.show-tree": "Browse {{ name }} tree", + // TODO New key - Add a translation + "search.filters.filter.show-tree": "Browse {{ name }} tree", + + // "search.filters.filter.supervisedBy.head": "Supervised By", + // TODO New key - Add a translation + "search.filters.filter.supervisedBy.head": "Supervised By", + + // "search.filters.filter.supervisedBy.placeholder": "Supervised By", + // TODO New key - Add a translation + "search.filters.filter.supervisedBy.placeholder": "Supervised By", + + // "search.filters.filter.supervisedBy.label": "Search Supervised By", + // TODO New key - Add a translation + "search.filters.filter.supervisedBy.label": "Search Supervised By", + + + // "search.filters.entityType.JournalIssue": "Journal Issue", "search.filters.entityType.JournalIssue": "Folyóirat száma", - + // "search.filters.entityType.JournalVolume": "Journal Volume", "search.filters.entityType.JournalVolume": "JFolyóirat kötet", - + // "search.filters.entityType.OrgUnit": "Organizational Unit", "search.filters.entityType.OrgUnit": "Szervezeti egység", - + // "search.filters.has_content_in_original_bundle.true": "Yes", "search.filters.has_content_in_original_bundle.true": "Igen", - + // "search.filters.has_content_in_original_bundle.false": "No", "search.filters.has_content_in_original_bundle.false": "Nem", - + // "search.filters.discoverable.true": "No", "search.filters.discoverable.true": "Nem", - + // "search.filters.discoverable.false": "Yes", "search.filters.discoverable.false": "Igen", - + // "search.filters.withdrawn.true": "Yes", "search.filters.withdrawn.true": "Igen", - + // "search.filters.withdrawn.false": "No", "search.filters.withdrawn.false": "Nem", - - + + // "search.filters.head": "Filters", "search.filters.head": "Szűrők", - + // "search.filters.reset": "Reset filters", "search.filters.reset": "Szűrők visszaállítása", - - - + + // "search.filters.search.submit": "Submit", + // TODO New key - Add a translation + "search.filters.search.submit": "Submit", + + + // "search.form.search": "Search", - "search.form.search": "keresés", - - // "search.form.search_dspace": "Search DSpace", - "search.form.search_dspace": "Keres a DSpace-en", - - // "search.form.search_mydspace": "Search MyDSpace", - "search.form.search_mydspace": "Keres a MyDSpace-en", - - - + "search.form.search": "Keresés", + + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Teljes adattár", + + // "search.form.scope.all": "All of DSpace", + "search.form.scope.all": "A teljes EDA", + + + // "search.results.head": "Search Results", "search.results.head": "Keresési eredmények", - + // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", "search.results.no-results": "A keresésnek nincs eredménye. Nem találja amit keres? Próbálja", - + // "search.results.no-results-link": "quotes around it", "search.results.no-results-link": "idézőjelek közé írni", - + // "search.results.empty": "Your search returned no results.", "search.results.empty": "A keresésnek nincs eredménye.", - - - + + // "search.results.view-result": "View", + // TODO New key - Add a translation + "search.results.view-result": "View", + + // "search.results.response.500": "An error occurred during query execution, please try again later", + // TODO New key - Add a translation + "search.results.response.500": "An error occurred during query execution, please try again later", + + // "default.search.results.head": "Search Results", + "default.search.results.head": "Keresés eredménye", + + // "default-relationships.search.results.head": "Search Results", + "default-relationships.search.results.head": "Keresés eredménye", + + // "search.sidebar.close": "Back to results", - "search.sidebar.close": "Vissza a szűrőkhöz", - + "search.sidebar.close": "Vissza a találatokhoz", + // "search.sidebar.filters.title": "Filters", "search.sidebar.filters.title": "Szűrők", - + // "search.sidebar.open": "Search Tools", "search.sidebar.open": "Kereső eszközök", - + // "search.sidebar.results": "results", "search.sidebar.results": "eredmények", - + // "search.sidebar.settings.rpp": "Results per page", "search.sidebar.settings.rpp": "Eredmények oldalanként", - + // "search.sidebar.settings.sort-by": "Sort By", "search.sidebar.settings.sort-by": "Rendszerezés eszerint", - + // "search.sidebar.settings.title": "Settings", - "search.sidebar.settings.title": "Állítások", - - - + "search.sidebar.settings.title": "Beállítások", + + + // "search.view-switch.show-detail": "Show detail", "search.view-switch.show-detail": "Részletek megjelenítése", - + // "search.view-switch.show-grid": "Show as grid", "search.view-switch.show-grid": "Megjelenítés rácsként", - + // "search.view-switch.show-list": "Show as list", "search.view-switch.show-list": "Megjelenítés listaként", - - - + + + // "sorting.ASC": "Ascending", "sorting.ASC": "Növekvő", - + // "sorting.DESC": "Descending", "sorting.DESC": "Csökkenő", - + // "sorting.dc.title.ASC": "Title Ascending", "sorting.dc.title.ASC": "Cím növekvő sorrendben", - + // "sorting.dc.title.DESC": "Title Descending", "sorting.dc.title.DESC": "Cím csökkenő sorrendben", - - // "sorting.score.DESC": "Relevance", - "sorting.score.DESC": "Relevancia", - - - + + // "sorting.score.ASC": "Least Relevant", + "sorting.score.ASC": "Legkevésbé releváns", + + // "sorting.score.DESC": "Most Relevant", + "sorting.score.DESC": "Leginkább releváns", + + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + "sorting.dc.date.issued.ASC": "Megjelenés dátuma szerint növekvő", + + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + "sorting.dc.date.issued.DESC": "Megjelenés dátuma szerint csökkenő", + + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + "sorting.dc.date.accessioned.ASC": "Hozzáférés dátuma szerint növekvő", + + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + "sorting.dc.date.accessioned.DESC": "Hozzáférés dátuma szerint csökkenő", + + // "sorting.lastModified.ASC": "Last modified Ascending", + "sorting.lastModified.ASC": "Utoljára módosított növekvő", + + // "sorting.lastModified.DESC": "Last modified Descending", + "sorting.lastModified.DESC": "Utoljára módosított növekvő csökkenő", + + // "statistics.title": "Statistics", "statistics.title": "Statisztikák", - + // "statistics.header": "Statistics for {{ scope }}", "statistics.header": "Statisztikák: {{ scope }}", - + // "statistics.breadcrumbs": "Statistics", "statistics.breadcrumbs": "Statisztikák", - + // "statistics.page.no-data": "No data available", "statistics.page.no-data": "Nincsenek adatok", - + // "statistics.table.no-data": "No data available", "statistics.table.no-data": "Nincsenek adatok", - + // "statistics.table.title.TotalVisits": "Total visits", "statistics.table.title.TotalVisits": "Összes látogatás", - + // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", "statistics.table.title.TotalVisitsPerMonth": "Összes látogató a hónapban", - + // "statistics.table.title.TotalDownloads": "File Visits", "statistics.table.title.TotalDownloads": "Fájl elérések", - + // "statistics.table.title.TopCountries": "Top country views", "statistics.table.title.TopCountries": "Elérések országok szerint", - + // "statistics.table.title.TopCities": "Top city views", "statistics.table.title.TopCities": "Elérések városok szerint", - + // "statistics.table.header.views": "Views", "statistics.table.header.views": "Látogatások", - - - + + + + // "submission.edit.breadcrumbs": "Edit Submission", + // TODO New key - Add a translation + "submission.edit.breadcrumbs": "Edit Submission", + // "submission.edit.title": "Edit Submission", "submission.edit.title": "Feltöltés szerkesztése", - + + // "submission.general.cancel": "Cancel", + // TODO New key - Add a translation + "submission.general.cancel": "Cancel", + // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", "submission.general.cannot_submit": "Önnek nincs új feltöltéshez szükséges privilégiuma.", - + // "submission.general.deposit": "Deposit", "submission.general.deposit": "Adattár", - + // "submission.general.discard.confirm.cancel": "Cancel", "submission.general.discard.confirm.cancel": "Mégse", - + // "submission.general.discard.confirm.info": "This operation can't be undone. Are you sure?", "submission.general.discard.confirm.info": "Ezt a műveletet nem lehet visszaváltoztatni. Biztos benne?", - + // "submission.general.discard.confirm.submit": "Yes, I'm sure", "submission.general.discard.confirm.submit": "Igen, biztos vagyok", - + // "submission.general.discard.confirm.title": "Discard submission", "submission.general.discard.confirm.title": "Feltöltés elvetése", - + // "submission.general.discard.submit": "Discard", "submission.general.discard.submit": "Elvetés", - + + // "submission.general.info.saved": "Saved", + // TODO New key - Add a translation + "submission.general.info.saved": "Saved", + + // "submission.general.info.pending-changes": "Unsaved changes", + // TODO New key - Add a translation + "submission.general.info.pending-changes": "Unsaved changes", + // "submission.general.save": "Save", "submission.general.save": "Mentés", - + // "submission.general.save-later": "Save for later", "submission.general.save-later": "Mentés későbbre", - - + + // "submission.import-external.page.title": "Import metadata from an external source", "submission.import-external.page.title": "Metaadatok importálása külső forrásból", - + // "submission.import-external.title": "Import metadata from an external source", "submission.import-external.title": "Metaadatok importálása külső forrásból", - + + // "submission.import-external.title.Journal": "Import a journal from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Journal": "Import a journal from an external source", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + // TODO New key - Add a translation + "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + // TODO New key - Add a translation + "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + // TODO New key - Add a translation + "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + + // "submission.import-external.title.Person": "Import a person from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Person": "Import a person from an external source", + + // "submission.import-external.title.Project": "Import a project from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Project": "Import a project from an external source", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + // TODO New key - Add a translation + "submission.import-external.title.Publication": "Import a publication from an external source", + + // "submission.import-external.title.none": "Import metadata from an external source", + // TODO New key - Add a translation + "submission.import-external.title.none": "Import metadata from an external source", + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", "submission.import-external.page.hint": "Írjon be egy lekérést hogy elemeket találjon a web-en amiket importálhat DSpace-be.", - + // "submission.import-external.back-to-my-dspace": "Back to MyDSpace", "submission.import-external.back-to-my-dspace": "Vissza a MyDSpacehez", - + // "submission.import-external.search.placeholder": "Search the external source", "submission.import-external.search.placeholder": "Külső forrás keresése", - + // "submission.import-external.search.button": "Search", "submission.import-external.search.button": "Keresés", - + // "submission.import-external.search.button.hint": "Write some words to search", "submission.import-external.search.button.hint": "Írjon be keresési szavakat", - + // "submission.import-external.search.source.hint": "Pick an external source", "submission.import-external.search.source.hint": "Válasszon egy külső forrást", - + // "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.arxiv": "arXiv", - + + // "submission.import-external.source.ads": "NASA/ADS", + // TODO New key - Add a translation + "submission.import-external.source.ads": "NASA/ADS", + + // "submission.import-external.source.cinii": "CiNii", + // TODO New key - Add a translation + "submission.import-external.source.cinii": "CiNii", + + // "submission.import-external.source.crossref": "CrossRef", + // TODO New key - Add a translation + "submission.import-external.source.crossref": "CrossRef", + + // "submission.import-external.source.datacite": "DataCite", + // TODO New key - Add a translation + "submission.import-external.source.datacite": "DataCite", + + // "submission.import-external.source.scielo": "SciELO", + // TODO New key - Add a translation + "submission.import-external.source.scielo": "SciELO", + + // "submission.import-external.source.scopus": "Scopus", + // TODO New key - Add a translation + "submission.import-external.source.scopus": "Scopus", + + // "submission.import-external.source.vufind": "VuFind", + // TODO New key - Add a translation + "submission.import-external.source.vufind": "VuFind", + + // "submission.import-external.source.wos": "Web Of Science", + // TODO New key - Add a translation + "submission.import-external.source.wos": "Web Of Science", + + // "submission.import-external.source.orcidWorks": "ORCID", + // TODO New key - Add a translation + "submission.import-external.source.orcidWorks": "ORCID", + + // "submission.import-external.source.epo": "European Patent Office (EPO)", + // TODO New key - Add a translation + "submission.import-external.source.epo": "European Patent Office (EPO)", + // "submission.import-external.source.loading": "Loading ...", "submission.import-external.source.loading": "Betöltés ...", - + // "submission.import-external.source.sherpaJournal": "SHERPA Journals", "submission.import-external.source.sherpaJournal": "SHERPA Journals", - + + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + // TODO New key - Add a translation + "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", - + + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + // "submission.import-external.source.orcid": "ORCID", "submission.import-external.source.orcid": "ORCID", - + // "submission.import-external.source.pubmed": "Pubmed", "submission.import-external.source.pubmed": "Pubmed", - + + // "submission.import-external.source.pubmedeu": "Pubmed Europe", + // TODO New key - Add a translation + "submission.import-external.source.pubmedeu": "Pubmed Europe", + // "submission.import-external.source.lcname": "Library of Congress Names", "submission.import-external.source.lcname": "Library of Congress Names", - + // "submission.import-external.preview.title": "Item Preview", "submission.import-external.preview.title": "Elem előnézet", - + + // "submission.import-external.preview.title.Publication": "Publication Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.Publication": "Publication Preview", + + // "submission.import-external.preview.title.none": "Item Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.none": "Item Preview", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.Journal": "Journal Preview", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + + // "submission.import-external.preview.title.Person": "Person Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.Person": "Person Preview", + + // "submission.import-external.preview.title.Project": "Project Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.Project": "Project Preview", + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", "submission.import-external.preview.subtitle": "A lentebbi metaadat importálva a külső forrásból. Ki lesz töltve ha elkezdi a beküldési folyamatot.", - + // "submission.import-external.preview.button.import": "Start submission", "submission.import-external.preview.button.import": "Beküldés elkezdése", - + // "submission.import-external.preview.error.import.title": "Submission error", "submission.import-external.preview.error.import.title": "Beküldési hiba", - + // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", "submission.import-external.preview.error.import.body": "Hiba történt a külső forrásból történő importálás folyamán.", - + // "submission.sections.describe.relationship-lookup.close": "Close", "submission.sections.describe.relationship-lookup.close": "Bezárás", - + // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", "submission.sections.describe.relationship-lookup.external-source.added": "Helyi bevitel sikeresen hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", // TODO New key - Add a translation "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Távoli folyóirat importálása", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Távoli folyóiratszám importálása", - + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Távoli folyóiratkötet importálása", - + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Import remote event", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Import remote event", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Import remote product", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Import remote product", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Import remote equipment", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Import remote equipment", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Import remote organizational unit", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Import remote organizational unit", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Import remote fund", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Import remote fund", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Import remote project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Import remote project", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", // TODO New key - Add a translation "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", // TODO New key - Add a translation "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Successfully imported and added external author to the selection", // TODO New key - Add a translation "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Successfully imported and added external author to the selection", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Authority", "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Autoritás", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Import as a new local authority entry", "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importál új helyi autoritás bevitelként", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Mégse", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Válasszon ki gyűjteményt, amelyhez az új bevitelt importálja", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entitások", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Import as a new local entity", "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "ÍÚj entitásként importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "LC Nnévről importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "ORCID-ról importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Sherpa Journal-ról importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Sherpa Publisher-ről importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "PubMed-ről importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "arXiv-ről importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Távoli folyóiratot importál", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Helyi folyóirat sikeresen hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Külső folyóirat sikeresen importálva és hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Távoli folyóiratszám importálása", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Helyi folyóirat sikeresen hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Távoli folyóirat sikeresen importálva és hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Import Remote Journal Volume", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Távoli folyóiratkötet importálása", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Helyi folyóiratkötet sikeresen hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Külső folyóiratkötet sikeresen importálva és hozzáadva a kiválasztotthoz", - + // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Válasszon ki helyi megfelelést:", - + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Valamennyi kiválasztás megszüntetése", - + // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Oldal kiválasztásának megszüntetése", - + // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", "submission.sections.describe.relationship-lookup.search-tab.loading": "Betöltés...", - + // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Keresett szó", - + // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", "submission.sections.describe.relationship-lookup.search-tab.search": "Mehet", - + + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", "submission.sections.describe.relationship-lookup.search-tab.select-all": "Valamennyi kiválasztása", - + // "submission.sections.describe.relationship-lookup.search-tab.select-page": "Select page", "submission.sections.describe.relationship-lookup.search-tab.select-page": "Oldal választása", - + // "submission.sections.describe.relationship-lookup.selected": "Selected {{ size }} items", "submission.sections.describe.relationship-lookup.selected": "Kiválasztott {{ size }} tárgyak", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Helyi szerzők ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Helyi folyóiratok ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Helyi projektek ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Helyi kiadványok ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Helyi szerzők ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Helyi szervezeti egységek ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Helyi adat csomagok ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Helyi adatállományok ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Helyi folyóiratok ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Helyi folyóiratszámok ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Helyi folyóiratszámok ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Helyi folyóiratkötetek ({{ count }})", // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Helyi folyóiratkötetek ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa folyóiratok ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa kiadók ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Search for Funding Agencies", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Támogató szervezetek keresése", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Támogatás keresése", - + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Intézményi egységek kereséset", - + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + + + + + // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Jelenleg kiválasztott ({{ count }})", - + // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Folyóirat számok", // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", "submission.sections.describe.relationship-lookup.title.JournalIssue": "Folyóirat számok", - + // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Folyóirat kötetek", // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", "submission.sections.describe.relationship-lookup.title.JournalVolume": "Folyóirat kötetek", - + // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Folyóiratok", - + // "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Authors", "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Szerzők", - + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Támogató szervezet", // "submission.sections.describe.relationship-lookup.title.Project": "Projects", "submission.sections.describe.relationship-lookup.title.Project": "Projektek", - + // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", "submission.sections.describe.relationship-lookup.title.Publication": "Kiadványok", - + // "submission.sections.describe.relationship-lookup.title.Person": "Authors", "submission.sections.describe.relationship-lookup.title.Person": "Szerzők", - + // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", "submission.sections.describe.relationship-lookup.title.OrgUnit": "Szervezeti egységek", - + // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", "submission.sections.describe.relationship-lookup.title.DataPackage": "Adatcsomagok", - + // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", "submission.sections.describe.relationship-lookup.title.DataFile": "Adatállományok", - + // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", "submission.sections.describe.relationship-lookup.title.Funding Agency": "Támogató szervezet", - + // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Támogatás", - + // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Szülő szervezeti egység", - + + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Lenyíló menü váltás", - + // "submission.sections.describe.relationship-lookup.selection-tab.settings": "Settings", "submission.sections.describe.relationship-lookup.selection-tab.settings": "Beállítások", - + // "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Your selection is currently empty.", "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Amit kiválasztott az jelenleg üres.", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Authors", "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Kiválasztott szerzők", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Választott folyóirat", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Választott folyóirat kötet", // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Választott projektek", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Választott kiadványok", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Választott szerzők", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Választott szervezeti egységek", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Választott adatcsomagok", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Selected Data Files", "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Választott adatfájlok", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Választott folyóiratok", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Választott szám", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Választott folyóirat kötet", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Választott támogató szervezet", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Választott támogatás", // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Választott szám", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Választott szervezeti egység", - + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Keresési eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Keresése eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Keresése eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Keresése eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Keresése eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Keresése eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Keresése eredmények", - + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Keresés eredménye", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Keresés eredménye", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Keresés eredménye", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Keresés eredménye", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Keresés eredménye", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Keresés eredménye", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Keresés eredménye", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Óhajtja-e elmenteni \"{{ value }}\" névváltozatként ennek a személynek, hogy később ön is és mások is újrahasználhassák feltöltéshez? Amennyiben nem, még mindig használhatja ehhez a feltöltéshez.", - + // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Mentsen el új névvariánst", - + // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Használja csak ehhez a feltöltéshez", - + // "submission.sections.ccLicense.type": "License Type", "submission.sections.ccLicense.type": "Licenc típus", - + // "submission.sections.ccLicense.select": "Select a license type…", "submission.sections.ccLicense.select": "Válasszon ki egy licenc típust…", - + // "submission.sections.ccLicense.change": "Change your license type…", "submission.sections.ccLicense.change": "Válassza ki a licenc típusát…", - + // "submission.sections.ccLicense.none": "No licenses available", "submission.sections.ccLicense.none": "Nincs elérhető licenc", - + // "submission.sections.ccLicense.option.select": "Select an option…", "submission.sections.ccLicense.option.select": "Válasszon ki valamit…", - + // "submission.sections.ccLicense.link": "You’ve selected the following license:", "submission.sections.ccLicense.link": "A következő licencet választotta ki:", - + // "submission.sections.ccLicense.confirmation": "I grant the license above", "submission.sections.ccLicense.confirmation": "Engedélyezem a lentebbi licencet", - + // "submission.sections.general.add-more": "Add more", "submission.sections.general.add-more": "Több hozzáadása", - + + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + // TODO New key - Add a translation + "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + // "submission.sections.general.collection": "Collection", "submission.sections.general.collection": "Gyűjtemény", - + // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", "submission.sections.general.deposit_error_notice": "Tárgy feltöltésekor probléma keletkezett, kérjük próbálja újra később.", - + // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", "submission.sections.general.deposit_success_notice": "Feltöltés sikeresen elraktározva.", - + // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", "submission.sections.general.discard_error_notice": "Tárgy elvetésekor probléma keletkezett, kérjük próbálja újra később.", - + // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", "submission.sections.general.discard_success_notice": "Feltöltés sikeresen elvetve.", - + // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", "submission.sections.general.metadata-extracted": "Új metaadat kivonva és hozzáadva a {{sectionId}} szakaszhoz.", - + // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", "submission.sections.general.metadata-extracted-new-section": "Új {{sectionId}} szakasz lett hozzáadva a feltöltéshez.", - + // "submission.sections.general.no-collection": "No collection found", "submission.sections.general.no-collection": "Nem található gyűjtemény", - + // "submission.sections.general.no-sections": "No options available", "submission.sections.general.no-sections": "Nincs elérhető opció", - + // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", "submission.sections.general.save_error_notice": "Tárgy elmentésekor probléma keletkezett, kérjük próbálja újra később.", - + // "submission.sections.general.save_success_notice": "Submission saved successfully.", "submission.sections.general.save_success_notice": "Feltöltés sikeresen elmentve.", - + // "submission.sections.general.search-collection": "Search for a collection", "submission.sections.general.search-collection": "Gyűjtemény keresése", - + // "submission.sections.general.sections_not_valid": "There are incomplete sections.", "submission.sections.general.sections_not_valid": "Egyes szakaszok nem teljesek.", - - - + + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + // TODO New key - Add a translation + "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + + // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + // TODO New key - Add a translation + "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + // TODO New key - Add a translation + "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + + // "submission.sections.identifiers.handle_label": "Handle: ", + // TODO New key - Add a translation + "submission.sections.identifiers.handle_label": "Handle: ", + + // "submission.sections.identifiers.doi_label": "DOI: ", + // TODO New key - Add a translation + "submission.sections.identifiers.doi_label": "DOI: ", + + // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", + // TODO New key - Add a translation + "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", // TODO New key - Add a translation "submission.sections.submit.progressbar.CClicense": "Creative commons license", - + // "submission.sections.submit.progressbar.describe.recycle": "Recycle", "submission.sections.submit.progressbar.describe.recycle": "Reciklál", - + // "submission.sections.submit.progressbar.describe.stepcustom": "Describe", "submission.sections.submit.progressbar.describe.stepcustom": "Leír", - + // "submission.sections.submit.progressbar.describe.stepone": "Describe", "submission.sections.submit.progressbar.describe.stepone": "Leír", - + // "submission.sections.submit.progressbar.describe.steptwo": "Describe", "submission.sections.submit.progressbar.describe.steptwo": "Leír", - + // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Potenciális duplázódás", - + + // "submission.sections.submit.progressbar.identifiers": "Identifiers", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.identifiers": "Identifiers", + // "submission.sections.submit.progressbar.license": "Deposit license", "submission.sections.submit.progressbar.license": "Engedély raktározása", - + + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + // "submission.sections.submit.progressbar.upload": "Upload files", "submission.sections.submit.progressbar.upload": "Állományok feltöltése", - - - + + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + + + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + // TODO New key - Add a translation + "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + + // "submission.sections.status.errors.title": "Errors", + // TODO New key - Add a translation + "submission.sections.status.errors.title": "Errors", + + // "submission.sections.status.valid.title": "Valid", + // TODO New key - Add a translation + "submission.sections.status.valid.title": "Valid", + + // "submission.sections.status.warnings.title": "Warnings", + // TODO New key - Add a translation + "submission.sections.status.warnings.title": "Warnings", + + // "submission.sections.status.errors.aria": "has errors", + // TODO New key - Add a translation + "submission.sections.status.errors.aria": "has errors", + + // "submission.sections.status.valid.aria": "is valid", + // TODO New key - Add a translation + "submission.sections.status.valid.aria": "is valid", + + // "submission.sections.status.warnings.aria": "has warnings", + // TODO New key - Add a translation + "submission.sections.status.warnings.aria": "has warnings", + + // "submission.sections.status.info.title": "Additional Information", + // TODO New key - Add a translation + "submission.sections.status.info.title": "Additional Information", + + // "submission.sections.status.info.aria": "Additional Information", + // TODO New key - Add a translation + "submission.sections.status.info.aria": "Additional Information", + + // "submission.sections.toggle.open": "Open section", + // TODO New key - Add a translation + "submission.sections.toggle.open": "Open section", + + // "submission.sections.toggle.close": "Close section", + // TODO New key - Add a translation + "submission.sections.toggle.close": "Close section", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + // TODO New key - Add a translation + "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + // TODO New key - Add a translation + "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + // "submission.sections.upload.delete.confirm.cancel": "Cancel", "submission.sections.upload.delete.confirm.cancel": "Mégse", - + // "submission.sections.upload.delete.confirm.info": "This operation can't be undone. Are you sure?", "submission.sections.upload.delete.confirm.info": "Ezt a műveletet nem lehet visszaváltoztatni. Biztos benne?", - + // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", "submission.sections.upload.delete.confirm.submit": "Igen, biztos", - + // "submission.sections.upload.delete.confirm.title": "Delete bitstream", "submission.sections.upload.delete.confirm.title": "Bitfolyam törlése", - + // "submission.sections.upload.delete.submit": "Delete", "submission.sections.upload.delete.submit": "Törlés", - + + // "submission.sections.upload.download.title": "Download bitstream", + // TODO New key - Add a translation + "submission.sections.upload.download.title": "Download bitstream", + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", "submission.sections.upload.drop-message": "Húzza ide az állományokat, hogy a tárgyhoz csatolja", - + + // "submission.sections.upload.edit.title": "Edit bitstream", + // TODO New key - Add a translation + "submission.sections.upload.edit.title": "Edit bitstream", + // "submission.sections.upload.form.access-condition-label": "Access condition type", "submission.sections.upload.form.access-condition-label": "Elérhetőségi feltétel típusa", - + + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + // TODO New key - Add a translation + "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + // "submission.sections.upload.form.date-required": "Date is required.", "submission.sections.upload.form.date-required": "Dátum kötelező.", - + + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + // TODO New key - Add a translation + "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + // TODO New key - Add a translation + "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + // "submission.sections.upload.form.from-label": "Grant access from", "submission.sections.upload.form.from-label": "Elérhetőség megadása innen", - + + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + // "submission.sections.upload.form.from-placeholder": "From", "submission.sections.upload.form.from-placeholder": "Innen", - + // "submission.sections.upload.form.group-label": "Group", "submission.sections.upload.form.group-label": "Csoport", - + // "submission.sections.upload.form.group-required": "Group is required.", "submission.sections.upload.form.group-required": "Csoport kötelező.", - + // "submission.sections.upload.form.until-label": "Grant access until", "submission.sections.upload.form.until-label": "Elérhetőséget engedélyez eddig", - + + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + // "submission.sections.upload.form.until-placeholder": "Until", "submission.sections.upload.form.until-placeholder": "Eddig", - + // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", "submission.sections.upload.header.policy.default.nolist": "A {{collectionName}} feltöltött állományok elérhetők lesznek a következő csoport(ok) szerint:", - + // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Kérjük, vegye figyelembe, hogy a {{collectionName}} gyűjteménybe feltöltött állományok elérhetők lesznek, azon kívül amit az egyedi állományokról kifejezetten eldöntött, a következő csoport(ok)ban:", - + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", "submission.sections.upload.info": "Itt megtalálja a tárgyban lévő valamennyi állományt. Frissítheti az állomány metaadatait és hozzáférési feltételeit vagy feltölthet további állományokat azzal, hogy behúzza azokat bárhova az oldalra", - + // "submission.sections.upload.no-entry": "No", "submission.sections.upload.no-entry": "Nem", - + // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", "submission.sections.upload.no-file-uploaded": "Még nincs feltöltött állomány.", - + // "submission.sections.upload.save-metadata": "Save metadata", "submission.sections.upload.save-metadata": "Metaadat elmentése", - + // "submission.sections.upload.undo": "Cancel", "submission.sections.upload.undo": "Mégse", - + // "submission.sections.upload.upload-failed": "Upload failed", "submission.sections.upload.upload-failed": "Feltöltés nem sikerült", - + // "submission.sections.upload.upload-successful": "Upload successful", "submission.sections.upload.upload-successful": "Feltöltés sikerült", - - - - // "submission.submit.title": "Submission", + + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", + // TODO New key - Add a translation + "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", + + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + // TODO New key - Add a translation + "submission.sections.accesses.form.discoverable-label": "Discoverable", + + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + // TODO New key - Add a translation + "submission.sections.accesses.form.access-condition-label": "Access condition type", + + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + // TODO New key - Add a translation + "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + + // "submission.sections.accesses.form.date-required": "Date is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.date-required": "Date is required.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + // TODO New key - Add a translation + "submission.sections.accesses.form.from-label": "Grant access from", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + + // "submission.sections.accesses.form.from-placeholder": "From", + // TODO New key - Add a translation + "submission.sections.accesses.form.from-placeholder": "From", + + // "submission.sections.accesses.form.group-label": "Group", + // TODO New key - Add a translation + "submission.sections.accesses.form.group-label": "Group", + + // "submission.sections.accesses.form.group-required": "Group is required.", + // TODO New key - Add a translation + "submission.sections.accesses.form.group-required": "Group is required.", + + // "submission.sections.accesses.form.until-label": "Grant access until", + // TODO New key - Add a translation + "submission.sections.accesses.form.until-label": "Grant access until", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + // TODO New key - Add a translation + "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + + // "submission.sections.accesses.form.until-placeholder": "Until", + // TODO New key - Add a translation + "submission.sections.accesses.form.until-placeholder": "Until", + + // "submission.sections.license.granted-label": "I confirm the license above", + // TODO New key - Add a translation + "submission.sections.license.granted-label": "I confirm the license above", + + // "submission.sections.license.required": "You must accept the license", + // TODO New key - Add a translation + "submission.sections.license.required": "You must accept the license", + + // "submission.sections.license.notgranted": "You must accept the license", + // TODO New key - Add a translation + "submission.sections.license.notgranted": "You must accept the license", + + + // "submission.sections.sherpa.publication.information": "Publication information", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information": "Publication information", + + // "submission.sections.sherpa.publication.information.title": "Title", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.title": "Title", + + // "submission.sections.sherpa.publication.information.issns": "ISSNs", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.issns": "ISSNs", + + // "submission.sections.sherpa.publication.information.url": "URL", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.url": "URL", + + // "submission.sections.sherpa.publication.information.publishers": "Publisher", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.publishers": "Publisher", + + // "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + + // "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + + // "submission.sections.sherpa.publisher.policy": "Publisher Policy", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy": "Publisher Policy", + + // "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + + // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + + // "submission.sections.sherpa.publisher.policy.version": "Version", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.version": "Version", + + // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.nolocation": "None", + + // "submission.sections.sherpa.publisher.policy.license": "License", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.license": "License", + + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + + // "submission.sections.sherpa.publisher.policy.location": "Location", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.location": "Location", + + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + + // "submission.sections.sherpa.record.information": "Record Information", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information": "Record Information", + + // "submission.sections.sherpa.record.information.id": "ID", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.id": "ID", + + // "submission.sections.sherpa.record.information.date.created": "Date Created", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.date.created": "Date Created", + + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.date.modified": "Last Modified", + + // "submission.sections.sherpa.record.information.uri": "URI", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.uri": "URI", + + // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + // TODO New key - Add a translation + "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + + + + // "submission.submit.breadcrumbs": "New submission", + // TODO New key - Add a translation + "submission.submit.breadcrumbs": "New submission", + + // "submission.submit.title": "New submission", + // TODO Source message changed - Revise the translation "submission.submit.title": "Beküldés", - - - + + + // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Töröl", - + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", "submission.workflow.generic.delete-help": "Ha el óhajtja vetni a tárgyat, válassz a \"Töröl\" gombot. Majd döntését igazolja.", - + // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Szerkesztés", - + // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", "submission.workflow.generic.edit-help": "Válassza ezt, hogy módosítsa a tárgy metaadatait.", - + // "submission.workflow.generic.view": "View", "submission.workflow.generic.view": "Megtekint", - + // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", "submission.workflow.generic.view-help": "Válassza ezt, hogy megtekintse a tárgy metaadatait.", - - - + + + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + // TODO New key - Add a translation + "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + + // "submission.workflow.generic.submit_select_reviewer-help": "", + // TODO New key - Add a translation + "submission.workflow.generic.submit_select_reviewer-help": "", + + + // "submission.workflow.generic.submit_score": "Rate", + // TODO New key - Add a translation + "submission.workflow.generic.submit_score": "Rate", + + // "submission.workflow.generic.submit_score-help": "", + // TODO New key - Add a translation + "submission.workflow.generic.submit_score-help": "", + + // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Jóváhagy", - + // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", "submission.workflow.tasks.claimed.approve_help": "Ha ellenőrizte a tárgyat és gyűjteménybe foglalásra alkalmas, válassza a \"Jóváhagy\" gombot.", - + // "submission.workflow.tasks.claimed.edit": "Edit", "submission.workflow.tasks.claimed.edit": "Szerkeszt", - + // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Válassza ezt, hogy módosítsa a tárgy metaadatait.", - + + // "submission.workflow.tasks.claimed.decline": "Decline", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.decline": "Decline", + + // "submission.workflow.tasks.claimed.decline_help": "", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.decline_help": "", + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", "submission.workflow.tasks.claimed.reject.reason.info": "Kérjük az alábbi mezőben jelölje meg az okot amiért a feltöltést visszautasítja és pontosítsa, amennyiben a feltöltő megoldhat valamilyen gondot és újra feltöltheti.", - + // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", "submission.workflow.tasks.claimed.reject.reason.placeholder": "Írja le az elutasítás okát", - + // "submission.workflow.tasks.claimed.reject.reason.submit": "Reject item", "submission.workflow.tasks.claimed.reject.reason.submit": "Tárgy elutasítása", - + // "submission.workflow.tasks.claimed.reject.reason.title": "Reason", "submission.workflow.tasks.claimed.reject.reason.title": "Ok", - + // "submission.workflow.tasks.claimed.reject.submit": "Reject", "submission.workflow.tasks.claimed.reject.submit": "Elutasítás", - + // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", "submission.workflow.tasks.claimed.reject_help": "Amennyiben ellenőrizte a tárgyat és úgy találta, hogy az nem alkalmas arra, hogy a gyűjteménybe foglalják, válassza az \"Elutasítás\" gombot. Utána szükséges lesz beírni egy üzenetet, amelyben megjelöli, miért nem alkalmas a tárgy és hogy a feltöltő változtathat-e valamit, hogy utána újra feltölthesse.", - + // "submission.workflow.tasks.claimed.return": "Return to pool", "submission.workflow.tasks.claimed.return": "Vissza a készlethez", - + // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", "submission.workflow.tasks.claimed.return_help": "Vigye a feladatot vissza a készletbe, hogy más felhasználó elvégezhesse azt.", - - - + + + // "submission.workflow.tasks.generic.error": "Error occurred during operation...", "submission.workflow.tasks.generic.error": "Művelet közben hiba keletkezett...", - + // "submission.workflow.tasks.generic.processing": "Processing...", "submission.workflow.tasks.generic.processing": "Feldolgozás...", - + // "submission.workflow.tasks.generic.submitter": "Submitter", "submission.workflow.tasks.generic.submitter": "Feltöltő", - + // "submission.workflow.tasks.generic.success": "Operation successful", "submission.workflow.tasks.generic.success": "Művelet sikeres", - - - + + + // "submission.workflow.tasks.pool.claim": "Claim", "submission.workflow.tasks.pool.claim": "Követelés", - + // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", "submission.workflow.tasks.pool.claim_help": "Ossza ki a feladatot önmagának.", - + // "submission.workflow.tasks.pool.hide-detail": "Hide detail", "submission.workflow.tasks.pool.hide-detail": "Részletek elrejtése", - + // "submission.workflow.tasks.pool.show-detail": "Show detail", "submission.workflow.tasks.pool.show-detail": "Részletek felfedése", - - - + + + // "submission.workspace.generic.view": "View", + // TODO New key - Add a translation + "submission.workspace.generic.view": "View", + + // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + // TODO New key - Add a translation + "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + + + // "subscriptions.title": "Subscriptions", + // TODO New key - Add a translation + "subscriptions.title": "Subscriptions", + + // "subscriptions.item": "Subscriptions for items", + // TODO New key - Add a translation + "subscriptions.item": "Subscriptions for items", + + // "subscriptions.collection": "Subscriptions for collections", + // TODO New key - Add a translation + "subscriptions.collection": "Kategóriafeliratkozások", + + // "subscriptions.community": "Subscriptions for communities", + // TODO New key - Add a translation + "subscriptions.community": "Kategóriafeliratkozások", + + // "subscriptions.subscription_type": "Subscription type", + // TODO New key - Add a translation + "subscriptions.subscription_type": "Subscription type", + + // "subscriptions.frequency": "Subscription frequency", + // TODO New key - Add a translation + "subscriptions.frequency": "Subscription frequency", + + // "subscriptions.frequency.D": "Daily", + // TODO New key - Add a translation + "subscriptions.frequency.D": "Daily", + + // "subscriptions.frequency.M": "Monthly", + // TODO New key - Add a translation + "subscriptions.frequency.M": "Monthly", + + // "subscriptions.frequency.W": "Weekly", + // TODO New key - Add a translation + "subscriptions.frequency.W": "Weekly", + + // "subscriptions.tooltip": "Subscribe", + // TODO New key - Add a translation + "subscriptions.tooltip": "Subscribe", + + // "subscriptions.modal.title": "Subscriptions", + // TODO New key - Add a translation + "subscriptions.modal.title": "Subscriptions", + + // "subscriptions.modal.type-frequency": "Type and frequency", + // TODO New key - Add a translation + "subscriptions.modal.type-frequency": "Type and frequency", + + // "subscriptions.modal.close": "Close", + // TODO New key - Add a translation + "subscriptions.modal.close": "Close", + + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", + // TODO New key - Add a translation + "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", + + // "subscriptions.modal.new-subscription-form.type.content": "Content", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.type.content": "Content", + + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + + // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + + // "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + + // "subscriptions.modal.new-subscription-form.submit": "Submit", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.submit": "Submit", + + // "subscriptions.modal.new-subscription-form.processing": "Processing...", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.processing": "Processing...", + + // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + // TODO New key - Add a translation + "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + + // "subscriptions.modal.delete.success": "Subscription deleted successfully", + // TODO New key - Add a translation + "subscriptions.modal.delete.success": "Subscription deleted successfully", + + // "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + // TODO New key - Add a translation + "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + + // "subscriptions.modal.create.error": "An error occurs during the subscription creation", + // TODO New key - Add a translation + "subscriptions.modal.create.error": "An error occurs during the subscription creation", + + // "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + // TODO New key - Add a translation + "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + + // "subscriptions.modal.update.error": "An error occurs during the subscription update", + // TODO New key - Add a translation + "subscriptions.modal.update.error": "An error occurs during the subscription update", + + // "subscriptions.table.dso": "Subject", + // TODO New key - Add a translation + "subscriptions.table.dso": "Subject", + + // "subscriptions.table.subscription_type": "Subscription Type", + // TODO New key - Add a translation + "subscriptions.table.subscription_type": "Subscription Type", + + // "subscriptions.table.subscription_frequency": "Subscription Frequency", + // TODO New key - Add a translation + "subscriptions.table.subscription_frequency": "Subscription Frequency", + + // "subscriptions.table.action": "Action", + // TODO New key - Add a translation + "subscriptions.table.action": "Action", + + // "subscriptions.table.edit": "Edit", + // TODO New key - Add a translation + "subscriptions.table.edit": "Edit", + + // "subscriptions.table.delete": "Delete", + // TODO New key - Add a translation + "subscriptions.table.delete": "Delete", + + // "subscriptions.table.not-available": "Not available", + // TODO New key - Add a translation + "subscriptions.table.not-available": "Not available", + + // "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + // TODO New key - Add a translation + "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + + // "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", + // TODO New key - Add a translation + "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", + + + // "thumbnail.default.alt": "Thumbnail Image", + "thumbnail.default.alt": "Thumbnail kép", + + // "thumbnail.default.placeholder": "No Thumbnail Available", + "thumbnail.default.placeholder": "Kép nélkül", + + // "thumbnail.project.alt": "Project Logo", + "thumbnail.project.alt": "Projekt Logo", + + // "thumbnail.project.placeholder": "Project Placeholder Image", + // TODO New key - Add a translation + "thumbnail.project.placeholder": "Project Placeholder Image", + + // "thumbnail.orgunit.alt": "OrgUnit Logo", + "thumbnail.orgunit.alt": "OrgUnit Logo", + + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + // TODO New key - Add a translation + "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + + // "thumbnail.person.alt": "Profile Picture", + "thumbnail.person.alt": "Profilkép", + + // "thumbnail.person.placeholder": "No Profile Picture Available", + // TODO New key - Add a translation + "thumbnail.person.placeholder": "No Profile Picture Available", + + + // "title": "DSpace", "title": "DSpace", - - - + + + // "vocabulary-treeview.header": "Hierarchical tree view", "vocabulary-treeview.header": "Hierarchikus fa nézet", - + // "vocabulary-treeview.load-more": "Load more", "vocabulary-treeview.load-more": "Továbbiak betöltése", - + // "vocabulary-treeview.search.form.reset": "Reset", "vocabulary-treeview.search.form.reset": "Reset", - + // "vocabulary-treeview.search.form.search": "Search", "vocabulary-treeview.search.form.search": "Keresés", - + // "vocabulary-treeview.search.no-result": "There were no items to show", "vocabulary-treeview.search.no-result": "Nincsenek megjelenítendő elemek", - + // "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", "vocabulary-treeview.tree.description.nsi": "Norvégiai tudományos index", - + // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", "vocabulary-treeview.tree.description.srsc": "Kutatási tárgy kategóriák", - - - + + // "vocabulary-treeview.info": "Select a subject to add as search filter", + // TODO New key - Add a translation + "vocabulary-treeview.info": "Select a subject to add as search filter", + // "uploader.browse": "browse", "uploader.browse": "böngészés", - + // "uploader.drag-message": "Drag & Drop your files here", "uploader.drag-message": "Húzza ide az állományokat", - + + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Töröl", + // "uploader.or": ", or ", - // TODO Source message changed - Revise the translation "uploader.or": ", vagy", - + // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", // TODO Source message changed - Revise the translation "uploader.processing": "Feldolgozás", - + // "uploader.queue-length": "Queue length", "uploader.queue-length": "Sor hossza", - + // "virtual-metadata.delete-item.info": "Select the types for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-item.info": "Válassza ki azokat a típusokat, amelyekhez óhajtja a virtuális metaadatok elmentését valódi metaadatokként", - + // "virtual-metadata.delete-item.modal-head": "The virtual metadata of this relation", "virtual-metadata.delete-item.modal-head": "Ennek a kapcsolatnak a virtuális metaadatai", - + // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Válassza ki azokat a tárgyakat, amelyekhez óhajtja a virtuális metaadatok elmentését valódi metaadatokként", - - - + + + + // "supervisedWorkspace.search.results.head": "Supervised Items", + // TODO New key - Add a translation + "supervisedWorkspace.search.results.head": "Supervised Items", + + // "workspace.search.results.head": "Your submissions", + // TODO New key - Add a translation + "workspace.search.results.head": "Your submissions", + // "workflowAdmin.search.results.head": "Administer Workflow", "workflowAdmin.search.results.head": "Munkafolyamat szervezése", - - - + + // "workflow.search.results.head": "Workflow tasks", + // TODO New key - Add a translation + "workflow.search.results.head": "Workflow tasks", + + // "supervision.search.results.head": "Workflow and Workspace tasks", + // TODO New key - Add a translation + "supervision.search.results.head": "Workflow and Workspace tasks", + + + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + // TODO New key - Add a translation + "workflow-item.edit.breadcrumbs": "Edit workflowitem", + + // "workflow-item.edit.title": "Edit workflowitem", + // TODO New key - Add a translation + "workflow-item.edit.title": "Edit workflowitem", + // "workflow-item.delete.notification.success.title": "Deleted", "workflow-item.delete.notification.success.title": "Törölve", - + // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", "workflow-item.delete.notification.success.content": "Munkafolyamat elem sikeresen törölve", - + // "workflow-item.delete.notification.error.title": "Something went wrong", "workflow-item.delete.notification.error.title": "Valami hiba keletkezett", - + // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", "workflow-item.delete.notification.error.content": "Munkafolyamat elem törlése nem sikerült", - + // "workflow-item.delete.title": "Delete workflow item", "workflow-item.delete.title": "Munkafolyamat elem törlése", - + // "workflow-item.delete.header": "Delete workflow item", "workflow-item.delete.header": "Munkafolyamat elem törlése", - + // "workflow-item.delete.button.cancel": "Cancel", "workflow-item.delete.button.cancel": "Mégse", - + // "workflow-item.delete.button.confirm": "Delete", "workflow-item.delete.button.confirm": "Töröl", - - + + // "workflow-item.send-back.notification.success.title": "Sent back to submitter", "workflow-item.send-back.notification.success.title": "Visszaküldve a feladónak", - + // "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", "workflow-item.send-back.notification.success.content": "Munkafolyamat elem sikeresen visszaküldve a feladónak", - + // "workflow-item.send-back.notification.error.title": "Something went wrong", "workflow-item.send-back.notification.error.title": "Valami hiba keletkezett", - + // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", "workflow-item.send-back.notification.error.content": "Munkafolyamat elem visszaküldése a feladónak nem sikerült", - + // "workflow-item.send-back.title": "Send workflow item back to submitter", "workflow-item.send-back.title": "Munkafolyamt elemet visszaküld a feladónak", - + // "workflow-item.send-back.header": "Send workflow item back to submitter", "workflow-item.send-back.header": "Munkafolyamt elemet visszaküld a feladónak", - + // "workflow-item.send-back.button.cancel": "Cancel", "workflow-item.send-back.button.cancel": "Mégse", - - // "workflow-item.send-back.button.confirm": "Send back" + + // "workflow-item.send-back.button.confirm": "Send back", // TODO Source message changed - Revise the translation "workflow-item.send-back.button.confirm": "Visszaküld", - -} + // "workflow-item.view.breadcrumbs": "Workflow View", + // TODO New key - Add a translation + "workflow-item.view.breadcrumbs": "Workflow View", + + // "workspace-item.view.breadcrumbs": "Workspace View", + // TODO New key - Add a translation + "workspace-item.view.breadcrumbs": "Workspace View", + + // "workspace-item.view.title": "Workspace View", + // TODO New key - Add a translation + "workspace-item.view.title": "Workspace View", + + + // "workflow-item.advanced.title": "Advanced workflow", + // TODO New key - Add a translation + "workflow-item.advanced.title": "Advanced workflow", + + + // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + + // "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + + // "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + + // "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + + // "workflow-item.selectrevieweraction.title": "Select Reviewer", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.title": "Select Reviewer", + + // "workflow-item.selectrevieweraction.header": "Select Reviewer", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.header": "Select Reviewer", + + // "workflow-item.selectrevieweraction.button.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.button.cancel": "Cancel", + + // "workflow-item.selectrevieweraction.button.confirm": "Confirm", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.button.confirm": "Confirm", + + + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.success.title": "Rating review", + + // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + + // "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + + // "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + + // "workflow-item.scorereviewaction.title": "Rate this item", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.title": "Rate this item", + + // "workflow-item.scorereviewaction.header": "Rate this item", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.header": "Rate this item", + + // "workflow-item.scorereviewaction.button.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.button.cancel": "Cancel", + + // "workflow-item.scorereviewaction.button.confirm": "Confirm", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.button.confirm": "Confirm", + + // "idle-modal.header": "Session will expire soon", + // TODO New key - Add a translation + "idle-modal.header": "Session will expire soon", + + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + // TODO New key - Add a translation + "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + + // "idle-modal.log-out": "Log out", + // TODO New key - Add a translation + "idle-modal.log-out": "Log out", + + // "idle-modal.extend-session": "Extend session", + // TODO New key - Add a translation + "idle-modal.extend-session": "Extend session", + + // "researcher.profile.action.processing" : "Processing...", + // TODO New key - Add a translation + "researcher.profile.action.processing" : "Processing...", + + // "researcher.profile.associated": "Researcher profile associated", + // TODO New key - Add a translation + "researcher.profile.associated": "Researcher profile associated", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + // TODO New key - Add a translation + "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + + // "researcher.profile.create.new": "Create new", + // TODO New key - Add a translation + "researcher.profile.create.new": "Create new", + + // "researcher.profile.create.success": "Researcher profile created successfully", + // TODO New key - Add a translation + "researcher.profile.create.success": "Researcher profile created successfully", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + // TODO New key - Add a translation + "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + + // "researcher.profile.delete": "Delete", + // TODO New key - Add a translation + "researcher.profile.delete": "Delete", + + // "researcher.profile.expose": "Expose", + // TODO New key - Add a translation + "researcher.profile.expose": "Expose", + + // "researcher.profile.hide": "Hide", + // TODO New key - Add a translation + "researcher.profile.hide": "Hide", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + // TODO New key - Add a translation + "researcher.profile.not.associated": "Researcher profile not yet associated", + + // "researcher.profile.view": "View", + // TODO New key - Add a translation + "researcher.profile.view": "View", + + // "researcher.profile.private.visibility" : "PRIVATE", + // TODO New key - Add a translation + "researcher.profile.private.visibility" : "PRIVATE", + + // "researcher.profile.public.visibility" : "PUBLIC", + // TODO New key - Add a translation + "researcher.profile.public.visibility" : "PUBLIC", + + // "researcher.profile.status": "Status:", + // TODO New key - Add a translation + "researcher.profile.status": "Status:", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + // TODO New key - Add a translation + "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + + // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + // TODO New key - Add a translation + "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + + // "researcherprofile.error.claim.title" : "Error", + // TODO New key - Add a translation + "researcherprofile.error.claim.title" : "Error", + + // "researcherprofile.success.claim.body" : "Profile claimed with success", + // TODO New key - Add a translation + "researcherprofile.success.claim.body" : "Profile claimed with success", + + // "researcherprofile.success.claim.title" : "Success", + // TODO New key - Add a translation + "researcherprofile.success.claim.title" : "Success", + + // "person.page.orcid.create": "Create an ORCID ID", + // TODO New key - Add a translation + "person.page.orcid.create": "Create an ORCID ID", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + // TODO New key - Add a translation + "person.page.orcid.granted-authorizations": "Granted authorizations", + + // "person.page.orcid.grant-authorizations" : "Grant authorizations", + // TODO New key - Add a translation + "person.page.orcid.grant-authorizations" : "Grant authorizations", + + // "person.page.orcid.link": "Connect to ORCID ID", + // TODO New key - Add a translation + "person.page.orcid.link": "Connect to ORCID ID", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + // TODO New key - Add a translation + "person.page.orcid.link.processing": "Linking profile to ORCID...", + + // "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + // TODO New key - Add a translation + "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + + // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + // TODO New key - Add a translation + "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + // TODO New key - Add a translation + "person.page.orcid.unlink": "Disconnect from ORCID", + + // "person.page.orcid.unlink.processing": "Processing...", + // TODO New key - Add a translation + "person.page.orcid.unlink.processing": "Processing...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + // TODO New key - Add a translation + "person.page.orcid.missing-authorizations": "Missing authorizations", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + // TODO New key - Add a translation + "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + + // "person.page.orcid.no-missing-authorizations-message": "Great! This box is empty, so you have granted all access rights to use all functions offers by your institution.", + // TODO New key - Add a translation + "person.page.orcid.no-missing-authorizations-message": "Great! This box is empty, so you have granted all access rights to use all functions offers by your institution.", + + // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", + // TODO New key - Add a translation + "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + // TODO New key - Add a translation + "person.page.orcid.profile-preferences": "Profile preferences", + + // "person.page.orcid.funding-preferences": "Funding preferences", + // TODO New key - Add a translation + "person.page.orcid.funding-preferences": "Funding preferences", + + // "person.page.orcid.publications-preferences": "Publication preferences", + // TODO New key - Add a translation + "person.page.orcid.publications-preferences": "Publication preferences", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + // TODO New key - Add a translation + "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + + // "person.page.orcid.save.preference.changes": "Update settings", + // TODO New key - Add a translation + "person.page.orcid.save.preference.changes": "Update settings", + + // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + // TODO New key - Add a translation + "person.page.orcid.sync-profile.affiliation" : "Affiliation", + + // "person.page.orcid.sync-profile.biographical" : "Biographical data", + // TODO New key - Add a translation + "person.page.orcid.sync-profile.biographical" : "Biographical data", + + // "person.page.orcid.sync-profile.education" : "Education", + // TODO New key - Add a translation + "person.page.orcid.sync-profile.education" : "Education", + + // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + // TODO New key - Add a translation + "person.page.orcid.sync-profile.identifiers" : "Identifiers", + + // "person.page.orcid.sync-fundings.all" : "All fundings", + // TODO New key - Add a translation + "person.page.orcid.sync-fundings.all" : "All fundings", + + // "person.page.orcid.sync-fundings.mine" : "My fundings", + // TODO New key - Add a translation + "person.page.orcid.sync-fundings.mine" : "My fundings", + + // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + // TODO New key - Add a translation + "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + + // "person.page.orcid.sync-fundings.disabled" : "Disabled", + // TODO New key - Add a translation + "person.page.orcid.sync-fundings.disabled" : "Disabled", + + // "person.page.orcid.sync-publications.all" : "All publications", + // TODO New key - Add a translation + "person.page.orcid.sync-publications.all" : "All publications", + + // "person.page.orcid.sync-publications.mine" : "My publications", + // TODO New key - Add a translation + "person.page.orcid.sync-publications.mine" : "My publications", + + // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + // TODO New key - Add a translation + "person.page.orcid.sync-publications.my_selected" : "Selected publications", + + // "person.page.orcid.sync-publications.disabled" : "Disabled", + // TODO New key - Add a translation + "person.page.orcid.sync-publications.disabled" : "Disabled", + + // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + + // "person.page.orcid.sync-queue.table.header.type" : "Type", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.table.header.type" : "Type", + + // "person.page.orcid.sync-queue.table.header.description" : "Description", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.table.header.description" : "Description", + + // "person.page.orcid.sync-queue.table.header.action" : "Action", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.table.header.action" : "Action", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + + // "person.page.orcid.sync-queue.description.country": "Country", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.country": "Country", + + // "person.page.orcid.sync-queue.description.education": "Educations", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.education": "Educations", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.external_ids": "External ids", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.other_names": "Other names", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.qualification": "Qualifications", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.description.keywords": "Keywords", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.publication": "Publication", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.project": "Project", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.education": "Education", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.country": "Country", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + + // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + + // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + + // "person.page.orcid.sync-queue.send.unauthorized-error.content": "Click here to grant again the required permissions. If the problem persists, contact the administrator", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Click here to grant again the required permissions. If the problem persists, contact the administrator", + + // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + + // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + + // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + + // "person.page.orcid.sync-queue.send.validation-error": "The data that you want to synchronize with ORCID is not valid", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error": "The data that you want to synchronize with ORCID is not valid", + + // "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + + // "person.page.orcid.sync-queue.send.validation-error.external-id.required": "The resource to be sent requires at least one identifier", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "The resource to be sent requires at least one identifier", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + + // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", + + // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + + // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + + // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + + // "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "The address of the organization to be sent requires a city", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "The address of the organization to be sent requires a city", + + // "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "The address of the organization to be sent requires a valid 2 digits ISO 3166 country", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "The address of the organization to be sent requires a valid 2 digits ISO 3166 country", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "An identifier to disambiguate organizations is required. Supported ids are GRID, Ringgold, Legal Entity identifiers (LEIs) and Crossref Funder Registry identifiers", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "An identifier to disambiguate organizations is required. Supported ids are GRID, Ringgold, Legal Entity identifiers (LEIs) and Crossref Funder Registry identifiers", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "The organization's identifiers requires a value", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "The organization's identifiers requires a value", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", + // TODO New key - Add a translation + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode": "Synchronization mode", + + // "person.page.orcid.synchronization-mode.batch": "Batch", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode.batch": "Batch", + + // "person.page.orcid.synchronization-mode.label": "Synchronization mode", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode.label": "Synchronization mode", + + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include \"Manual\" (you must send your data to ORCID manually), or \"Batch\" (the system will send your data to ORCID via a scheduled script).", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include \"Manual\" (you must send your data to ORCID manually), or \"Batch\" (the system will send your data to ORCID via a scheduled script).", + + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", + + // "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + // TODO New key - Add a translation + "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + // TODO New key - Add a translation + "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + // TODO New key - Add a translation + "person.page.orcid.synchronization-mode.manual": "Manual", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + // TODO New key - Add a translation + "person.page.orcid.scope.authenticate": "Get your ORCID iD", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + // TODO New key - Add a translation + "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + // TODO New key - Add a translation + "person.page.orcid.scope.activities-update": "Add/update your research activities", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + // TODO New key - Add a translation + "person.page.orcid.scope.person-update": "Add/update other information about you", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + // TODO New key - Add a translation + "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + // TODO New key - Add a translation + "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + // TODO New key - Add a translation + "person.orcid.sync.setting": "ORCID Synchronization settings", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + // TODO New key - Add a translation + "person.orcid.registry.queue": "ORCID Registry Queue", + + // "person.orcid.registry.auth": "ORCID Authorizations", + // TODO New key - Add a translation + "person.orcid.registry.auth": "ORCID Authorizations", + + // "home.recent-submissions.head": "Recent Submissions", + "home.recent-submissions.head": "Friss feltöltések", + + // "listable-notification-object.default-message": "This object couldn't be retrieved", + // TODO New key - Add a translation + "listable-notification-object.default-message": "This object couldn't be retrieved", + + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + // TODO New key - Add a translation + "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + + // "system-wide-alert-banner.countdown.prefix": "In", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.prefix": "In", + + // "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + + + + // "menu.section.system-wide-alert": "System-wide Alert", + // TODO New key - Add a translation + "menu.section.system-wide-alert": "System-wide Alert", + + // "system-wide-alert.form.header": "System-wide Alert", + // TODO New key - Add a translation + "system-wide-alert.form.header": "System-wide Alert", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + // TODO New key - Add a translation + "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + + // "system-wide-alert.form.cancel": "Cancel", + // TODO New key - Add a translation + "system-wide-alert.form.cancel": "Cancel", + + // "system-wide-alert.form.save": "Save", + // TODO New key - Add a translation + "system-wide-alert.form.save": "Save", + + // "system-wide-alert.form.label.active": "ACTIVE", + // TODO New key - Add a translation + "system-wide-alert.form.label.active": "ACTIVE", + + // "system-wide-alert.form.label.inactive": "INACTIVE", + // TODO New key - Add a translation + "system-wide-alert.form.label.inactive": "INACTIVE", + + // "system-wide-alert.form.error.message": "The system wide alert must have a message", + // TODO New key - Add a translation + "system-wide-alert.form.error.message": "The system wide alert must have a message", + + // "system-wide-alert.form.label.message": "Alert message", + // TODO New key - Add a translation + "system-wide-alert.form.label.message": "Alert message", + + // "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + // TODO New key - Add a translation + "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + + // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + // TODO New key - Add a translation + "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + + // "system-wide-alert.form.label.preview": "System-wide alert preview", + // TODO New key - Add a translation + "system-wide-alert.form.label.preview": "System-wide alert preview", + + // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + // TODO New key - Add a translation + "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + + // "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + // TODO New key - Add a translation + "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + + // "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + // TODO New key - Add a translation + "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + + // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + // TODO New key - Add a translation + "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + // TODO New key - Add a translation + "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + + // "admin.system-wide-alert.title": "System-wide Alerts", + // TODO New key - Add a translation + "admin.system-wide-alert.title": "System-wide Alerts", + + +} \ No newline at end of file From 6493b62e6a0a5e535756fc3d6a2cd477ab426de7 Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 9 Mar 2023 21:00:36 +0000 Subject: [PATCH 420/833] adding sortConfig --- src/app/collection-page/collection-page.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/collection-page/collection-page.component.ts b/src/app/collection-page/collection-page.component.ts index ce3b4e19b0..4987796c2a 100644 --- a/src/app/collection-page/collection-page.component.ts +++ b/src/app/collection-page/collection-page.component.ts @@ -77,7 +77,8 @@ export class CollectionPageComponent implements OnInit { currentPage: 1, pageSize: this.appConfig.browseBy.pageSize, }); - + + this.sortConfig = new SortOptions('dc.date.accessioned', SortDirection.DESC); } ngOnInit(): void { From 6e771405910990b422124b39ebd5572d8f691f8d Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 9 Mar 2023 21:12:29 +0000 Subject: [PATCH 421/833] avoiding trailing space --- src/app/collection-page/collection-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/collection-page/collection-page.component.ts b/src/app/collection-page/collection-page.component.ts index 4987796c2a..cce6989061 100644 --- a/src/app/collection-page/collection-page.component.ts +++ b/src/app/collection-page/collection-page.component.ts @@ -77,7 +77,7 @@ export class CollectionPageComponent implements OnInit { currentPage: 1, pageSize: this.appConfig.browseBy.pageSize, }); - + this.sortConfig = new SortOptions('dc.date.accessioned', SortDirection.DESC); } From 1ca8529440a7ca4e70da004dd94f26b3bdaf3c65 Mon Sep 17 00:00:00 2001 From: cris Date: Fri, 10 Mar 2023 03:22:47 +0000 Subject: [PATCH 422/833] collection is not modifiable in workflowitem section --- src/app/submission/edit/submission-edit.component.html | 1 + src/app/submission/edit/submission-edit.component.ts | 7 ++++++- .../collection/submission-form-collection.component.html | 2 +- .../collection/submission-form-collection.component.ts | 7 +++++++ src/app/submission/form/submission-form.component.html | 1 + src/app/submission/form/submission-form.component.ts | 8 ++++++++ .../workflowitems-edit-page-routing.module.ts | 6 +++++- 7 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/app/submission/edit/submission-edit.component.html b/src/app/submission/edit/submission-edit.component.html index b74d3861f8..9c0e9eae72 100644 --- a/src/app/submission/edit/submission-edit.component.html +++ b/src/app/submission/edit/submission-edit.component.html @@ -5,5 +5,6 @@ [submissionDefinition]="submissionDefinition" [submissionErrors]="submissionErrors" [item]="item" + [collectionModifiable]="collectionModifiable" [submissionId]="submissionId"> diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index 840d57c661..915d0324be 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -34,6 +34,8 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { * The collection id this submission belonging to * @type {string} */ + public collectionModifiable: boolean; + public collectionId: string; /** @@ -102,13 +104,16 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { private itemDataService: ItemDataService, private submissionService: SubmissionService, private translate: TranslateService, - private submissionJsonPatchOperationsService: SubmissionJsonPatchOperationsService) { + private submissionJsonPatchOperationsService: SubmissionJsonPatchOperationsService) { } /** * Retrieve workspaceitem/workflowitem from server and initialize all instance variables */ ngOnInit() { + + this.collectionModifiable = this.route.snapshot.data['collectionModifiable']; + this.subs.push( this.route.paramMap.pipe( switchMap((params: ParamMap) => this.submissionService.retrieveSubmission(params.get('id'))), diff --git a/src/app/submission/form/collection/submission-form-collection.component.html b/src/app/submission/form/collection/submission-form-collection.component.html index 15b6ff280e..aa33905daf 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.html +++ b/src/app/submission/form/collection/submission-form-collection.component.html @@ -25,7 +25,7 @@ class="btn btn-outline-primary" (blur)="onClose()" (click)="onClose()" - [disabled]="(processingChange$ | async)" + [disabled]="(processingChange$ | async) || collectionModifiable" ngbDropdownToggle> {{ selectedCollectionName$ | async }} diff --git a/src/app/submission/form/collection/submission-form-collection.component.ts b/src/app/submission/form/collection/submission-form-collection.component.ts index adcffd9b5d..fb2b2a815a 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.ts @@ -51,6 +51,12 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { * @type {SubmissionDefinitionsModel} */ @Input() currentDefinition: string; + + /** + * Checks if the collection can be modifiable by the user + * @type {booelan} + */ + @Input() collectionModifiable: boolean; /** * The submission id @@ -144,6 +150,7 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { ngOnInit() { this.pathCombiner = new JsonPatchOperationPathCombiner('sections', 'collection'); this.available$ = this.sectionsService.isSectionTypeAvailable(this.submissionId, SectionsType.collection); + console.log("this.collectionModifiable", this.collectionModifiable) } /** diff --git a/src/app/submission/form/submission-form.component.html b/src/app/submission/form/submission-form.component.html index a80fe35f4e..f75af08f8e 100644 --- a/src/app/submission/form/submission-form.component.html +++ b/src/app/submission/form/submission-form.component.html @@ -11,6 +11,7 @@ diff --git a/src/app/submission/form/submission-form.component.ts b/src/app/submission/form/submission-form.component.ts index 42ee9f05ac..dba803e5c1 100644 --- a/src/app/submission/form/submission-form.component.ts +++ b/src/app/submission/form/submission-form.component.ts @@ -34,8 +34,16 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { * @type {string} */ @Input() collectionId: string; + @Input() item: Item; + /** + * Checks if the collection can be modifiable by the user + * @type {booelan} + */ + @Input() collectionModifiable: boolean; + + /** * The list of submission's sections * @type {WorkspaceitemSectionsObject} diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts index 06536d5816..89c77f7c3d 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts @@ -34,7 +34,11 @@ import { resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'workflow-item.edit.title', breadcrumbKey: 'workflow-item.edit' } + data: { + title: 'workflow-item.edit.title', + breadcrumbKey: 'workflow-item.edit', + collectionModifiable: true + } }, { canActivate: [AuthenticatedGuard], From 1c2d96ce43024c279f79cef0828bae956df25a51 Mon Sep 17 00:00:00 2001 From: cris Date: Fri, 10 Mar 2023 03:39:03 +0000 Subject: [PATCH 423/833] solving lint issues --- src/app/submission/edit/submission-edit.component.ts | 6 +++--- .../form/collection/submission-form-collection.component.ts | 3 +-- .../workflowitems-edit-page-routing.module.ts | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index 915d0324be..426dfe7371 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -104,7 +104,7 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { private itemDataService: ItemDataService, private submissionService: SubmissionService, private translate: TranslateService, - private submissionJsonPatchOperationsService: SubmissionJsonPatchOperationsService) { + private submissionJsonPatchOperationsService: SubmissionJsonPatchOperationsService) { } /** @@ -112,8 +112,8 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { */ ngOnInit() { - this.collectionModifiable = this.route.snapshot.data['collectionModifiable']; - + this.collectionModifiable = this.route.snapshot.data.collectionModifiable; + this.subs.push( this.route.paramMap.pipe( switchMap((params: ParamMap) => this.submissionService.retrieveSubmission(params.get('id'))), diff --git a/src/app/submission/form/collection/submission-form-collection.component.ts b/src/app/submission/form/collection/submission-form-collection.component.ts index fb2b2a815a..695b910179 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.ts @@ -51,7 +51,7 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { * @type {SubmissionDefinitionsModel} */ @Input() currentDefinition: string; - + /** * Checks if the collection can be modifiable by the user * @type {booelan} @@ -150,7 +150,6 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { ngOnInit() { this.pathCombiner = new JsonPatchOperationPathCombiner('sections', 'collection'); this.available$ = this.sectionsService.isSectionTypeAvailable(this.submissionId, SectionsType.collection); - console.log("this.collectionModifiable", this.collectionModifiable) } /** diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts index 89c77f7c3d..5d5a7443de 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts @@ -34,7 +34,7 @@ import { resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { + data: { title: 'workflow-item.edit.title', breadcrumbKey: 'workflow-item.edit', collectionModifiable: true From 7fb9c8a38a57d6ed2fc19e5a68f67ebcd92eb688 Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Fri, 10 Mar 2023 11:35:32 +0100 Subject: [PATCH 424/833] Fix DSO edit menu dropdowns --- src/app/shared/dso-page/dso-page.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/shared/dso-page/dso-page.module.ts b/src/app/shared/dso-page/dso-page.module.ts index 6820e8eb53..d700b34e77 100644 --- a/src/app/shared/dso-page/dso-page.module.ts +++ b/src/app/shared/dso-page/dso-page.module.ts @@ -9,7 +9,7 @@ import { import { DsoEditMenuExpandableSectionComponent } from '../dso-page/dso-edit-menu/dso-edit-expandable-menu-section/dso-edit-menu-expandable-section.component'; -import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbDropdownModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; const COMPONENTS = [ DsoEditMenuComponent, @@ -25,6 +25,7 @@ const MODULES = [ RouterModule, CommonModule, NgbTooltipModule, + NgbDropdownModule, ]; const PROVIDERS = [ From f561ff8f35ca83674e5565dc32b64422e0e1cfda Mon Sep 17 00:00:00 2001 From: cris Date: Sun, 12 Mar 2023 19:39:26 +0000 Subject: [PATCH 425/833] collectionModifiable can be null --- src/app/submission/edit/submission-edit.component.ts | 9 +++++++-- .../collection/submission-form-collection.component.ts | 2 +- src/app/submission/form/submission-form.component.ts | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index 426dfe7371..c4ee49dbe8 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -34,9 +34,14 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { * The collection id this submission belonging to * @type {string} */ - public collectionModifiable: boolean; - public collectionId: string; + + /** + * Checks if the collection can be modifiable by the user + * @type {booelan} + */ + public collectionModifiable: boolean | null = null; + /** * The list of submission's sections diff --git a/src/app/submission/form/collection/submission-form-collection.component.ts b/src/app/submission/form/collection/submission-form-collection.component.ts index 695b910179..4eac4c506a 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.ts +++ b/src/app/submission/form/collection/submission-form-collection.component.ts @@ -56,7 +56,7 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit { * Checks if the collection can be modifiable by the user * @type {booelan} */ - @Input() collectionModifiable: boolean; + @Input() collectionModifiable: boolean | null = null; /** * The submission id diff --git a/src/app/submission/form/submission-form.component.ts b/src/app/submission/form/submission-form.component.ts index dba803e5c1..0e17e128bc 100644 --- a/src/app/submission/form/submission-form.component.ts +++ b/src/app/submission/form/submission-form.component.ts @@ -41,7 +41,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy { * Checks if the collection can be modifiable by the user * @type {booelan} */ - @Input() collectionModifiable: boolean; + @Input() collectionModifiable: boolean | null = null; /** From 22da2f7160152f97d249447a75079c596de75d6e Mon Sep 17 00:00:00 2001 From: cris Date: Sun, 12 Mar 2023 19:49:30 +0000 Subject: [PATCH 426/833] avoiding lint issues --- src/app/submission/edit/submission-edit.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index c4ee49dbe8..bb8f7f9cc4 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -35,7 +35,7 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { * @type {string} */ public collectionId: string; - + /** * Checks if the collection can be modifiable by the user * @type {booelan} From 12518dcc86dd47246072ecd458a6c5af423b7e0e Mon Sep 17 00:00:00 2001 From: cris Date: Sun, 12 Mar 2023 20:49:01 +0000 Subject: [PATCH 427/833] if collectionModiable does not exists is set as null --- src/app/submission/edit/submission-edit.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index bb8f7f9cc4..9e4873ddf3 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -117,7 +117,7 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { */ ngOnInit() { - this.collectionModifiable = this.route.snapshot.data.collectionModifiable; + this.collectionModifiable = this.route.snapshot.data.collectionModifiable ?? null; this.subs.push( this.route.paramMap.pipe( From 6983b401362905e4fc56767ffdf028ab21988d7f Mon Sep 17 00:00:00 2001 From: cris Date: Sun, 12 Mar 2023 21:13:17 +0000 Subject: [PATCH 428/833] if data does not exist the undefined error is avoid --- src/app/submission/edit/submission-edit.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/submission/edit/submission-edit.component.ts b/src/app/submission/edit/submission-edit.component.ts index 9e4873ddf3..93200e5e5c 100644 --- a/src/app/submission/edit/submission-edit.component.ts +++ b/src/app/submission/edit/submission-edit.component.ts @@ -117,7 +117,7 @@ export class SubmissionEditComponent implements OnDestroy, OnInit { */ ngOnInit() { - this.collectionModifiable = this.route.snapshot.data.collectionModifiable ?? null; + this.collectionModifiable = this.route.snapshot.data?.collectionModifiable ?? null; this.subs.push( this.route.paramMap.pipe( From e4657b7d51b303981da0196157dc67521ff67a75 Mon Sep 17 00:00:00 2001 From: cris Date: Sun, 12 Mar 2023 23:21:22 +0000 Subject: [PATCH 429/833] whitespace differences hiddne --- .../browse-by-metadata-page.component.ts | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index 05f8aacec7..aff978e5c8 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -109,7 +109,7 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { /** * The authority key (may be undefined) associated with {@link #value}. */ - authority: string; + authority: string; /** * The current startsWith option (fetched and updated from query-params) @@ -122,19 +122,19 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { fetchThumbnails: boolean; public constructor(protected route: ActivatedRoute, - protected browseService: BrowseService, - protected dsoService: DSpaceObjectDataService, - protected paginationService: PaginationService, - protected router: Router, - @Inject(APP_CONFIG) public appConfig: AppConfig) { + protected browseService: BrowseService, + protected dsoService: DSpaceObjectDataService, + protected paginationService: PaginationService, + protected router: Router, + @Inject(APP_CONFIG) public appConfig: AppConfig) { this.fetchThumbnails = this.appConfig.browseBy.showThumbnails; this.paginationConfig = Object.assign(new PaginationComponentOptions(), { - id: BBM_PAGINATION_ID, - currentPage: 1, - pageSize: this.appConfig.browseBy.pageSize, - }); - } + id: BBM_PAGINATION_ID, + currentPage: 1, + pageSize: this.appConfig.browseBy.pageSize, + }); + } ngOnInit(): void { @@ -149,28 +149,28 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { return [Object.assign({}, routeParams, queryParams),currentPage,currentSort]; }) ).subscribe(([params, currentPage, currentSort]: [Params, PaginationComponentOptions, SortOptions]) => { - this.browseId = params.id || this.defaultBrowseId; - this.authority = params.authority; - - if (typeof params.value === 'string'){ - this.value = params.value.trim(); - } - - this.value = +params.value || params.value || ''; - - if (typeof params.startsWith === 'string'){ - this.startsWith = params.startsWith.trim(); - } - - if (isNotEmpty(this.value)) { - this.updatePageWithItems( - browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), this.value, this.authority); - } else { - this.updatePage(browseParamsToOptions(params, currentPage, currentSort, this.browseId, false)); - } - this.updateParent(params.scope); - this.updateLogo(); - })); + this.browseId = params.id || this.defaultBrowseId; + this.authority = params.authority; + + if (typeof params.value === 'string'){ + this.value = params.value.trim(); + } + + this.value = +params.value || params.value || ''; + + if (typeof params.startsWith === 'string'){ + this.startsWith = params.startsWith.trim(); + } + + if (isNotEmpty(this.value)) { + this.updatePageWithItems( + browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), this.value, this.authority); + } else { + this.updatePage(browseParamsToOptions(params, currentPage, currentSort, this.browseId, false)); + } + this.updateParent(params.scope); + this.updateLogo(); + })); this.updateStartsWithTextOptions(); } @@ -222,8 +222,8 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { true, true, ...linksToFollow() as FollowLinkConfig[]).pipe( - getFirstSucceededRemoteData() - ); + getFirstSucceededRemoteData() + ); } } @@ -287,9 +287,9 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { * @returns BrowseEntrySearchOptions instance */ export function getBrowseSearchOptions(defaultBrowseId: string, - paginationConfig: PaginationComponentOptions, - sortConfig: SortOptions, - fetchThumbnails?: boolean) { + paginationConfig: PaginationComponentOptions, + sortConfig: SortOptions, + fetchThumbnails?: boolean) { if (!hasValue(fetchThumbnails)) { fetchThumbnails = false; } @@ -306,10 +306,10 @@ export function getBrowseSearchOptions(defaultBrowseId: string, * @param fetchThumbnail Optional parameter for requesting thumbnail images */ export function browseParamsToOptions(params: any, - paginationConfig: PaginationComponentOptions, - sortConfig: SortOptions, - metadata?: string, - fetchThumbnail?: boolean): BrowseEntrySearchOptions { + paginationConfig: PaginationComponentOptions, + sortConfig: SortOptions, + metadata?: string, + fetchThumbnail?: boolean): BrowseEntrySearchOptions { return new BrowseEntrySearchOptions( metadata, paginationConfig, From ebd8cbaaaeac1921736e61f3f98148ee1ce6e796 Mon Sep 17 00:00:00 2001 From: cris Date: Mon, 13 Mar 2023 00:13:20 +0000 Subject: [PATCH 430/833] avoid unnecesary assignment to this.value --- .../browse-by-metadata-page.component.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index aff978e5c8..83efdf8208 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -156,8 +156,6 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { this.value = params.value.trim(); } - this.value = +params.value || params.value || ''; - if (typeof params.startsWith === 'string'){ this.startsWith = params.startsWith.trim(); } From 50d36231aa532b2b2f7e60ad7c68a5aa85d1500e Mon Sep 17 00:00:00 2001 From: Agustina Martinez Date: Mon, 13 Mar 2023 16:17:31 +0000 Subject: [PATCH 431/833] Add support to send inheritPolicies flag when moving item collection --- src/app/core/data/item-data.service.ts | 8 ++++---- .../edit-item-page/item-move/item-move.component.spec.ts | 3 ++- .../edit-item-page/item-move/item-move.component.ts | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/app/core/data/item-data.service.ts b/src/app/core/data/item-data.service.ts index 80da91acb3..c3fa84dd6c 100644 --- a/src/app/core/data/item-data.service.ts +++ b/src/app/core/data/item-data.service.ts @@ -246,10 +246,10 @@ export abstract class BaseItemDataService extends IdentifiableDataService * Get the endpoint to move the item * @param itemId */ - public getMoveItemEndpoint(itemId: string): Observable { + public getMoveItemEndpoint(itemId: string, inheritPolicies: boolean): Observable { return this.halService.getEndpoint(this.linkPath).pipe( map((endpoint: string) => this.getIDHref(endpoint, itemId)), - map((endpoint: string) => `${endpoint}/owningCollection`), + map((endpoint: string) => `${endpoint}/owningCollection?inheritPolicies=${inheritPolicies}`) ); } @@ -258,14 +258,14 @@ export abstract class BaseItemDataService extends IdentifiableDataService * @param itemId * @param collection */ - public moveToCollection(itemId: string, collection: Collection): Observable> { + public moveToCollection(itemId: string, collection: Collection, inheritPolicies: boolean): Observable> { const options: HttpOptions = Object.create({}); let headers = new HttpHeaders(); headers = headers.append('Content-Type', 'text/uri-list'); options.headers = headers; const requestId = this.requestService.generateRequestId(); - const hrefObs = this.getMoveItemEndpoint(itemId); + const hrefObs = this.getMoveItemEndpoint(itemId, inheritPolicies); hrefObs.pipe( find((href: string) => hasValue(href)), diff --git a/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts b/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts index d200891629..43ac47e37b 100644 --- a/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-move/item-move.component.spec.ts @@ -134,9 +134,10 @@ describe('ItemMoveComponent', () => { }); comp.selectedCollectionName = 'selected-collection-id'; comp.selectedCollection = collection1; + comp.inheritPolicies = false; comp.moveToCollection(); - expect(itemDataService.moveToCollection).toHaveBeenCalledWith('item-id', collection1); + expect(itemDataService.moveToCollection).toHaveBeenCalledWith('item-id', collection1, false); }); it('should call notificationsService success message on success', () => { comp.moveToCollection(); diff --git a/src/app/item-page/edit-item-page/item-move/item-move.component.ts b/src/app/item-page/edit-item-page/item-move/item-move.component.ts index b7ab761fe5..4f53fa7df1 100644 --- a/src/app/item-page/edit-item-page/item-move/item-move.component.ts +++ b/src/app/item-page/edit-item-page/item-move/item-move.component.ts @@ -104,7 +104,7 @@ export class ItemMoveComponent implements OnInit { */ moveToCollection() { this.processing = true; - const move$ = this.itemDataService.moveToCollection(this.item.id, this.selectedCollection) + const move$ = this.itemDataService.moveToCollection(this.item.id, this.selectedCollection, this.inheritPolicies) .pipe(getFirstCompletedRemoteData()); move$.subscribe((response: RemoteData) => { From faec78a12e87109502b79fca808549e59cd63cda Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 14 Mar 2023 11:08:42 +0100 Subject: [PATCH 432/833] Themed MediaViewerComponent --- src/app/item-page/item-page.module.ts | 3 +- .../media-viewer.component.spec.ts | 2 +- .../media-viewer/media-viewer.component.ts | 3 +- .../themed-media-viewer.component.ts | 36 +++++++++++++++++++ .../publication/publication.component.html | 2 +- .../untyped-item/untyped-item.component.html | 2 +- .../media-viewer/media-viewer.component.html | 0 .../media-viewer/media-viewer.component.scss | 1 + .../media-viewer/media-viewer.component.ts | 14 ++++++++ src/themes/custom/theme.module.ts | 8 +++-- 10 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 src/app/item-page/media-viewer/themed-media-viewer.component.ts create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer.component.html create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer.component.scss create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer.component.ts diff --git a/src/app/item-page/item-page.module.ts b/src/app/item-page/item-page.module.ts index 80cb1f61a2..de00122774 100644 --- a/src/app/item-page/item-page.module.ts +++ b/src/app/item-page/item-page.module.ts @@ -27,6 +27,7 @@ import { ResearchEntitiesModule } from '../entity-groups/research-entities/resea import { ThemedItemPageComponent } from './simple/themed-item-page.component'; import { ThemedFullItemPageComponent } from './full/themed-full-item-page.component'; import { MediaViewerComponent } from './media-viewer/media-viewer.component'; +import { ThemedMediaViewerComponent } from './media-viewer/themed-media-viewer.component'; import { MediaViewerVideoComponent } from './media-viewer/media-viewer-video/media-viewer-video.component'; import { MediaViewerImageComponent } from './media-viewer/media-viewer-image/media-viewer-image.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; @@ -35,7 +36,6 @@ import { VersionPageComponent } from './version-page/version-page/version-page.c import { VersionedItemComponent } from './simple/item-types/versioned-item/versioned-item.component'; import { ThemedFileSectionComponent } from './simple/field-components/file-section/themed-file-section.component'; - const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator PublicationComponent, @@ -63,6 +63,7 @@ const DECLARATIONS = [ UploadBitstreamComponent, AbstractIncrementalListComponent, MediaViewerComponent, + ThemedMediaViewerComponent, MediaViewerVideoComponent, MediaViewerImageComponent, MiradorViewerComponent, diff --git a/src/app/item-page/media-viewer/media-viewer.component.spec.ts b/src/app/item-page/media-viewer/media-viewer.component.spec.ts index cfd72bf416..9d1e51fca8 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.spec.ts +++ b/src/app/item-page/media-viewer/media-viewer.component.spec.ts @@ -135,7 +135,7 @@ describe('MediaViewerComponent', () => { it('should display a default, thumbnail', () => { const defaultThumbnail = fixture.debugElement.query( - By.css('ds-media-viewer-image') + By.css('ds-themed-media-viewer-image') ); expect(defaultThumbnail.nativeElement).toBeDefined(); }); diff --git a/src/app/item-page/media-viewer/media-viewer.component.ts b/src/app/item-page/media-viewer/media-viewer.component.ts index 3f9de8ed3e..1b55c52bdd 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.ts +++ b/src/app/item-page/media-viewer/media-viewer.component.ts @@ -13,9 +13,8 @@ import { hasValue } from '../../shared/empty.util'; import { followLink } from '../../shared/utils/follow-link-config.model'; /** - * This componenet renders the media viewers + * This component renders the media viewers */ - @Component({ selector: 'ds-media-viewer', templateUrl: './media-viewer.component.html', diff --git a/src/app/item-page/media-viewer/themed-media-viewer.component.ts b/src/app/item-page/media-viewer/themed-media-viewer.component.ts new file mode 100644 index 0000000000..9886a258f5 --- /dev/null +++ b/src/app/item-page/media-viewer/themed-media-viewer.component.ts @@ -0,0 +1,36 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { MediaViewerComponent } from './media-viewer.component'; +import { Item } from '../../core/shared/item.model'; + +/** + * Themed wrapper for {@link MediaViewerComponent}. + */ +@Component({ + selector: 'ds-themed-media-viewer', + styleUrls: [], + templateUrl: '../../shared/theme-support/themed.component.html', +}) +export class ThemedMediaViewerComponent extends ThemedComponent { + + @Input() item: Item; + @Input() videoOptions: boolean; + + protected inAndOutputNames: (keyof MediaViewerComponent & keyof this)[] = [ + 'item', + 'videoOptions', + ]; + + protected getComponentName(): string { + return 'MediaViewerComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/item-page/media-viewer/media-viewer.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./media-viewer.component'); + } + +} diff --git a/src/app/item-page/simple/item-types/publication/publication.component.html b/src/app/item-page/simple/item-types/publication/publication.component.html index bace9fcd0a..dc39227ed4 100644 --- a/src/app/item-page/simple/item-types/publication/publication.component.html +++ b/src/app/item-page/simple/item-types/publication/publication.component.html @@ -23,7 +23,7 @@ - + diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 04794717f1..11478bd8a5 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -26,7 +26,7 @@ - + diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer.component.html b/src/themes/custom/app/item-page/media-viewer/media-viewer.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer.component.scss b/src/themes/custom/app/item-page/media-viewer/media-viewer.component.scss new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/themes/custom/app/item-page/media-viewer/media-viewer.component.scss @@ -0,0 +1 @@ + diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer.component.ts b/src/themes/custom/app/item-page/media-viewer/media-viewer.component.ts new file mode 100644 index 0000000000..5804c7d2eb --- /dev/null +++ b/src/themes/custom/app/item-page/media-viewer/media-viewer.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { + MediaViewerComponent as BaseComponent +} from '../../../../../app/item-page/media-viewer/media-viewer.component'; + +@Component({ + selector: 'ds-media-viewer', + // templateUrl: './media-viewer.component.html', + templateUrl: '../../../../../app/item-page/media-viewer/media-viewer.component.html', + // styleUrls: ['./media-viewer.component.scss'], + styleUrls: ['../../../../../app/item-page/media-viewer/media-viewer.component.scss'], +}) +export class MediaViewerComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index e2e97b9087..6a04b65852 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -84,6 +84,8 @@ import { SearchModule } from '../../app/shared/search/search.module'; import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; +import { MediaViewerComponent } from './app/item-page/media-viewer/media-viewer.component'; +import { NgxGalleryModule } from '@kolkov/ngx-gallery'; const DECLARATIONS = [ FileSectionComponent, @@ -126,7 +128,8 @@ const DECLARATIONS = [ NavbarComponent, HeaderNavbarWrapperComponent, BreadcrumbsComponent, - FeedbackComponent + FeedbackComponent, + MediaViewerComponent, ]; @NgModule({ @@ -176,7 +179,8 @@ const DECLARATIONS = [ SearchModule, FormsModule, ResourcePoliciesModule, - ComcolModule + ComcolModule, + NgxGalleryModule, ], declarations: DECLARATIONS }) From f4e95946dc6866c215e1528f7216b3bf1844988c Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 14 Mar 2023 11:33:54 +0100 Subject: [PATCH 433/833] Themed MediaViewerImageComponent --- src/app/item-page/item-page.module.ts | 2 + .../media-viewer-image.component.ts | 17 +++++---- .../themed-media-viewer-image.component.ts | 38 +++++++++++++++++++ .../media-viewer/media-viewer.component.html | 6 +-- .../media-viewer-image.component.html | 0 .../media-viewer-image.component.scss | 0 .../media-viewer-image.component.ts | 14 +++++++ src/themes/custom/theme.module.ts | 4 ++ 8 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/app/item-page/media-viewer/media-viewer-image/themed-media-viewer-image.component.ts create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.html create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts diff --git a/src/app/item-page/item-page.module.ts b/src/app/item-page/item-page.module.ts index de00122774..485553c141 100644 --- a/src/app/item-page/item-page.module.ts +++ b/src/app/item-page/item-page.module.ts @@ -30,6 +30,7 @@ import { MediaViewerComponent } from './media-viewer/media-viewer.component'; import { ThemedMediaViewerComponent } from './media-viewer/themed-media-viewer.component'; import { MediaViewerVideoComponent } from './media-viewer/media-viewer-video/media-viewer-video.component'; import { MediaViewerImageComponent } from './media-viewer/media-viewer-image/media-viewer-image.component'; +import { ThemedMediaViewerImageComponent } from './media-viewer/media-viewer-image/themed-media-viewer-image.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; import { MiradorViewerComponent } from './mirador-viewer/mirador-viewer.component'; import { VersionPageComponent } from './version-page/version-page/version-page.component'; @@ -66,6 +67,7 @@ const DECLARATIONS = [ ThemedMediaViewerComponent, MediaViewerVideoComponent, MediaViewerImageComponent, + ThemedMediaViewerImageComponent, MiradorViewerComponent, VersionPageComponent, ]; diff --git a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts index 0c32b5603d..4c32ba5376 100644 --- a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts +++ b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts @@ -18,7 +18,7 @@ export class MediaViewerImageComponent implements OnInit { @Input() preview?: boolean; @Input() image?: string; - loggedin: boolean; + thumbnailPlaceholder = './assets/images/replacement_image.svg'; galleryOptions: NgxGalleryOptions[]; galleryImages: NgxGalleryImage[]; @@ -28,7 +28,10 @@ export class MediaViewerImageComponent implements OnInit { */ isAuthenticated$: Observable; - constructor(private authService: AuthService) {} + constructor( + protected authService: AuthService, + ) { + } /** * Thi method sets up the gallery settings and data @@ -69,20 +72,20 @@ export class MediaViewerImageComponent implements OnInit { * @param medias input NgxGalleryImage array */ convertToGalleryImage(medias: MediaViewerItem[]): NgxGalleryImage[] { - const mappadImages = []; + const mappedImages = []; for (const image of medias) { if (image.format === 'image') { - mappadImages.push({ + mappedImages.push({ small: image.thumbnail ? image.thumbnail - : './assets/images/replacement_image.svg', + : this.thumbnailPlaceholder, medium: image.thumbnail ? image.thumbnail - : './assets/images/replacement_image.svg', + : this.thumbnailPlaceholder, big: image.bitstream._links.content.href, }); } } - return mappadImages; + return mappedImages; } } diff --git a/src/app/item-page/media-viewer/media-viewer-image/themed-media-viewer-image.component.ts b/src/app/item-page/media-viewer/media-viewer-image/themed-media-viewer-image.component.ts new file mode 100644 index 0000000000..85ac779817 --- /dev/null +++ b/src/app/item-page/media-viewer/media-viewer-image/themed-media-viewer-image.component.ts @@ -0,0 +1,38 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../shared/theme-support/themed.component'; +import { MediaViewerImageComponent } from './media-viewer-image.component'; +import { MediaViewerItem } from '../../../core/shared/media-viewer-item.model'; + +/** + * Themed wrapper for {@link MediaViewerImageComponent}. + */ +@Component({ + selector: 'ds-themed-media-viewer-image', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedMediaViewerImageComponent extends ThemedComponent { + + @Input() images: MediaViewerItem[]; + @Input() preview?: boolean; + @Input() image?: string; + + protected inAndOutputNames: (keyof MediaViewerImageComponent & keyof this)[] = [ + 'images', + 'preview', + 'image', + ]; + + protected getComponentName(): string { + return 'MediaViewerImageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./media-viewer-image.component'); + } + +} diff --git a/src/app/item-page/media-viewer/media-viewer.component.html b/src/app/item-page/media-viewer/media-viewer.component.html index b79b91629f..b552d854d5 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.html +++ b/src/app/item-page/media-viewer/media-viewer.component.html @@ -16,7 +16,7 @@ - + - + > diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.html b/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss b/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts b/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts new file mode 100644 index 0000000000..cf73a91f23 --- /dev/null +++ b/src/themes/custom/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { + MediaViewerImageComponent as BaseComponent +} from '../../../../../../app/item-page/media-viewer/media-viewer-image/media-viewer-image.component'; + +@Component({ + selector: 'ds-media-viewer-image', + // templateUrl: './media-viewer-image.component.html', + templateUrl: '../../../../../../app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.html', + // styleUrls: ['./media-viewer-image.component.scss'], + styleUrls: ['../../../../../../app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss'], +}) +export class MediaViewerImageComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 6a04b65852..98e5a0ab39 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -85,6 +85,9 @@ import { ResourcePoliciesModule } from '../../app/shared/resource-policies/resou import { ComcolModule } from '../../app/shared/comcol/comcol.module'; import { FeedbackComponent } from './app/info/feedback/feedback.component'; import { MediaViewerComponent } from './app/item-page/media-viewer/media-viewer.component'; +import { + MediaViewerImageComponent +} from './app/item-page/media-viewer/media-viewer-image/media-viewer-image.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; const DECLARATIONS = [ @@ -130,6 +133,7 @@ const DECLARATIONS = [ BreadcrumbsComponent, FeedbackComponent, MediaViewerComponent, + MediaViewerImageComponent, ]; @NgModule({ From b63fa5f37590ca9e43c49211a904580f9a6030f0 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 14 Mar 2023 11:39:11 +0100 Subject: [PATCH 434/833] Themed MediaViewerVideoComponent --- src/app/item-page/item-page.module.ts | 2 ++ .../media-viewer-video.component.ts | 4 +-- .../themed-media-viewer-video.component.ts | 34 +++++++++++++++++++ .../media-viewer/media-viewer.component.html | 2 +- .../media-viewer-video.component.html | 0 .../media-viewer-video.component.scss | 0 .../media-viewer-video.component.ts | 14 ++++++++ src/themes/custom/theme.module.ts | 4 +++ 8 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss create mode 100644 src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts diff --git a/src/app/item-page/item-page.module.ts b/src/app/item-page/item-page.module.ts index 485553c141..ea56a2534d 100644 --- a/src/app/item-page/item-page.module.ts +++ b/src/app/item-page/item-page.module.ts @@ -29,6 +29,7 @@ import { ThemedFullItemPageComponent } from './full/themed-full-item-page.compon import { MediaViewerComponent } from './media-viewer/media-viewer.component'; import { ThemedMediaViewerComponent } from './media-viewer/themed-media-viewer.component'; import { MediaViewerVideoComponent } from './media-viewer/media-viewer-video/media-viewer-video.component'; +import { ThemedMediaViewerVideoComponent } from './media-viewer/media-viewer-video/themed-media-viewer-video.component'; import { MediaViewerImageComponent } from './media-viewer/media-viewer-image/media-viewer-image.component'; import { ThemedMediaViewerImageComponent } from './media-viewer/media-viewer-image/themed-media-viewer-image.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; @@ -66,6 +67,7 @@ const DECLARATIONS = [ MediaViewerComponent, ThemedMediaViewerComponent, MediaViewerVideoComponent, + ThemedMediaViewerVideoComponent, MediaViewerImageComponent, ThemedMediaViewerImageComponent, MiradorViewerComponent, diff --git a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts index 4c578a51bb..d71281868e 100644 --- a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts +++ b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts @@ -2,7 +2,7 @@ import { Component, Input, OnInit } from '@angular/core'; import { MediaViewerItem } from '../../../core/shared/media-viewer-item.model'; /** - * This componenet renders a video viewer and playlist for the media viewer + * This component renders a video viewer and playlist for the media viewer */ @Component({ selector: 'ds-media-viewer-video', @@ -22,8 +22,6 @@ export class MediaViewerVideoComponent implements OnInit { audio: './assets/images/replacement_audio.svg', }; - replacementThumbnail: string; - ngOnInit() { this.isCollapsed = false; this.filteredMedias = this.medias.filter( diff --git a/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts b/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts new file mode 100644 index 0000000000..fe685daff2 --- /dev/null +++ b/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts @@ -0,0 +1,34 @@ +import { Component, Input } from '@angular/core'; +import { ThemedComponent } from '../../../shared/theme-support/themed.component'; +import { MediaViewerItem } from '../../../core/shared/media-viewer-item.model'; +import { MediaViewerVideoComponent } from './media-viewer-video.component'; + +/** + * Themed wrapper for {@link MediaViewerVideoComponent}. + */ +@Component({ + selector: 'ds-themed-media-viewer-video', + styleUrls: [], + templateUrl: '../../../shared/theme-support/themed.component.html', +}) +export class ThemedMediaViewerVideoComponent extends ThemedComponent { + + @Input() medias: MediaViewerItem[]; + + protected inAndOutputNames: (keyof MediaViewerVideoComponent & keyof this)[] = [ + 'medias', + ]; + + protected getComponentName(): string { + return 'MediaViewerImageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../themes/${themeName}/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./media-viewer-video.component'); + } + +} diff --git a/src/app/item-page/media-viewer/media-viewer.component.html b/src/app/item-page/media-viewer/media-viewer.component.html index b552d854d5..f16a2edaea 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.html +++ b/src/app/item-page/media-viewer/media-viewer.component.html @@ -12,7 +12,7 @@ mediaList[0]?.format === 'video' || mediaList[0]?.format === 'audio' " > - + diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html b/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss b/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts b/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts new file mode 100644 index 0000000000..c180f7dcb8 --- /dev/null +++ b/src/themes/custom/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { + MediaViewerVideoComponent as BaseComponent +} from '../../../../../../app/item-page/media-viewer/media-viewer-video/media-viewer-video.component'; + +@Component({ + selector: 'ds-media-viewer-video', + // templateUrl: './media-viewer-video.component.html', + templateUrl: '../../../../../../app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html', + // styleUrls: ['./media-viewer-video.component.scss'], + styleUrls: ['../../../../../../app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss'], +}) +export class MediaViewerVideoComponent extends BaseComponent { +} diff --git a/src/themes/custom/theme.module.ts b/src/themes/custom/theme.module.ts index 98e5a0ab39..2bb428f6a6 100644 --- a/src/themes/custom/theme.module.ts +++ b/src/themes/custom/theme.module.ts @@ -88,6 +88,9 @@ import { MediaViewerComponent } from './app/item-page/media-viewer/media-viewer. import { MediaViewerImageComponent } from './app/item-page/media-viewer/media-viewer-image/media-viewer-image.component'; +import { + MediaViewerVideoComponent +} from './app/item-page/media-viewer/media-viewer-video/media-viewer-video.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; const DECLARATIONS = [ @@ -134,6 +137,7 @@ const DECLARATIONS = [ FeedbackComponent, MediaViewerComponent, MediaViewerImageComponent, + MediaViewerVideoComponent, ]; @NgModule({ From be484b1249bce5c6848f493e398714587eabd397 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Mar 2023 22:48:34 +0000 Subject: [PATCH 435/833] Bump webpack from 5.75.0 to 5.76.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9249884c8e..61c9828985 100644 --- a/package.json +++ b/package.json @@ -198,7 +198,7 @@ "sass-resources-loader": "^2.1.1", "ts-node": "^8.10.2", "typescript": "~4.5.5", - "webpack": "^5.69.1", + "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.4.0", "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.5.0" diff --git a/yarn.lock b/yarn.lock index 2fd4fa3bc8..3e9944dd11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11520,10 +11520,10 @@ webpack@5.70.0: watchpack "^2.3.1" webpack-sources "^3.2.3" -webpack@^5.69.1: - version "5.75.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" - integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== +webpack@^5.76.0: + version "5.76.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.0.tgz#f9fb9fb8c4a7dbdcd0d56a98e56b8a942ee2692c" + integrity sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" From d60e3587667634283922ff96aef059f53ec6bde2 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 14 Mar 2023 22:14:01 +0100 Subject: [PATCH 436/833] Fix media viewer thumbnails exceeding max width --- .../media-viewer-image.component.scss | 24 +++++++++++++++---- .../media-viewer-video.component.scss | 10 ++++++-- .../publication/publication.component.html | 4 ++-- .../untyped-item/untyped-item.component.html | 4 ++-- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss index 72ce4b04d9..cba963b6fa 100644 --- a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss +++ b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.scss @@ -1,6 +1,20 @@ -.ngx-gallery { - display: inline-block; - margin-bottom: 20px; - width: 340px !important; - height: 279px !important; +:host ::ng-deep { + .ngx-gallery { + width: unset !important; + height: unset !important; + } + + ngx-gallery-image { + max-width: 340px !important; + + .ngx-gallery-image { + background-position: left; + } + } + + ngx-gallery-image:after { + padding-top: 75%; + display: block; + content: ''; + } } diff --git a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss index 7702da7361..bb8b9d360e 100644 --- a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss +++ b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.scss @@ -1,4 +1,10 @@ video { - width: 340px; - height: 279px; + width: 100%; + height: auto; + max-width: 340px; +} + +.buttons { + display: flex; + gap: .25rem; } diff --git a/src/app/item-page/simple/item-types/publication/publication.component.html b/src/app/item-page/simple/item-types/publication/publication.component.html index bace9fcd0a..658d637107 100644 --- a/src/app/item-page/simple/item-types/publication/publication.component.html +++ b/src/app/item-page/simple/item-types/publication/publication.component.html @@ -22,9 +22,9 @@ - +
    - +
    - +
    - +
    Date: Wed, 15 Mar 2023 16:00:07 +0000 Subject: [PATCH 437/833] lint issues solved --- .../browse-by-metadata-page.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index 83efdf8208..60db6c3148 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -151,15 +151,15 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { ).subscribe(([params, currentPage, currentSort]: [Params, PaginationComponentOptions, SortOptions]) => { this.browseId = params.id || this.defaultBrowseId; this.authority = params.authority; - + if (typeof params.value === 'string'){ this.value = params.value.trim(); } - + if (typeof params.startsWith === 'string'){ this.startsWith = params.startsWith.trim(); } - + if (isNotEmpty(this.value)) { this.updatePageWithItems( browseParamsToOptions(params, currentPage, currentSort, this.browseId, this.fetchThumbnails), this.value, this.authority); From 2030b29ddcedfe119b994173579480425af37044 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 16 Mar 2023 00:26:11 +0100 Subject: [PATCH 438/833] Fix scope name not being displayed after a page refresh & code cleanup --- .../search-form/search-form.component.html | 9 ++++-- .../search-form/search-form.component.spec.ts | 29 ++----------------- .../search-form/search-form.component.ts | 22 +++----------- 3 files changed, 14 insertions(+), 46 deletions(-) diff --git a/src/app/shared/search-form/search-form.component.html b/src/app/shared/search-form/search-form.component.html index b6b4395c2f..f916785804 100644 --- a/src/app/shared/search-form/search-form.component.html +++ b/src/app/shared/search-form/search-form.component.html @@ -2,9 +2,14 @@
    - +
    - diff --git a/src/app/shared/search-form/search-form.component.spec.ts b/src/app/shared/search-form/search-form.component.spec.ts index 4b5844f660..584b7c5584 100644 --- a/src/app/shared/search-form/search-form.component.spec.ts +++ b/src/app/shared/search-form/search-form.component.spec.ts @@ -33,7 +33,7 @@ describe('SearchFormComponent', () => { }; beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ + return TestBed.configureTestingModule({ imports: [FormsModule, RouterTestingModule, TranslateModule.forRoot()], providers: [ { provide: Router, useValue: router }, @@ -96,7 +96,7 @@ describe('SearchFormComponent', () => { tick(); const scopeSelect = de.query(By.css('.scope-button')).nativeElement; - expect(scopeSelect.textContent).toBe(testCommunity.name); + expect(scopeSelect.textContent).toContain('Sample Community'); })); describe('updateSearch', () => { @@ -172,32 +172,9 @@ describe('SearchFormComponent', () => { expect(comp.updateSearch).toHaveBeenCalledWith(searchQuery); }); }); - - // it('should call updateSearch when clicking the submit button with correct parameters', fakeAsync(() => { - // comp.query = 'Test String' - // fixture.detectChanges(); - // spyOn(comp, 'updateSearch').and.callThrough(); - // fixture.detectChanges(); - // - // const submit = de.query(By.css('button.search-button')).nativeElement; - // const scope = '123456'; - // const query = 'test'; - // const select = de.query(By.css('select')).nativeElement; - // const input = de.query(By.css('input')).nativeElement; - // - // tick(); - // select.value = scope; - // input.value = query; - // - // fixture.detectChanges(); - // - // submit.click(); - // - // expect(comp.updateSearch).toHaveBeenCalledWith({ scope: scope, query: query }); - // })); }); -export const objects: DSpaceObject[] = [ +const objects: DSpaceObject[] = [ Object.assign(new Community(), { logo: { self: { diff --git a/src/app/shared/search-form/search-form.component.ts b/src/app/shared/search-form/search-form.component.ts index 8a1b69887a..fbab550a94 100644 --- a/src/app/shared/search-form/search-form.component.ts +++ b/src/app/shared/search-form/search-form.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Component, EventEmitter, Input, Output, OnChanges } from '@angular/core'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { Router } from '@angular/router'; import { isNotEmpty } from '../empty.util'; @@ -14,22 +14,15 @@ import { DSpaceObjectDataService } from '../../core/data/dspace-object-data.serv import { getFirstSucceededRemoteDataPayload } from '../../core/shared/operators'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; -/** - * This component renders a simple item page. - * The route parameter 'id' is used to request the item it represents. - * All fields of the item that should be displayed, are defined in its template. - */ - @Component({ selector: 'ds-search-form', styleUrls: ['./search-form.component.scss'], templateUrl: './search-form.component.html' }) - /** * Component that represents the search form */ -export class SearchFormComponent implements OnInit { +export class SearchFormComponent implements OnChanges { /** * The search query */ @@ -88,7 +81,7 @@ export class SearchFormComponent implements OnInit { /** * Retrieve the scope object from the URL so we can show its name */ - ngOnInit(): void { + ngOnChanges(): void { if (isNotEmpty(this.scope)) { this.dsoService.findById(this.scope).pipe(getFirstSucceededRemoteDataPayload()) .subscribe((scope: DSpaceObject) => this.selectedScope.next(scope)); @@ -122,19 +115,12 @@ export class SearchFormComponent implements OnInit { updateSearch(data: any) { const queryParams = Object.assign({}, data); - this.router.navigate(this.getSearchLinkParts(), { + void this.router.navigate(this.getSearchLinkParts(), { queryParams: queryParams, queryParamsHandling: 'merge' }); } - /** - * For usage of the isNotEmpty function in the template - */ - isNotEmpty(object: any) { - return isNotEmpty(object); - } - /** * @returns {string} The base path to the search page, or the current page when inPlaceSearch is true */ From 56d60820a51eee115edf83e026eb6642267ca866 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 17 Mar 2023 17:00:12 +0100 Subject: [PATCH 439/833] 96384: Fix RSS component sometimes not displaying when loaded to fast --- src/app/shared/rss-feed/rss.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/shared/rss-feed/rss.component.ts b/src/app/shared/rss-feed/rss.component.ts index 3fdb859bdc..3442b47867 100644 --- a/src/app/shared/rss-feed/rss.component.ts +++ b/src/app/shared/rss-feed/rss.component.ts @@ -33,7 +33,7 @@ import { RemoteData } from '../../core/data/remote-data'; }) export class RSSComponent implements OnInit, OnDestroy { - route$: BehaviorSubject; + route$: BehaviorSubject = new BehaviorSubject(''); isEnabled$: BehaviorSubject = new BehaviorSubject(null); @@ -101,7 +101,7 @@ export class RSSComponent implements OnInit, OnDestroy { rel: 'search', title: 'Dspace' }); - this.route$ = new BehaviorSubject(route); + this.route$.next(route); })); } From 58df43b85212ca0360ef7f9c2ca5cbd6f389e6fc Mon Sep 17 00:00:00 2001 From: Pierre Lasou Date: Fri, 17 Mar 2023 15:02:07 -0400 Subject: [PATCH 440/833] Update to fixe french labels for System-wide alert Add translations for the System wide alert feature as well other various missing parameters. --- src/assets/i18n/fr.json5 | 183 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 182 insertions(+), 1 deletion(-) diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index 1e042c81fd..34e352b790 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -951,6 +951,9 @@ // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", "bitstream-request-a-copy.submit.error": "Un problème est survenu lors de la soumission de la demande d'Item", + + //"browse.back.all-results": "All browse results", + "browse.back.all-results": "Tous les résultats", // "browse.comcol.by.author": "By Author", "browse.comcol.by.author": "Auteur", @@ -1068,9 +1071,18 @@ // "browse.title": "Browsing {{ collection }} by {{ field }} {{ value }}", "browse.title": "Parcourir la collection {{ collection }} par {{ field }} {{ value }}", + + //"browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "Parcourir la collection {{ collection }} par {{ field }} {{ value }}", + + //"search.browse.item-back": "Back to Results", + "search.browse.item-back": "Retour aux résultats", // "chips.remove": "Remove chip", "chips.remove": "Supprimer fragment", + + //"claimed-approved-search-result-list-element.title": "Approved", + "claimed-approved-search-result-list-element.title": "Approuvé", // "collection.create.head": "Create a Collection", "collection.create.head": "Créer une collection", @@ -1718,6 +1730,9 @@ // "cookies.consent.decline": "Decline", "cookies.consent.decline": "Refuser", + + //"cookies.consent.ok": "That's ok", + "cookies.consent.ok": "Accepter", // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", "cookies.consent.content-notice.description": "Vos données personnelles sont récupérées et utilisées dans les contextes suivants : authentification, préférences, consentement et statistiques.
    Pour plus d'informations, veuillez vous référer à la {privacyPolicy}.", @@ -1883,6 +1898,9 @@ // "dso-selector.set-scope.community.button": "Search all of DSpace", "dso-selector.set-scope.community.button": "Chercher dans toutes les collections", + + //"dso-selector.set-scope.community.or-divider": "or", + "dso-selector.set-scope.community.or-divider": "ou", // "dso-selector.set-scope.community.input-header": "Search for a community or collection", "dso-selector.set-scope.community.input-header": "Chercher une communauté ou une collection", @@ -2495,6 +2513,71 @@ // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", "item.edit.tabs.item-mapper.title": "Édition d'Item - Association de collection", + + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + "item.edit.identifiers.doi.status.UNKNOWN": "Inconnu", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "En attente d'inscription", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "En attente de réservation", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + "item.edit.identifiers.doi.status.IS_REGISTERED": "Inscrit", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + "item.edit.identifiers.doi.status.IS_RESERVED": "Réseré", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Réservé (en attente)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Inscrit (en attente)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "En attente pour la mise à jour et l'inscription", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + "item.edit.identifiers.doi.status.TO_BE_DELETED": "En attente pour la suppression", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + "item.edit.identifiers.doi.status.DELETED": "Supprimé", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + "item.edit.identifiers.doi.status.PENDING": "En attente (non inscrit)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + "item.edit.identifiers.doi.status.MINTED": "Émis (non inscrit)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + "item.edit.tabs.status.buttons.register-doi.label": "Inscrire un nouveau DOI ou un DOI en attente", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + "item.edit.tabs.status.buttons.register-doi.button": "Inscrire le DOI...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + "item.edit.register-doi.header": "Inscrire un nouveau DOI ou un DOI en attente", + + // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + "item.edit.register-doi.description": "Réviser les identifiants en attente and les métadonnées ci-dessous item metadata below puis cliquer sur Confirmer afin de lancer l'inscription du DOI ou sur Annuler pour interrompre l'inscription", + + // "item.edit.register-doi.confirm": "Confirm", + "item.edit.register-doi.confirm": "Confirmer", + + // "item.edit.register-doi.cancel": "Cancel", + "item.edit.register-doi.cancel": "Annuler", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + "item.edit.register-doi.success": "DOI mis en attente pour l'inscription.", + + // "item.edit.register-doi.error": "Error registering DOI", + "item.edit.register-doi.error": "Erreur lors de l'inscription du DOI", + + // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + "item.edit.register-doi.to-update": "Le DOI suivant a déjà été généré et sera mis en attente pour être inscrit", + + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Associer l'Item aux collections sélectionnées", @@ -3738,6 +3821,9 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "Vos dépôts", + + //"mydspace.show.supervisedWorkspace": "Supervised items", + "mydspace.show.supervisedWorkspace": "Items supervisés", // "mydspace.status.archived": "Archived", "mydspace.status.archived": "Archivés", @@ -3804,6 +3890,9 @@ // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "Retour à votre propre EPerson", + + //"nav.subscriptions" : "Subscriptions", + "nav.subscriptions" : "Abonnements", // "nav.toggle": "Toggle navigation", "nav.toggle": "Basculer la navigation", @@ -5060,6 +5149,9 @@ // "submission.import-external.source.crossref": "CrossRef", "submission.import-external.source.crossref": "CrossRef (DOI)", + + //"submission.import-external.source.datacite": "DataCite", + "submission.import-external.source.datacite": "DataCite (DOI)", // "submission.import-external.source.scielo": "SciELO", "submission.import-external.source.scielo": "SciELO", @@ -5075,6 +5167,9 @@ // "submission.import-external.source.orcidWorks": "ORCID", "submission.import-external.source.orcidWorks": "ORCID", + + //"submission.import-external.source.epo": "European Patent Office (EPO)", + "submission.import-external.source.epo": "Office Européen des brevets (OEB)", // "submission.import-external.source.loading": "Loading ...", "submission.import-external.source.loading": "En cours de chargement ...", @@ -5991,14 +6086,24 @@ // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", "virtual-metadata.delete-relationship.modal-head": "Sélectionner les Items pour lesquels vous souhaitez sauvegarder les métadonnées virtuelles en tant que métadonnées réelles", + + //"supervisedWorkspace.search.results.head": "Supervised Items", + "supervisedWorkspace.search.results.head": "Items supervisés", + + //"workspace.search.results.head": "Your submissions", + "workspace.search.results.head": "Vos dépôts", + // "workspace.search.results.head": "Your submissions", - "workspace.search.results.head": "Vos soumissions", + "workspace.search.results.head": "Vos dépôts", // "workflowAdmin.search.results.head": "Administer Workflow", "workflowAdmin.search.results.head": "Workflow Administrateur", // "workflow.search.results.head": "Workflow tasks", "workflow.search.results.head": "Tableau de suivi", + + //"supervision.search.results.head": "Workflow and Workspace tasks", + "supervision.search.results.head": "Tableau de suivi et dépôts en cours", // "workflow-item.edit.breadcrumbs": "Edit workflowitem", "workflow-item.edit.breadcrumbs": "Éditer l'Item du Workflow", @@ -6074,5 +6179,81 @@ // "idle-modal.extend-session": "Extend session" "idle-modal.extend-session": "Prolonger la session" + + + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + "system-wide-alert-banner.retrieval.error": "Une erreur s'est produite lors de la récupération de la bannière du message d'avertissement", + + //"system-wide-alert-banner.countdown.prefix": "In", + "system-wide-alert-banner.countdown.prefix": "Dans", + +// "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + "system-wide-alert-banner.countdown.days": "{{days}} jour(s),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", +"system-wide-alert-banner.countdown.hours": "{{hours}} heure(s) et", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + + + + // "menu.section.system-wide-alert": "System-wide Alert", + "menu.section.system-wide-alert": "Messages d'avertissement", + + // "system-wide-alert.form.header": "System-wide Alert", +"system-wide-alert.form.header": "Messages d'avertissement", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + "system-wide-alert-form.retrieval.error": "Une erreur s'est produite lors de la récupération de la bannière du message d'avertissement", + + //"system-wide-alert.form.cancel": "Cancel", + "system-wide-alert.form.cancel": "Annuler", + + + "system-wide-alert.form.save": "Save", +"system-wide-alert.form.save": "Sauvegarder", + + "system-wide-alert.form.label.active": "ACTIVE", + "system-wide-alert.form.label.active": "ACTIF", + + "system-wide-alert.form.label.inactive": "INACTIVE", + "system-wide-alert.form.label.inactive": "INACTIF", + + "system-wide-alert.form.error.message": "The system wide alert must have a message", + "system-wide-alert.form.error.message": "Le message d'avertissement ne peut pas être vide", + + "system-wide-alert.form.label.message": "Alert message", + "system-wide-alert.form.label.message": "Message d'avertissement", + + "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + "system-wide-alert.form.label.countdownTo.enable": "Activer un compte à rebours", + + "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + "system-wide-alert.form.label.countdownTo.hint": "Lorsque cette option est activée, il est possible de fixer une date dans le futur et la bannière du message d'avertissement effectuera un compte à rebours jusqu'à la date fixée. À la fin du compte à rebours, le message d'avertissement disparaîtra mais le serveur ne sera pas arrêté automatiquement.", + + "system-wide-alert.form.label.preview": "System-wide alert preview", + "system-wide-alert.form.label.preview": "Aperçu du message d'avertissement", + + "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + "system-wide-alert.form.update.success": "Le message d'avertissement a été mis à jour", + + "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + "system-wide-alert.form.update.error": "Un erreur s'est produite lors de la mise à jour du message d'avertissement", + + "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + "system-wide-alert.form.create.success": "Le message d'avertissement a été crée", + + "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + "system-wide-alert.form.create.error": "Un erreur s'est produite lors de la création du message d'avertissement", + + "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + "admin.system-wide-alert.breadcrumbs": "Messages d'avertissement", + + "admin.system-wide-alert.title": "System-wide Alerts", + "admin.system-wide-alert.title": "Messages d'avertissement", + + } From aa4d56e2cf1b3158e56c3a1644f4722e70e838bc Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 19 Mar 2023 11:42:09 +0100 Subject: [PATCH 441/833] Made it possible to only enable video media viewer Also: - Filtered out non-supported media file types from the mediaViewers mediaList - Fixed thumbnails not displaying with 0 ORIGINAL bitstreams --- .../media-viewer-image.component.ts | 17 ++--- .../media-viewer-video.component.html | 13 ++-- .../media-viewer-video.component.spec.ts | 2 - .../media-viewer-video.component.ts | 20 ++---- .../media-viewer/media-viewer.component.html | 36 ++++------ .../media-viewer.component.spec.ts | 12 +++- .../media-viewer/media-viewer.component.ts | 67 ++++++++++++------- .../publication/publication.component.html | 6 +- .../untyped-item/untyped-item.component.html | 6 +- 9 files changed, 89 insertions(+), 90 deletions(-) diff --git a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts index 0c32b5603d..28c5b4efd6 100644 --- a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts +++ b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { NgxGalleryImage, NgxGalleryOptions } from '@kolkov/ngx-gallery'; import { MediaViewerItem } from '../../../core/shared/media-viewer-item.model'; import { NgxGalleryAnimation } from '@kolkov/ngx-gallery'; @@ -13,7 +13,7 @@ import { AuthService } from '../../../core/auth/auth.service'; templateUrl: './media-viewer-image.component.html', styleUrls: ['./media-viewer-image.component.scss'], }) -export class MediaViewerImageComponent implements OnInit { +export class MediaViewerImageComponent implements OnChanges, OnInit { @Input() images: MediaViewerItem[]; @Input() preview?: boolean; @Input() image?: string; @@ -30,11 +30,9 @@ export class MediaViewerImageComponent implements OnInit { constructor(private authService: AuthService) {} - /** - * Thi method sets up the gallery settings and data - */ - ngOnInit(): void { - this.isAuthenticated$ = this.authService.isAuthenticated(); + ngOnChanges(changes: SimpleChanges): void { + this.image = changes.image.currentValue; + this.preview = changes.preview.currentValue; this.galleryOptions = [ { preview: this.preview !== undefined ? this.preview : true, @@ -50,7 +48,6 @@ export class MediaViewerImageComponent implements OnInit { previewFullscreen: true, }, ]; - if (this.image) { this.galleryImages = [ { @@ -64,6 +61,10 @@ export class MediaViewerImageComponent implements OnInit { } } + ngOnInit(): void { + this.isAuthenticated$ = this.authService.isAuthenticated(); + } + /** * This method convert an array of MediaViewerItem into NgxGalleryImage array * @param medias input NgxGalleryImage array diff --git a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html index a4493e36fc..aaec542f82 100644 --- a/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html +++ b/src/app/item-page/media-viewer/media-viewer-video/media-viewer-video.component.html @@ -1,15 +1,14 @@ -
    +
    - + - - + + diff --git a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 04794717f1..7eb896f8ae 100644 --- a/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -20,13 +20,13 @@
    - + - - + + From e426c1a4ef6194029a2c9cc85a9f62bbf5fc9971 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 21 Mar 2023 10:02:43 +0100 Subject: [PATCH 442/833] Fixed MediaViewerVideoComponent --- .../media-viewer-video/themed-media-viewer-video.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts b/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts index fe685daff2..9715837fdc 100644 --- a/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts +++ b/src/app/item-page/media-viewer/media-viewer-video/themed-media-viewer-video.component.ts @@ -20,7 +20,7 @@ export class ThemedMediaViewerVideoComponent extends ThemedComponent { From b31fdf0be6c138f4d114eaa66abfb095cd8863e0 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 23 Mar 2023 11:59:50 +0100 Subject: [PATCH 443/833] [CST-7216] Imported UploadModule in AdminModule to fix build error --- src/app/admin/admin.module.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts index 768e3120df..3dc0036854 100644 --- a/src/app/admin/admin.module.ts +++ b/src/app/admin/admin.module.ts @@ -11,6 +11,7 @@ import { AdminSidebarSectionComponent } from './admin-sidebar/admin-sidebar-sect import { ExpandableAdminSidebarSectionComponent } from './admin-sidebar/expandable-admin-sidebar-section/expandable-admin-sidebar-section.component'; import { BatchImportPageComponent } from './admin-import-batch-page/batch-import-page.component'; import { UiSwitchModule } from 'ngx-ui-switch'; +import { UploadModule } from '../shared/upload/upload.module'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -27,7 +28,8 @@ const ENTRY_COMPONENTS = [ AdminSearchModule.withEntryComponents(), AdminWorkflowModuleModule.withEntryComponents(), SharedModule, - UiSwitchModule + UiSwitchModule, + UploadModule, ], declarations: [ AdminCurationTasksComponent, From b2a9c4f456474876632119a26e8de88ae2656f72 Mon Sep 17 00:00:00 2001 From: nwoodward Date: Fri, 24 Mar 2023 08:48:19 -0500 Subject: [PATCH 444/833] handle http status code 413 from the backend when an SAF file is larger than the limit --- .../batch-import-page.component.ts | 12 +++++++++--- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/app/admin/admin-import-batch-page/batch-import-page.component.ts b/src/app/admin/admin-import-batch-page/batch-import-page.component.ts index 7171c67585..95e69277a8 100644 --- a/src/app/admin/admin-import-batch-page/batch-import-page.component.ts +++ b/src/app/admin/admin-import-batch-page/batch-import-page.component.ts @@ -97,9 +97,15 @@ export class BatchImportPageComponent { this.router.navigateByUrl(getProcessDetailRoute(rd.payload.processId)); } } else { - const title = this.translate.get('process.new.notification.error.title'); - const content = this.translate.get('process.new.notification.error.content'); - this.notificationsService.error(title, content); + if (rd.statusCode === 413) { + const title = this.translate.get('process.new.notification.error.title'); + const content = this.translate.get('process.new.notification.error.max-upload.content'); + this.notificationsService.error(title, content); + } else { + const title = this.translate.get('process.new.notification.error.title'); + const content = this.translate.get('process.new.notification.error.content'); + this.notificationsService.error(title, content); + } } }); } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index a8fc1b1177..bf493fb0e3 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3255,6 +3255,8 @@ "process.new.notification.error.content": "An error occurred while creating this process", + "process.new.notification.error.max-upload.content": "One or more files exceeds the maximum upload size", + "process.new.header": "Create a new process", "process.new.title": "Create a new process", From 3a7ab491bf8bbc43cb36e3ff6301ca1720e28353 Mon Sep 17 00:00:00 2001 From: nwoodward Date: Fri, 24 Mar 2023 08:53:55 -0500 Subject: [PATCH 445/833] updated message to reflect only one file --- src/assets/i18n/en.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index bf493fb0e3..e7ba9169c3 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -3255,7 +3255,7 @@ "process.new.notification.error.content": "An error occurred while creating this process", - "process.new.notification.error.max-upload.content": "One or more files exceeds the maximum upload size", + "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", "process.new.header": "Create a new process", From 46a73e9c1b71416fffac307e660bd3d9c9f3f560 Mon Sep 17 00:00:00 2001 From: Pierre Lasou Date: Fri, 24 Mar 2023 14:15:07 -0400 Subject: [PATCH 446/833] Fixing minor syntax problems Added missing commas and missing "//" characters. --- src/assets/i18n/fr.json5 | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index 34e352b790..32b2281921 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -6177,8 +6177,8 @@ // "idle-modal.log-out": "Log out", "idle-modal.log-out": "Déconnexion", - // "idle-modal.extend-session": "Extend session" - "idle-modal.extend-session": "Prolonger la session" + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Prolonger la session", @@ -6212,46 +6212,46 @@ "system-wide-alert.form.cancel": "Annuler", - "system-wide-alert.form.save": "Save", + //"system-wide-alert.form.save": "Save", "system-wide-alert.form.save": "Sauvegarder", - "system-wide-alert.form.label.active": "ACTIVE", + //"system-wide-alert.form.label.active": "ACTIVE", "system-wide-alert.form.label.active": "ACTIF", - "system-wide-alert.form.label.inactive": "INACTIVE", + //"system-wide-alert.form.label.inactive": "INACTIVE", "system-wide-alert.form.label.inactive": "INACTIF", - "system-wide-alert.form.error.message": "The system wide alert must have a message", + //"system-wide-alert.form.error.message": "The system wide alert must have a message", "system-wide-alert.form.error.message": "Le message d'avertissement ne peut pas être vide", - "system-wide-alert.form.label.message": "Alert message", + //"system-wide-alert.form.label.message": "Alert message", "system-wide-alert.form.label.message": "Message d'avertissement", - "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + //"system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", "system-wide-alert.form.label.countdownTo.enable": "Activer un compte à rebours", - "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + //"system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", "system-wide-alert.form.label.countdownTo.hint": "Lorsque cette option est activée, il est possible de fixer une date dans le futur et la bannière du message d'avertissement effectuera un compte à rebours jusqu'à la date fixée. À la fin du compte à rebours, le message d'avertissement disparaîtra mais le serveur ne sera pas arrêté automatiquement.", - "system-wide-alert.form.label.preview": "System-wide alert preview", + //"system-wide-alert.form.label.preview": "System-wide alert preview", "system-wide-alert.form.label.preview": "Aperçu du message d'avertissement", - "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + //"system-wide-alert.form.update.success": "The system-wide alert was successfully updated", "system-wide-alert.form.update.success": "Le message d'avertissement a été mis à jour", - "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + //"system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", "system-wide-alert.form.update.error": "Un erreur s'est produite lors de la mise à jour du message d'avertissement", - "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + //"system-wide-alert.form.create.success": "The system-wide alert was successfully created", "system-wide-alert.form.create.success": "Le message d'avertissement a été crée", - "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + //"system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", "system-wide-alert.form.create.error": "Un erreur s'est produite lors de la création du message d'avertissement", - "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + //"admin.system-wide-alert.breadcrumbs": "System-wide Alerts", "admin.system-wide-alert.breadcrumbs": "Messages d'avertissement", - "admin.system-wide-alert.title": "System-wide Alerts", + //"admin.system-wide-alert.title": "System-wide Alerts", "admin.system-wide-alert.title": "Messages d'avertissement", From 43dd508b10e4ca8dd5238080e60ad7900c0f6bae Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 26 Mar 2023 01:04:02 +0100 Subject: [PATCH 447/833] Fix placeholder not being shown for items with not THUMBNAIL bitstreams --- .../media-viewer-image.component.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts index 28c5b4efd6..59a9513d4f 100644 --- a/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts +++ b/src/app/item-page/media-viewer/media-viewer-image/media-viewer-image.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; +import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { NgxGalleryImage, NgxGalleryOptions } from '@kolkov/ngx-gallery'; import { MediaViewerItem } from '../../../core/shared/media-viewer-item.model'; import { NgxGalleryAnimation } from '@kolkov/ngx-gallery'; @@ -20,8 +20,9 @@ export class MediaViewerImageComponent implements OnChanges, OnInit { loggedin: boolean; - galleryOptions: NgxGalleryOptions[]; - galleryImages: NgxGalleryImage[]; + galleryOptions: NgxGalleryOptions[] = []; + + galleryImages: NgxGalleryImage[] = []; /** * Whether or not the current user is authenticated @@ -30,9 +31,7 @@ export class MediaViewerImageComponent implements OnChanges, OnInit { constructor(private authService: AuthService) {} - ngOnChanges(changes: SimpleChanges): void { - this.image = changes.image.currentValue; - this.preview = changes.preview.currentValue; + ngOnChanges(): void { this.galleryOptions = [ { preview: this.preview !== undefined ? this.preview : true, @@ -63,6 +62,7 @@ export class MediaViewerImageComponent implements OnChanges, OnInit { ngOnInit(): void { this.isAuthenticated$ = this.authService.isAuthenticated(); + this.ngOnChanges(); } /** From 153a53f1185ffe28790e6ec097dd66abbc9e035d Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Mon, 27 Mar 2023 16:31:26 +0200 Subject: [PATCH 448/833] 100302: Fix issues with live import --- ...bmission-import-external-collection.component.html | 1 - ...ssion-import-external-collection.component.spec.ts | 3 ++- ...submission-import-external-collection.component.ts | 1 + .../submission-import-external.component.ts | 11 +++++++++-- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.html b/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.html index 29c99732c3..6e88e53ad0 100644 --- a/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.html +++ b/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.html @@ -9,7 +9,6 @@
    diff --git a/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.spec.ts b/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.spec.ts index 4f3c54b642..94ce4b91ed 100644 --- a/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.spec.ts +++ b/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.spec.ts @@ -64,7 +64,7 @@ describe('SubmissionImportExternalCollectionComponent test suite', () => { compAsAny = null; }); - it('should emit from selectedEvent on selectObject', () => { + it('should emit from selectedEvent on selectObject and set loading to true', () => { spyOn(comp.selectedEvent, 'emit').and.callThrough(); const entry = { @@ -79,6 +79,7 @@ describe('SubmissionImportExternalCollectionComponent test suite', () => { comp.selectObject(entry); expect(comp.selectedEvent.emit).toHaveBeenCalledWith(entry); + expect(comp.loading).toBeTrue(); }); it('should dismiss modal on closeCollectionModal', () => { diff --git a/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.ts b/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.ts index 5fb4e5d406..22430196d4 100644 --- a/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.ts +++ b/src/app/submission/import-external/import-external-collection/submission-import-external-collection.component.ts @@ -38,6 +38,7 @@ export class SubmissionImportExternalCollectionComponent { * This method emits the selected Collection from the 'selectedEvent' variable. */ public selectObject(object: CollectionListEntry): void { + this.loading = true; this.selectedEvent.emit(object); } diff --git a/src/app/submission/import-external/submission-import-external.component.ts b/src/app/submission/import-external/submission-import-external.component.ts index f0a9dca508..8c2c5eca9e 100644 --- a/src/app/submission/import-external/submission-import-external.component.ts +++ b/src/app/submission/import-external/submission-import-external.component.ts @@ -15,7 +15,9 @@ import { Context } from '../../core/shared/context.model'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { RouteService } from '../../core/services/route.service'; import { createSuccessfulRemoteDataObject } from '../../shared/remote-data.utils'; -import { SubmissionImportExternalPreviewComponent } from './import-external-preview/submission-import-external-preview.component'; +import { + SubmissionImportExternalPreviewComponent +} from './import-external-preview/submission-import-external-preview.component'; import { fadeIn } from '../../shared/animations/fade'; import { PageInfo } from '../../core/shared/page-info.model'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; @@ -186,12 +188,17 @@ export class SubmissionImportExternalComponent implements OnInit, OnDestroy { this.retrieveExternalSourcesSub = this.reload$.pipe( filter((sourceQueryObject: ExternalSourceData) => isNotEmpty(sourceQueryObject.sourceId) && isNotEmpty(sourceQueryObject.query)), switchMap((sourceQueryObject: ExternalSourceData) => { + const currentEntry = this.entriesRD$.getValue(); + let useCache = true; + if (hasValue(currentEntry) && currentEntry.isError) { + useCache = false; + } const query = sourceQueryObject.query; this.routeData = sourceQueryObject; return this.searchConfigService.paginatedSearchOptions.pipe( tap(() => this.isLoading$.next(true)), filter((searchOptions) => searchOptions.query === query), - mergeMap((searchOptions) => this.externalService.getExternalSourceEntries(this.routeData.sourceId, searchOptions).pipe( + mergeMap((searchOptions) => this.externalService.getExternalSourceEntries(this.routeData.sourceId, searchOptions, useCache).pipe( getFinishedRemoteData(), )) ); From a2aa436c1dc143e706e73a7185e448a5d726a6b0 Mon Sep 17 00:00:00 2001 From: reetagithub <51482276+reetagithub@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:24:01 +0300 Subject: [PATCH 449/833] Update en.json5 Two typos corrected. --- src/assets/i18n/en.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index a964c9f1d1..c841875443 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2680,7 +2680,7 @@ "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", + "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", @@ -2690,7 +2690,7 @@ "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", - "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", + "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", From 26f9c7e40f90fbe5f6c123d82ad661f4d651ab47 Mon Sep 17 00:00:00 2001 From: reetagithub <51482276+reetagithub@users.noreply.github.com> Date: Tue, 28 Mar 2023 12:44:34 +0300 Subject: [PATCH 450/833] Update fi.json5 Harmonized some translations and translated the few new translations. --- src/assets/i18n/fi.json5 | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/assets/i18n/fi.json5 b/src/assets/i18n/fi.json5 index 05ae06d46b..46af219036 100644 --- a/src/assets/i18n/fi.json5 +++ b/src/assets/i18n/fi.json5 @@ -156,7 +156,8 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nimi", - // TODO New key - Add a translation + + // "admin.registries.bitstream-formats.table.id" : "ID", "admin.registries.bitstream-formats.table.id" : "ID", // "admin.registries.bitstream-formats.table.return": "Return", @@ -207,7 +208,7 @@ "admin.registries.metadata.schemas.table.delete": "Poista valittu", // "admin.registries.metadata.schemas.table.id": "ID", - "admin.registries.metadata.schemas.table.id": "ID-tunnus", + "admin.registries.metadata.schemas.table.id": "ID", // "admin.registries.metadata.schemas.table.name": "Name", "admin.registries.metadata.schemas.table.name": "Nimi", @@ -237,7 +238,8 @@ // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Kenttä", - // TODO New key - Add a translation + + // "admin.registries.schema.fields.table.id" : "ID", "admin.registries.schema.fields.table.id" : "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", @@ -408,7 +410,7 @@ "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Jäsenenä näissä ryhmissä:", // "admin.access-control.epeople.form.table.id": "ID", - "admin.access-control.epeople.form.table.id": "ID-tunnus", + "admin.access-control.epeople.form.table.id": "ID", // "admin.access-control.epeople.form.table.name": "Name", "admin.access-control.epeople.form.table.name": "Nimi", @@ -2495,7 +2497,7 @@ "item.edit.tabs.status.buttons.reinstate.label": "Palauta tietue arkistoon", // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", - "item.edit.tabs.status.buttons.withdraw.button": "poista tämä kohde", + "item.edit.tabs.status.buttons.withdraw.button": "Poista tämä kohde", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", "item.edit.tabs.status.buttons.withdraw.label": "Poista tietue käytöstä", @@ -2510,7 +2512,7 @@ "item.edit.tabs.status.labels.handle": "Handle-tunnus", // "item.edit.tabs.status.labels.id": "Item Internal ID", - "item.edit.tabs.status.labels.id": "Tietueen sisäinen ID-tunnus", + "item.edit.tabs.status.labels.id": "Tietueen sisäinen ID", // "item.edit.tabs.status.labels.itemPage": "Item Page", "item.edit.tabs.status.labels.itemPage": "Tietueen tiedot", @@ -3351,7 +3353,7 @@ "orgunit.page.edit": "Muokkaa tietuetta", // "orgunit.page.id": "ID", - "orgunit.page.id": "ID-tunnus", + "orgunit.page.id": "ID", // "orgunit.page.titleprefix": "Organizational Unit: ", "orgunit.page.titleprefix": "Organisaatioyksikkö: ", @@ -3403,7 +3405,7 @@ "person.page.orcid": "ORCID-tunniste", // "person.page.staffid": "Staff ID", - "person.page.staffid": "Henkilökunnan ID-tunnus", + "person.page.staffid": "Henkilökunnan ID", // "person.page.titleprefix": "Person: ", "person.page.titleprefix": "Käyttäjä: ", @@ -3655,7 +3657,7 @@ "project.page.funder": "Rahoittajat", // "project.page.id": "ID", - "project.page.id": "ID-tunnus", + "project.page.id": "ID", // "project.page.keyword": "Keywords", "project.page.keyword": "Asiasanat", @@ -3939,7 +3941,7 @@ "resource-policies.form.eperson-group-list.table.headers.action": "Toimenpide", // "resource-policies.form.eperson-group-list.table.headers.id": "ID", - "resource-policies.form.eperson-group-list.table.headers.id": "ID-tunnus", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", // "resource-policies.form.eperson-group-list.table.headers.name": "Name", "resource-policies.form.eperson-group-list.table.headers.name": "Nimi", @@ -3987,7 +3989,7 @@ "resource-policies.table.headers.group": "Ryhmä", // "resource-policies.table.headers.id": "ID", - "resource-policies.table.headers.id": "ID-tunnus", + "resource-policies.table.headers.id": "ID", // "resource-policies.table.headers.name": "Name", "resource-policies.table.headers.name": "Nimi", @@ -4914,8 +4916,8 @@ // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", "submission.sections.upload.header.policy.default.withlist": "Yksittäisten tiedostojen pääsyrajoitusten lisäksi {{collectionName}}-kokoelmaan ladatut tiedostot ovat seuraavien ryhmien saatavilla:", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", - "submission.sections.upload.info": "Tietueen kaikki tiedostot on lueteltu tässä. Voit päivittää tiedoston metadataa ja pääsyehtoja tai ladata lisää tiedostoja raahaamalla ne mihin hyvänsä sivun kohtaan", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Tietueen kaikki tiedostot on lueteltu tässä. Voit päivittää tiedoston metadataa ja pääsyehtoja tai ladata lisää tiedostoja raahaamalla ne mihin hyvänsä sivun kohtaan.", // "submission.sections.upload.no-entry": "No", "submission.sections.upload.no-entry": "Ei", @@ -5066,8 +5068,7 @@ "uploader.or": " tai", // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", - // TODO Source message changed - Revise the translation - "uploader.processing": "Käsitellään", + "uploader.processing": "Käsitellään ladattuja tiedostoja... (voit sulkea tämän sivun)", // "uploader.queue-length": "Queue length", "uploader.queue-length": "Jonon pituus", From 9f6616a5ce94202c10f33cdf6d33eb3b0dbb8697 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Tue, 28 Mar 2023 14:38:44 +0200 Subject: [PATCH 451/833] 100302: Add support to check if a request has a cached value --- .../core/data/base/base-data.service.spec.ts | 56 +++++++++++++++++++ src/app/core/data/base/base-data.service.ts | 31 ++++++++++ .../data/external-source-data.service.spec.ts | 42 +++++++++++--- .../core/data/external-source-data.service.ts | 7 ++- src/app/shared/mocks/request.service.mock.ts | 3 +- .../submission-import-external.component.ts | 7 +-- 6 files changed, 129 insertions(+), 17 deletions(-) diff --git a/src/app/core/data/base/base-data.service.spec.ts b/src/app/core/data/base/base-data.service.spec.ts index 17532f477a..098f075c10 100644 --- a/src/app/core/data/base/base-data.service.spec.ts +++ b/src/app/core/data/base/base-data.service.spec.ts @@ -641,6 +641,62 @@ describe('BaseDataService', () => { }); }); + describe('hasCachedResponse', () => { + it('should return false when the request will be dispatched', (done) => { + const result = service.hasCachedResponse('test-href'); + + result.subscribe((hasCachedResponse) => { + expect(hasCachedResponse).toBeFalse(); + done(); + }); + }); + + it('should return true when the request will not be dispatched', (done) => { + (requestService.shouldDispatchRequest as jasmine.Spy).and.returnValue(false); + const result = service.hasCachedResponse('test-href'); + + result.subscribe((hasCachedResponse) => { + expect(hasCachedResponse).toBeTrue(); + done(); + }); + }); + }); + + describe('hasCachedErrorResponse', () => { + it('should return false when no response is cached', (done) => { + spyOn(service,'hasCachedResponse').and.returnValue(observableOf(false)); + const result = service.hasCachedErrorResponse('test-href'); + + result.subscribe((hasCachedErrorResponse) => { + expect(hasCachedErrorResponse).toBeFalse(); + done(); + }); + }); + it('should return false when no error response is cached', (done) => { + spyOn(service,'hasCachedResponse').and.returnValue(observableOf(true)); + spyOn(rdbService,'buildSingle').and.returnValue(createSuccessfulRemoteDataObject$({})); + + const result = service.hasCachedErrorResponse('test-href'); + + result.subscribe((hasCachedErrorResponse) => { + expect(hasCachedErrorResponse).toBeFalse(); + done(); + }); + }); + + it('should return true when an error response is cached', (done) => { + spyOn(service,'hasCachedResponse').and.returnValue(observableOf(true)); + spyOn(rdbService,'buildSingle').and.returnValue(createFailedRemoteDataObject$()); + + const result = service.hasCachedErrorResponse('test-href'); + + result.subscribe((hasCachedErrorResponse) => { + expect(hasCachedErrorResponse).toBeTrue(); + done(); + }); + }); + }); + describe('addDependency', () => { let addDependencySpy; diff --git a/src/app/core/data/base/base-data.service.ts b/src/app/core/data/base/base-data.service.ts index 85603580a4..e373c8cfac 100644 --- a/src/app/core/data/base/base-data.service.ts +++ b/src/app/core/data/base/base-data.service.ts @@ -341,6 +341,37 @@ export class BaseDataService implements HALDataServic } } + hasCachedResponse(href$: string | Observable): Observable { + if (isNotEmpty(href$)) { + if (typeof href$ === 'string') { + href$ = observableOf(href$); + } + return href$.pipe( + isNotEmptyOperator(), + take(1), + map((href: string) => { + const requestId = this.requestService.generateRequestId(); + const request = new GetRequest(requestId, href); + return !this.requestService.shouldDispatchRequest(request, true); + }), + ); + } + } + + hasCachedErrorResponse(href$: string | Observable): Observable { + return this.hasCachedResponse(href$).pipe( + switchMap((hasCachedResponse) => { + if (hasCachedResponse) { + return this.rdbService.buildSingle(href$).pipe( + getFirstCompletedRemoteData(), + map((rd => rd.isError || rd.isErrorStale)) + ); + } + return observableOf(false); + }) + ); + } + /** * Return the links to traverse from the root of the api to the * endpoint this DataService represents diff --git a/src/app/core/data/external-source-data.service.spec.ts b/src/app/core/data/external-source-data.service.spec.ts index cdbdbaa006..723d7f9bed 100644 --- a/src/app/core/data/external-source-data.service.spec.ts +++ b/src/app/core/data/external-source-data.service.spec.ts @@ -5,6 +5,7 @@ import { ExternalSourceEntry } from '../shared/external-source-entry.model'; import { of as observableOf } from 'rxjs'; import { GetRequest } from './request.models'; import { testSearchDataImplementation } from './base/search-data.spec'; +import { take } from 'rxjs/operators'; describe('ExternalSourceService', () => { let service: ExternalSourceDataService; @@ -64,19 +65,42 @@ describe('ExternalSourceService', () => { }); describe('getExternalSourceEntries', () => { - let result; - beforeEach(() => { - result = service.getExternalSourceEntries('test'); + describe('when no error response is cached', () => { + let result; + beforeEach(() => { + spyOn(service, 'hasCachedErrorResponse').and.returnValue(observableOf(false)); + result = service.getExternalSourceEntries('test'); + }); + + it('should send a GetRequest', () => { + result.pipe(take(1)).subscribe(); + expect(requestService.send).toHaveBeenCalledWith(jasmine.any(GetRequest), true); + }); + + it('should return the entries', () => { + result.subscribe((resultRD) => { + expect(resultRD.payload.page).toBe(entries); + }); + }); }); - it('should send a GetRequest', () => { - expect(requestService.send).toHaveBeenCalledWith(jasmine.any(GetRequest), true); - }); + describe('when an error response is cached', () => { + let result; + beforeEach(() => { + spyOn(service, 'hasCachedErrorResponse').and.returnValue(observableOf(true)); + result = service.getExternalSourceEntries('test'); + }); - it('should return the entries', () => { - result.subscribe((resultRD) => { - expect(resultRD.payload.page).toBe(entries); + it('should send a GetRequest', () => { + result.pipe(take(1)).subscribe(); + expect(requestService.send).toHaveBeenCalledWith(jasmine.any(GetRequest), false); + }); + + it('should return the entries', () => { + result.subscribe((resultRD) => { + expect(resultRD.payload.page).toBe(entries); + }); }); }); }); diff --git a/src/app/core/data/external-source-data.service.ts b/src/app/core/data/external-source-data.service.ts index c0552aeaec..02c5e4a53c 100644 --- a/src/app/core/data/external-source-data.service.ts +++ b/src/app/core/data/external-source-data.service.ts @@ -74,7 +74,12 @@ export class ExternalSourceDataService extends IdentifiableDataService { + return this.findListByHref(href$, undefined, !hasCachedErrorResponse, reRequestOnStale, ...linksToFollow as any); + }) + ) as any; } /** diff --git a/src/app/shared/mocks/request.service.mock.ts b/src/app/shared/mocks/request.service.mock.ts index bce5b2d466..90db66dcd7 100644 --- a/src/app/shared/mocks/request.service.mock.ts +++ b/src/app/shared/mocks/request.service.mock.ts @@ -14,6 +14,7 @@ export function getMockRequestService(requestEntry$: Observable = removeByHrefSubstring: observableOf(true), setStaleByHrefSubstring: observableOf(true), setStaleByUUID: observableOf(true), - hasByHref$: observableOf(false) + hasByHref$: observableOf(false), + shouldDispatchRequest: true }); } diff --git a/src/app/submission/import-external/submission-import-external.component.ts b/src/app/submission/import-external/submission-import-external.component.ts index 8c2c5eca9e..25b1d5d1aa 100644 --- a/src/app/submission/import-external/submission-import-external.component.ts +++ b/src/app/submission/import-external/submission-import-external.component.ts @@ -188,17 +188,12 @@ export class SubmissionImportExternalComponent implements OnInit, OnDestroy { this.retrieveExternalSourcesSub = this.reload$.pipe( filter((sourceQueryObject: ExternalSourceData) => isNotEmpty(sourceQueryObject.sourceId) && isNotEmpty(sourceQueryObject.query)), switchMap((sourceQueryObject: ExternalSourceData) => { - const currentEntry = this.entriesRD$.getValue(); - let useCache = true; - if (hasValue(currentEntry) && currentEntry.isError) { - useCache = false; - } const query = sourceQueryObject.query; this.routeData = sourceQueryObject; return this.searchConfigService.paginatedSearchOptions.pipe( tap(() => this.isLoading$.next(true)), filter((searchOptions) => searchOptions.query === query), - mergeMap((searchOptions) => this.externalService.getExternalSourceEntries(this.routeData.sourceId, searchOptions, useCache).pipe( + mergeMap((searchOptions) => this.externalService.getExternalSourceEntries(this.routeData.sourceId, searchOptions).pipe( getFinishedRemoteData(), )) ); From af9b4a292e4c289c50fcd96eeabcc49cf3e3045e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 30 Mar 2023 12:28:48 +0200 Subject: [PATCH 452/833] Fix error message when updating ORCID settings --- .../orcid-sync-settings/orcid-sync-settings.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 494075c0f0..1ed8e95616 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -156,7 +156,8 @@ export class OrcidSyncSettingsComponent implements OnInit { } }), ).subscribe((remoteData: RemoteData) => { - if (remoteData.isSuccess) { + // hasSucceeded is true if the response is success or successStale + if (remoteData.hasSucceeded) { this.notificationsService.success(this.translateService.get(this.messagePrefix + '.synchronization-settings-update.success')); this.settingsUpdated.emit(); } else { From 6c5ae4972ecdb877feecc5e563bb7893191827d6 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Thu, 30 Mar 2023 16:53:10 +0200 Subject: [PATCH 453/833] 100302: Add an error to prevent piping or subscribing to undefined when no href is present --- src/app/core/data/base/base-data.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/core/data/base/base-data.service.ts b/src/app/core/data/base/base-data.service.ts index e373c8cfac..7363894502 100644 --- a/src/app/core/data/base/base-data.service.ts +++ b/src/app/core/data/base/base-data.service.ts @@ -356,6 +356,7 @@ export class BaseDataService implements HALDataServic }), ); } + throw new Error(`Can't check whether there is a cached response for an empty href$`); } hasCachedErrorResponse(href$: string | Observable): Observable { From b00a0f5be9b28a4e44d35514503b4cf7acc22ec9 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 29 Mar 2023 17:56:48 +0200 Subject: [PATCH 454/833] 100553: Added extra regex validation to prevent users from adding namespaces, elements and qualifiers with spaces Minor fixes: - Metadata Registry's name field was not being emptied after successful submission - The first input from both forms both had the red error border after clearing the fields --- .../metadata-schema-form.component.spec.ts | 4 +++- .../metadata-schema-form.component.ts | 11 ++++++++--- .../metadata-field-form.component.spec.ts | 4 +++- .../metadata-field-form.component.ts | 15 +++++++++++++-- src/assets/i18n/en.json5 | 6 ++++++ 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts index 8d416c2df8..98e98a6646 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts @@ -29,7 +29,9 @@ describe('MetadataSchemaFormComponent', () => { createFormGroup: () => { return { patchValue: () => { - } + }, + markAsUntouched(opts?: any) { + }, }; } }; diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index 5c6885ae72..adb649696c 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -77,10 +77,10 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { } ngOnInit() { - combineLatest( + combineLatest([ this.translateService.get(`${this.messagePrefix}.name`), this.translateService.get(`${this.messagePrefix}.namespace`) - ).subscribe(([name, namespace]) => { + ]).subscribe(([name, namespace]) => { this.name = new DynamicInputModel({ id: 'name', label: name, @@ -97,8 +97,12 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'namespace', validators: { required: null, + pattern: '^[^.]*$', }, required: true, + errorMessages: { + pattern: 'error.validation.metadata.namespace.invalid-pattern', + }, }); this.formModel = [ new DynamicFormGroupModel( @@ -163,9 +167,10 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { * Reset all input-fields to be empty */ clearFields() { + this.formGroup.markAsUntouched(); this.formGroup.patchValue({ metadatadataschemagroup:{ - prefix: '', + name: '', namespace: '' } }); diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts index e13180d633..fcd8dd395d 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts @@ -39,7 +39,9 @@ describe('MetadataFieldFormComponent', () => { createFormGroup: () => { return { patchValue: () => { - } + }, + markAsUntouched(opts?: any) { + }, }; } }; diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 1c000c3c76..14013f3cb7 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -98,25 +98,35 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * Initialize the component, setting up the necessary Models for the dynamic form */ ngOnInit() { - combineLatest( + combineLatest([ this.translateService.get(`${this.messagePrefix}.element`), this.translateService.get(`${this.messagePrefix}.qualifier`), this.translateService.get(`${this.messagePrefix}.scopenote`) - ).subscribe(([element, qualifier, scopenote]) => { + ]).subscribe(([element, qualifier, scopenote]) => { this.element = new DynamicInputModel({ id: 'element', label: element, name: 'element', validators: { required: null, + pattern: '^[^.]*$', }, required: true, + errorMessages: { + pattern: 'error.validation.metadata.element.invalid-pattern', + }, }); this.qualifier = new DynamicInputModel({ id: 'qualifier', label: qualifier, name: 'qualifier', + validators: { + pattern: '^[^.]*$', + }, required: false, + errorMessages: { + pattern: 'error.validation.metadata.qualifier.invalid-pattern', + }, }); this.scopeNote = new DynamicInputModel({ id: 'scopeNote', @@ -189,6 +199,7 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * Reset all input-fields to be empty */ clearFields() { + this.formGroup.markAsUntouched(); this.formGroup.patchValue({ metadatadatafieldgroup: { element: '', diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 597f226cc7..c0edb83a3b 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1478,6 +1478,12 @@ "error.validation.groupExists": "This group already exists", + "error.validation.metadata.namespace.invalid-pattern": "This field cannot contain dots, please use the Element & Qualifier fields instead", + + "error.validation.metadata.element.invalid-pattern": "This field cannot contain dots, please use the Qualifier field instead", + + "error.validation.metadata.qualifier.invalid-pattern": "This field cannot contain dots", + "feed.description": "Syndication feed", From 792a614631dcc6e915ea0301355f06b387a3db4f Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Thu, 30 Mar 2023 17:09:50 +0200 Subject: [PATCH 455/833] 100553: Set the maximum amount of metadata fields shown on EditInPlaceFieldComponent back to 10 --- .../edit-in-place-field/edit-in-place-field.component.html | 2 +- .../edit-in-place-field.component.spec.ts | 2 +- .../edit-in-place-field/edit-in-place-field.component.ts | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html index 46299c1b08..64e863b8bf 100644 --- a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html +++ b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.html @@ -12,7 +12,7 @@ (clickSuggestion)="update(suggestionControl)" (typeSuggestion)="update(suggestionControl)" (dsClickOutside)="checkValidity(suggestionControl)" - (findSuggestions)="findMetadataFieldSuggestions($event)" + (findSuggestions)="findMetadataFieldSuggestions($event, { elementsPerPage: 10 })" #suggestionControl="ngModel" [valid]="(valid | async) !== false" dsAutoFocus autoFocusSelector=".suggestion_input" diff --git a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts index 121ab4580e..2a2ca7ffaa 100644 --- a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.spec.ts @@ -228,7 +228,7 @@ describe('EditInPlaceFieldComponent', () => { })); it('it should call queryMetadataFields on the metadataFieldService with the correct query', () => { - expect(metadataFieldService.queryMetadataFields).toHaveBeenCalledWith(query, null, true, false, followLink('schema')); + expect(metadataFieldService.queryMetadataFields).toHaveBeenCalledWith(query, {}, true, false, followLink('schema')); }); it('it should set metadataFieldSuggestions to the right value', () => { diff --git a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts index f1ebecb84f..6ed057bc6a 100644 --- a/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts +++ b/src/app/item-page/edit-item-page/item-metadata/edit-in-place-field/edit-in-place-field.component.ts @@ -15,6 +15,7 @@ import { InputSuggestion } from '../../../../shared/input-suggestions/input-sugg import { followLink } from '../../../../shared/utils/follow-link-config.model'; import { FieldUpdate } from '../../../../core/data/object-updates/field-update.model'; import { FieldChangeType } from '../../../../core/data/object-updates/field-change-type.model'; +import { FindListOptions } from '../../../../core/data/find-list-options.model'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -124,10 +125,11 @@ export class EditInPlaceFieldComponent implements OnInit, OnChanges { * Then sets all found metadata fields as metadataFieldSuggestions * Ignores fields from metadata schemas "relation" and "relationship" * @param query The query to look for + * @param options The options that need to be given to the backend */ - findMetadataFieldSuggestions(query: string) { + findMetadataFieldSuggestions(query: string, options: FindListOptions = {}) { if (isNotEmpty(query)) { - return this.registryService.queryMetadataFields(query, null, true, false, followLink('schema')).pipe( + return this.registryService.queryMetadataFields(query, options, true, false, followLink('schema')).pipe( getFirstSucceededRemoteData(), metadataFieldsToString(), ).subscribe((fieldNames: string[]) => { From 0fbcf841259ea79418bc9ba81b45e44e89830369 Mon Sep 17 00:00:00 2001 From: Pierre Lasou Date: Thu, 30 Mar 2023 11:50:16 -0400 Subject: [PATCH 456/833] Small updates to french translations Adding corrections suggested in the following PR review: https://github.com/DSpace/dspace-angular/pull/2154 --- src/assets/i18n/fr.json5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/assets/i18n/fr.json5 b/src/assets/i18n/fr.json5 index 32b2281921..3ac72d796a 100644 --- a/src/assets/i18n/fr.json5 +++ b/src/assets/i18n/fr.json5 @@ -2527,7 +2527,7 @@ "item.edit.identifiers.doi.status.IS_REGISTERED": "Inscrit", // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", - "item.edit.identifiers.doi.status.IS_RESERVED": "Réseré", + "item.edit.identifiers.doi.status.IS_RESERVED": "Réservé", // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Réservé (en attente)", @@ -2560,7 +2560,7 @@ "item.edit.register-doi.header": "Inscrire un nouveau DOI ou un DOI en attente", // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", - "item.edit.register-doi.description": "Réviser les identifiants en attente and les métadonnées ci-dessous item metadata below puis cliquer sur Confirmer afin de lancer l'inscription du DOI ou sur Annuler pour interrompre l'inscription", + "item.edit.register-doi.description": "Réviser les identifiants en attente et les métadonnées ci-dessous puis cliquer sur Confirmer afin de lancer l'inscription du DOI ou sur Annuler pour interrompre l'inscription", // "item.edit.register-doi.confirm": "Confirm", "item.edit.register-doi.confirm": "Confirmer", @@ -6088,7 +6088,7 @@ //"supervisedWorkspace.search.results.head": "Supervised Items", - "supervisedWorkspace.search.results.head": "Items supervisés", + "supervisedWorkspace.search.results.head": "Documents supervisés", //"workspace.search.results.head": "Your submissions", "workspace.search.results.head": "Vos dépôts", From b5881a0ae997d612d7cd1ba38e28743df0f91bff Mon Sep 17 00:00:00 2001 From: cris Date: Thu, 30 Mar 2023 16:51:08 +0000 Subject: [PATCH 457/833] modifying behavior of collectionModifiable --- .../form/collection/submission-form-collection.component.html | 2 +- .../workflowitems-edit-page-routing.module.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/submission/form/collection/submission-form-collection.component.html b/src/app/submission/form/collection/submission-form-collection.component.html index aa33905daf..c1227eeccc 100644 --- a/src/app/submission/form/collection/submission-form-collection.component.html +++ b/src/app/submission/form/collection/submission-form-collection.component.html @@ -25,7 +25,7 @@ class="btn btn-outline-primary" (blur)="onClose()" (click)="onClose()" - [disabled]="(processingChange$ | async) || collectionModifiable" + [disabled]="(processingChange$ | async) || collectionModifiable == false" ngbDropdownToggle> {{ selectedCollectionName$ | async }} diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts index 5d5a7443de..b093f20563 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts @@ -37,7 +37,7 @@ import { data: { title: 'workflow-item.edit.title', breadcrumbKey: 'workflow-item.edit', - collectionModifiable: true + collectionModifiable: false } }, { From 0ffdda26dca858302c35d752241212ecb23a894d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Emanuelle=20Guzm=C3=A1n=20Su=C3=A1rez?= Date: Thu, 30 Mar 2023 11:16:28 -0600 Subject: [PATCH 458/833] Update workflowitems-edit-page-routing.module.ts small change to re run test --- .../workflowitems-edit-page-routing.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts index b093f20563..511009991a 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts @@ -62,7 +62,7 @@ import { { canActivate: [AuthenticatedGuard], path: WORKFLOW_ITEM_SEND_BACK_PATH, - component: ThemedWorkflowItemSendBackComponent, + component: ThemedWorkflowItemSendBackComponent, resolve: { breadcrumb: I18nBreadcrumbResolver }, From bb8775a8f0fb7ad6311e1f1078e5b30255db217a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristian=20Emanuelle=20Guzm=C3=A1n=20Su=C3=A1rez?= Date: Thu, 30 Mar 2023 12:02:42 -0600 Subject: [PATCH 459/833] Update workflowitems-edit-page-routing.module.ts avoiding trailing-space --- .../workflowitems-edit-page-routing.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts index 511009991a..b093f20563 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing.module.ts @@ -62,7 +62,7 @@ import { { canActivate: [AuthenticatedGuard], path: WORKFLOW_ITEM_SEND_BACK_PATH, - component: ThemedWorkflowItemSendBackComponent, + component: ThemedWorkflowItemSendBackComponent, resolve: { breadcrumb: I18nBreadcrumbResolver }, From 5b33c49ccc76c9c8813bbd565fc01da9a09b2b26 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Tue, 28 Mar 2023 13:18:34 -0700 Subject: [PATCH 460/833] Added upper limit to browse by date --- .../browse-by-date-page.component.spec.ts | 31 +++++++--- .../browse-by-date-page.component.ts | 57 ++++++++++++------- src/app/core/browse/browse.service.ts | 7 ++- 3 files changed, 66 insertions(+), 29 deletions(-) diff --git a/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.spec.ts b/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.spec.ts index 5c2a6d820e..e41d3a45b2 100644 --- a/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.spec.ts +++ b/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.spec.ts @@ -22,6 +22,7 @@ import { PaginationService } from '../../core/pagination/pagination.service'; import { PaginationServiceStub } from '../../shared/testing/pagination-service.stub'; import { APP_CONFIG } from '../../../config/app-config.interface'; import { environment } from '../../../environments/environment'; +import { SortDirection } from '../../core/cache/models/sort-options.model'; describe('BrowseByDatePageComponent', () => { let comp: BrowseByDatePageComponent; @@ -49,12 +50,22 @@ describe('BrowseByDatePageComponent', () => { ] } }); + const lastItem = Object.assign(new Item(), { + id: 'last-item-id', + metadata: { + 'dc.date.issued': [ + { + value: '1960-01-01' + } + ] + } + }); - const mockBrowseService = { - getBrowseEntriesFor: (options: BrowseEntrySearchOptions) => toRemoteData([]), - getBrowseItemsFor: (value: string, options: BrowseEntrySearchOptions) => toRemoteData([firstItem]), - getFirstItemFor: () => createSuccessfulRemoteDataObject$(firstItem) - }; + const mockBrowseService = { + getBrowseEntriesFor: (options: BrowseEntrySearchOptions) => toRemoteData([]), + getBrowseItemsFor: (value: string, options: BrowseEntrySearchOptions) => toRemoteData([firstItem]), + getFirstItemFor: (definition: string, scope?: string, sortDirection?: SortDirection) => null + }; const mockDsoService = { findById: () => createSuccessfulRemoteDataObject$(mockCommunity) @@ -91,9 +102,14 @@ describe('BrowseByDatePageComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(BrowseByDatePageComponent); + const browseService = fixture.debugElement.injector.get(BrowseService); + spyOn(browseService, 'getFirstItemFor') + // ok to expect the default browse as first param since we just need the mock items obtained via sort direction. + .withArgs('author', undefined, SortDirection.ASC).and.returnValue(createSuccessfulRemoteDataObject$(firstItem)) + .withArgs('author', undefined, SortDirection.DESC).and.returnValue(createSuccessfulRemoteDataObject$(lastItem)); comp = fixture.componentInstance; - fixture.detectChanges(); route = (comp as any).route; + fixture.detectChanges(); }); it('should initialize the list of items', () => { @@ -107,6 +123,7 @@ describe('BrowseByDatePageComponent', () => { }); it('should create a list of startsWith options with the current year first', () => { - expect(comp.startsWithOptions[0]).toEqual(new Date().getUTCFullYear()); + //expect(comp.startsWithOptions[0]).toEqual(new Date().getUTCFullYear()); + expect(comp.startsWithOptions[0]).toEqual(1960); }); }); diff --git a/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.ts b/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.ts index ffa7e882af..01cd3a003e 100644 --- a/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.ts +++ b/src/app/browse-by/browse-by-date-page/browse-by-date-page.component.ts @@ -1,11 +1,10 @@ import { ChangeDetectorRef, Component, Inject } from '@angular/core'; import { BrowseByMetadataPageComponent, - browseParamsToOptions, getBrowseSearchOptions + browseParamsToOptions, + getBrowseSearchOptions } from '../browse-by-metadata-page/browse-by-metadata-page.component'; import { combineLatest as observableCombineLatest } from 'rxjs'; -import { RemoteData } from '../../core/data/remote-data'; -import { Item } from '../../core/shared/item.model'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; import { ActivatedRoute, Params, Router } from '@angular/router'; import { BrowseService } from '../../core/browse/browse.service'; @@ -16,7 +15,9 @@ import { map } from 'rxjs/operators'; import { PaginationComponentOptions } from '../../shared/pagination/pagination-component-options.model'; import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; import { isValidDate } from '../../shared/date.util'; -import { AppConfig, APP_CONFIG } from '../../../config/app-config.interface'; +import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; +import { RemoteData } from '../../core/data/remote-data'; +import { Item } from '../../core/shared/item.model'; @Component({ selector: 'ds-browse-by-date-page', @@ -72,30 +73,24 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent { /** * Update the StartsWith options - * In this implementation, it creates a list of years starting from now, going all the way back to the earliest - * date found on an item within this scope. The further back in time, the bigger the change in years become to avoid - * extremely long lists with a one-year difference. + * In this implementation, it creates a list of years starting from the most recent item or the current year, going + * all the way back to the earliest date found on an item within this scope. The further back in time, the bigger + * the change in years become to avoid extremely long lists with a one-year difference. * To determine the change in years, the config found under GlobalConfig.BrowseBy is used for this. * @param definition The metadata definition to fetch the first item for * @param metadataKeys The metadata fields to fetch the earliest date from (expects a date field) * @param scope The scope under which to fetch the earliest item for */ updateStartsWithOptions(definition: string, metadataKeys: string[], scope?: string) { + const firstItemRD = this.browseService.getFirstItemFor(definition, scope, SortDirection.ASC); + const lastItemRD = this.browseService.getFirstItemFor(definition, scope, SortDirection.DESC); this.subs.push( - this.browseService.getFirstItemFor(definition, scope).subscribe((firstItemRD: RemoteData) => { - let lowerLimit = this.appConfig.browseBy.defaultLowerLimit; - if (hasValue(firstItemRD.payload)) { - const date = firstItemRD.payload.firstMetadataValue(metadataKeys); - if (isNotEmpty(date) && isValidDate(date)) { - const dateObj = new Date(date); - // TODO: it appears that getFullYear (based on local time) is sometimes unreliable. Switching to UTC. - lowerLimit = isNaN(dateObj.getUTCFullYear()) ? lowerLimit : dateObj.getUTCFullYear(); - } - } + observableCombineLatest([firstItemRD, lastItemRD]).subscribe(([firstItem, lastItem]) => { + let lowerLimit = this.getLimit(firstItem, metadataKeys, this.appConfig.browseBy.defaultLowerLimit); + let upperLimit = this.getLimit(lastItem, metadataKeys, new Date().getUTCFullYear()); const options = []; - const currentYear = new Date().getUTCFullYear(); - const oneYearBreak = Math.floor((currentYear - this.appConfig.browseBy.oneYearLimit) / 5) * 5; - const fiveYearBreak = Math.floor((currentYear - this.appConfig.browseBy.fiveYearLimit) / 10) * 10; + const oneYearBreak = Math.floor((upperLimit - this.appConfig.browseBy.oneYearLimit) / 5) * 5; + const fiveYearBreak = Math.floor((upperLimit - this.appConfig.browseBy.fiveYearLimit) / 10) * 10; if (lowerLimit <= fiveYearBreak) { lowerLimit -= 10; } else if (lowerLimit <= oneYearBreak) { @@ -103,7 +98,7 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent { } else { lowerLimit -= 1; } - let i = currentYear; + let i = upperLimit; while (i > lowerLimit) { options.push(i); if (i <= fiveYearBreak) { @@ -121,4 +116,24 @@ export class BrowseByDatePageComponent extends BrowseByMetadataPageComponent { }) ); } + + /** + * Returns the year from the item metadata field or the limit. + * @param itemRD the item remote data + * @param metadataKeys The metadata fields to fetch the earliest date from (expects a date field) + * @param limit the limit to use if the year can't be found in metadata + * @private + */ + private getLimit(itemRD: RemoteData, metadataKeys: string[], limit: number): number { + if (hasValue(itemRD.payload)) { + const date = itemRD.payload.firstMetadataValue(metadataKeys); + if (isNotEmpty(date) && isValidDate(date)) { + const dateObj = new Date(date); + // TODO: it appears that getFullYear (based on local time) is sometimes unreliable. Switching to UTC. + return isNaN(dateObj.getUTCFullYear()) ? limit : dateObj.getUTCFullYear(); + } else { + return new Date().getUTCFullYear(); + } + } + } } diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index be28015069..989213a978 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -22,6 +22,7 @@ import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { HrefOnlyDataService } from '../data/href-only-data.service'; import { followLink, FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { BrowseDefinitionDataService } from './browse-definition-data.service'; +import { SortDirection } from '../cache/models/sort-options.model'; export const BROWSE_LINKS_TO_FOLLOW: FollowLinkConfig[] = [ @@ -160,8 +161,9 @@ export class BrowseService { * Get the first item for a metadata definition in an optional scope * @param definition * @param scope + * @param sortDirection optional sort parameter */ - getFirstItemFor(definition: string, scope?: string): Observable> { + getFirstItemFor(definition: string, scope?: string, sortDirection?: SortDirection): Observable> { const href$ = this.getBrowseDefinitions().pipe( getBrowseDefinitionLinks(definition), hasValueOperator(), @@ -177,6 +179,9 @@ export class BrowseService { } args.push('page=0'); args.push('size=1'); + if (sortDirection) { + args.push('sort=default,' + sortDirection); + } if (isNotEmpty(args)) { href = new URLCombiner(href, `?${args.join('&')}`).toString(); } From 24cc3fb76e11e936f9aac632093052e66190d21a Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Wed, 29 Mar 2023 12:53:59 -0700 Subject: [PATCH 461/833] reverted browse-by-metadata change --- .../browse-by-metadata-page.component.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index 60db6c3148..12264e9158 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -152,9 +152,7 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { this.browseId = params.id || this.defaultBrowseId; this.authority = params.authority; - if (typeof params.value === 'string'){ - this.value = params.value.trim(); - } + this.value = +params.value || params.value || ''; if (typeof params.startsWith === 'string'){ this.startsWith = params.startsWith.trim(); From 521b7d4db83a4de48f3f723cf48c3c491188d9d7 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 30 Mar 2023 11:06:38 -0700 Subject: [PATCH 462/833] updated value param check --- .../browse-by-metadata-page.component.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts index 12264e9158..3e8a6db816 100644 --- a/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts +++ b/src/app/browse-by/browse-by-metadata-page/browse-by-metadata-page.component.ts @@ -152,7 +152,11 @@ export class BrowseByMetadataPageComponent implements OnInit, OnDestroy { this.browseId = params.id || this.defaultBrowseId; this.authority = params.authority; - this.value = +params.value || params.value || ''; + if (typeof params.value === 'string'){ + this.value = params.value.trim(); + } else { + this.value = ''; + } if (typeof params.startsWith === 'string'){ this.startsWith = params.startsWith.trim(); From 24e6cdd3ecbc30b9941f28564f9613be56a37928 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Mon, 3 Apr 2023 14:13:06 +0200 Subject: [PATCH 463/833] 100553: Removed possibility to updated schema name, element and qualifier --- .../metadata-schema-form.component.spec.ts | 27 ++++----- .../metadata-schema-form.component.ts | 49 ++++++++-------- .../metadata-field-form.component.spec.ts | 22 ++++--- .../metadata-field-form.component.ts | 58 +++++++++---------- 4 files changed, 75 insertions(+), 81 deletions(-) diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts index 98e98a6646..b758767ddb 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.spec.ts @@ -1,5 +1,4 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; - import { MetadataSchemaFormComponent } from './metadata-schema-form.component'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { CommonModule } from '@angular/common'; @@ -30,7 +29,7 @@ describe('MetadataSchemaFormComponent', () => { return { patchValue: () => { }, - markAsUntouched(opts?: any) { + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, }; } @@ -38,7 +37,7 @@ describe('MetadataSchemaFormComponent', () => { /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ + return TestBed.configureTestingModule({ imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule], declarations: [MetadataSchemaFormComponent, EnumKeysPipe], providers: [ @@ -66,7 +65,7 @@ describe('MetadataSchemaFormComponent', () => { const expected = Object.assign(new MetadataSchema(), { namespace: namespace, prefix: prefix - }); + } as MetadataSchema); beforeEach(() => { spyOn(component.submitForm, 'emit'); @@ -81,11 +80,10 @@ describe('MetadataSchemaFormComponent', () => { fixture.detectChanges(); }); - it('should emit a new schema using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expected); - }); - })); + it('should emit a new schema using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expected); + }); }); describe('with an active schema', () => { @@ -93,7 +91,7 @@ describe('MetadataSchemaFormComponent', () => { id: 1, namespace: namespace, prefix: prefix - }); + } as MetadataSchema); beforeEach(() => { spyOn(registryService, 'getActiveMetadataSchema').and.returnValue(observableOf(expectedWithId)); @@ -101,11 +99,10 @@ describe('MetadataSchemaFormComponent', () => { fixture.detectChanges(); }); - it('should edit the existing schema using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); - }); - })); + it('should edit the existing schema using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); + }); }); }); }); diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index adb649696c..b7c16bc83f 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -87,9 +87,12 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'name', validators: { required: null, - pattern: '^[^ ,_]{1,32}$' + pattern: '^[^. ,_]{1,32}$', }, required: true, + errorMessages: { + pattern: 'error.validation.metadata.namespace.invalid-pattern', + }, }); this.namespace = new DynamicInputModel({ id: 'namespace', @@ -97,12 +100,8 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { name: 'namespace', validators: { required: null, - pattern: '^[^.]*$', }, required: true, - errorMessages: { - pattern: 'error.validation.metadata.namespace.invalid-pattern', - }, }); this.formModel = [ new DynamicFormGroupModel( @@ -112,13 +111,18 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { }) ]; this.formGroup = this.formBuilderService.createFormGroup(this.formModel); - this.registryService.getActiveMetadataSchema().subscribe((schema) => { - this.formGroup.patchValue({ - metadatadataschemagroup:{ - name: schema != null ? schema.prefix : '', - namespace: schema != null ? schema.namespace : '' - } - }); + this.registryService.getActiveMetadataSchema().subscribe((schema: MetadataSchema) => { + if (schema == null) { + this.clearFields(); + } else { + this.formGroup.patchValue({ + metadatadataschemagroup: { + name: schema.prefix, + namespace: schema.namespace, + }, + }); + this.name.disabled = true; + } }); }); } @@ -136,10 +140,10 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { * When the schema has no id attached -> Create new schema * Emit the updated/created schema using the EventEmitter submitForm */ - onSubmit() { + onSubmit(): void { this.registryService.clearMetadataSchemaRequests().subscribe(); this.registryService.getActiveMetadataSchema().pipe(take(1)).subscribe( - (schema) => { + (schema: MetadataSchema) => { const values = { prefix: this.name.value, namespace: this.namespace.value @@ -151,9 +155,9 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { } else { this.registryService.createOrUpdateMetadataSchema(Object.assign(new MetadataSchema(), schema, { id: schema.id, - prefix: (values.prefix ? values.prefix : schema.prefix), - namespace: (values.namespace ? values.namespace : schema.namespace) - })).subscribe((updatedSchema) => { + prefix: schema.prefix, + namespace: values.namespace, + })).subscribe((updatedSchema: MetadataSchema) => { this.submitForm.emit(updatedSchema); }); } @@ -166,14 +170,9 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { /** * Reset all input-fields to be empty */ - clearFields() { - this.formGroup.markAsUntouched(); - this.formGroup.patchValue({ - metadatadataschemagroup:{ - name: '', - namespace: '' - } - }); + clearFields(): void { + this.formGroup.reset('metadatadataschemagroup'); + this.name.disabled = false; } /** diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts index fcd8dd395d..ad7b54945d 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.spec.ts @@ -40,7 +40,7 @@ describe('MetadataFieldFormComponent', () => { return { patchValue: () => { }, - markAsUntouched(opts?: any) { + reset(_value?: any, _options?: { onlySelf?: boolean; emitEvent?: boolean; }): void { }, }; } @@ -48,7 +48,7 @@ describe('MetadataFieldFormComponent', () => { /* eslint-enable no-empty, @typescript-eslint/no-empty-function */ beforeEach(waitForAsync(() => { - TestBed.configureTestingModule({ + return TestBed.configureTestingModule({ imports: [CommonModule, RouterTestingModule.withRoutes([]), TranslateModule.forRoot(), NgbModule], declarations: [MetadataFieldFormComponent, EnumKeysPipe], providers: [ @@ -100,11 +100,10 @@ describe('MetadataFieldFormComponent', () => { fixture.detectChanges(); }); - it('should emit a new field using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expected); - }); - })); + it('should emit a new field using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expected); + }); }); describe('with an active field', () => { @@ -122,11 +121,10 @@ describe('MetadataFieldFormComponent', () => { fixture.detectChanges(); }); - it('should edit the existing field using the correct values', waitForAsync(() => { - fixture.whenStable().then(() => { - expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); - }); - })); + it('should edit the existing field using the correct values', async () => { + await fixture.whenStable(); + expect(component.submitForm.emit).toHaveBeenCalledWith(expectedWithId); + }); }); }); }); diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 14013f3cb7..55950a8773 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -142,14 +142,20 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { }) ]; this.formGroup = this.formBuilderService.createFormGroup(this.formModel); - this.registryService.getActiveMetadataField().subscribe((field) => { - this.formGroup.patchValue({ - metadatadatafieldgroup: { - element: field != null ? field.element : '', - qualifier: field != null ? field.qualifier : '', - scopeNote: field != null ? field.scopeNote : '' - } - }); + this.registryService.getActiveMetadataField().subscribe((field: MetadataField): void => { + if (field == null) { + this.clearFields(); + } else { + this.formGroup.patchValue({ + metadatadatafieldgroup: { + element: field.element, + qualifier: field.qualifier, + scopeNote: field.scopeNote, + }, + }); + this.element.disabled = true; + this.qualifier.disabled = true; + } }); }); } @@ -167,25 +173,24 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { * When the field has no id attached -> Create new field * Emit the updated/created field using the EventEmitter submitForm */ - onSubmit() { + onSubmit(): void { this.registryService.getActiveMetadataField().pipe(take(1)).subscribe( - (field) => { - const values = { - element: this.element.value, - qualifier: this.qualifier.value, - scopeNote: this.scopeNote.value - }; + (field: MetadataField) => { if (field == null) { - this.registryService.createMetadataField(Object.assign(new MetadataField(), values), this.metadataSchema).subscribe((newField) => { + this.registryService.createMetadataField(Object.assign(new MetadataField(), { + element: this.element.value, + qualifier: this.qualifier.value, + scopeNote: this.scopeNote.value, + }), this.metadataSchema).subscribe((newField: MetadataField) => { this.submitForm.emit(newField); }); } else { this.registryService.updateMetadataField(Object.assign(new MetadataField(), field, { id: field.id, - element: (values.element ? values.element : field.element), - qualifier: (values.qualifier ? values.qualifier : field.qualifier), - scopeNote: (values.scopeNote ? values.scopeNote : field.scopeNote) - })).subscribe((updatedField) => { + element: field.element, + qualifier: field.qualifier, + scopeNote: this.scopeNote.value, + })).subscribe((updatedField: MetadataField) => { this.submitForm.emit(updatedField); }); } @@ -198,15 +203,10 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { /** * Reset all input-fields to be empty */ - clearFields() { - this.formGroup.markAsUntouched(); - this.formGroup.patchValue({ - metadatadatafieldgroup: { - element: '', - qualifier: '', - scopeNote: '' - } - }); + clearFields(): void { + this.formGroup.reset('metadatadatafieldgroup'); + this.element.disabled = false; + this.qualifier.disabled = false; } /** From 3590582832a405d3e316330f28af7d488e42c9d0 Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Mon, 3 Apr 2023 17:48:30 +0200 Subject: [PATCH 464/833] 100302: Change error check to hasFailed --- src/app/core/data/base/base-data.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/core/data/base/base-data.service.ts b/src/app/core/data/base/base-data.service.ts index 7363894502..544c01a69b 100644 --- a/src/app/core/data/base/base-data.service.ts +++ b/src/app/core/data/base/base-data.service.ts @@ -365,7 +365,7 @@ export class BaseDataService implements HALDataServic if (hasCachedResponse) { return this.rdbService.buildSingle(href$).pipe( getFirstCompletedRemoteData(), - map((rd => rd.isError || rd.isErrorStale)) + map((rd => rd.hasFailed)) ); } return observableOf(false); From a3034dd5f8030e6f5ba50b14615d2dea88126ed0 Mon Sep 17 00:00:00 2001 From: nwoodward Date: Tue, 4 Apr 2023 12:02:20 -0500 Subject: [PATCH 465/833] remove external Google font --- src/main.browser.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main.browser.ts b/src/main.browser.ts index 68debfb355..9b1b293025 100644 --- a/src/main.browser.ts +++ b/src/main.browser.ts @@ -24,14 +24,6 @@ const bootstrap = () => platformBrowserDynamic() const hasTransferState = document.querySelector('script#dspace-angular-state') !== null; const main = () => { - // Load fonts async - // https://github.com/typekit/webfontloader#configuration - loadWebFont({ - google: { - families: ['Droid Sans'] - } - }); - if (environment.production) { enableProdMode(); } From dc6fa35483202241b309fb01fe68373b9ff1f558 Mon Sep 17 00:00:00 2001 From: nwoodward Date: Tue, 4 Apr 2023 12:04:32 -0500 Subject: [PATCH 466/833] remove unused import --- src/main.browser.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.browser.ts b/src/main.browser.ts index 9b1b293025..43b2ffbaf4 100644 --- a/src/main.browser.ts +++ b/src/main.browser.ts @@ -3,7 +3,6 @@ import 'reflect-metadata'; import 'core-js/es/reflect'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; -import { load as loadWebFont } from 'webfontloader'; import { BrowserAppModule } from './modules/app/browser-app.module'; From fb45f5f80753a70820997b5184eca0ffb4973cc2 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 4 Apr 2023 14:07:22 -0500 Subject: [PATCH 467/833] Remove flakey check for success alert box. Unnecessary for this test, and sometimes randomly fails (if alert box closes before it can be clicked closed) --- cypress/e2e/submission.cy.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/cypress/e2e/submission.cy.ts b/cypress/e2e/submission.cy.ts index 8262bc841e..ed10b2d13a 100644 --- a/cypress/e2e/submission.cy.ts +++ b/cypress/e2e/submission.cy.ts @@ -122,8 +122,6 @@ describe('New Submission page', () => { // Wait for upload to complete before proceeding cy.wait('@upload'); - // Close the upload success notice - cy.get('[data-dismiss="alert"]').click({multiple: true}); // Wait for deposit button to not be disabled & click it. cy.get('button#deposit').should('not.be.disabled').click(); From ff5ccf30eebbc21b1e319a9dfc53b08eec509cd0 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 4 Apr 2023 14:08:34 -0500 Subject: [PATCH 468/833] Minor update to latest Cypress --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index b994672548..aceda4090b 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", - "cypress": "^12.0.1", + "cypress": "12.9.0", "cypress-axe": "^1.1.0", "deep-freeze": "0.0.1", "eslint": "^8.2.0", diff --git a/yarn.lock b/yarn.lock index e67322f016..abb5e4c4d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4270,10 +4270,10 @@ cypress-axe@^1.1.0: resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.4.0.tgz#e67482bfe9e740796bf77c7823f19781a8a2faff" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -cypress@^12.0.1: - version "12.7.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.7.0.tgz#69900f82af76cf3ba0ddb9b59ec3b0d38222ab22" - integrity sha512-7rq+nmhzz0u6yabCFyPtADU2OOrYt6pvUau9qV7xyifJ/hnsaw/vkr0tnLlcuuQKUAOC1v1M1e4Z0zG7S0IAvA== +cypress@12.9.0: + version "12.9.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.9.0.tgz#e6ab43cf329fd7c821ef7645517649d72ccf0a12" + integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" From 44699186406c10aebfa40b49772a0d62a204abaa Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Tue, 4 Apr 2023 22:05:09 +0200 Subject: [PATCH 469/833] Show ThumbnailComponent as fallback instead of a MediaViewerImageComponent placeholder when only one of the mediaviewers options is enabled --- src/app/item-page/media-viewer/media-viewer.component.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/item-page/media-viewer/media-viewer.component.html b/src/app/item-page/media-viewer/media-viewer.component.html index 3d2a863f61..b9b7ba1932 100644 --- a/src/app/item-page/media-viewer/media-viewer.component.html +++ b/src/app/item-page/media-viewer/media-viewer.component.html @@ -16,9 +16,12 @@
    - + + From b829335ba5fdbcfbbdd684e1127ef4c557126dd3 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 5 Apr 2023 17:49:29 +0200 Subject: [PATCH 470/833] 100414: Missing search_result statistics fix --- .../search-page/search-tracker.component.ts | 143 ++++++++++++++---- .../statistics/angulartics/dspace-provider.ts | 3 +- src/app/statistics/statistics.service.ts | 7 +- 3 files changed, 120 insertions(+), 33 deletions(-) diff --git a/src/app/search-page/search-tracker.component.ts b/src/app/search-page/search-tracker.component.ts index e7f59a2f23..eb7ac6fcc3 100644 --- a/src/app/search-page/search-tracker.component.ts +++ b/src/app/search-page/search-tracker.component.ts @@ -1,6 +1,6 @@ -import { Component, Inject, OnInit } from '@angular/core'; +import { Component, Inject, OnDestroy, OnInit } from '@angular/core'; import { Angulartics2 } from 'angulartics2'; -import { map, switchMap } from 'rxjs/operators'; +import { filter, map, switchMap, take } from 'rxjs/operators'; import { SearchComponent } from './search.component'; import { SidebarService } from '../shared/sidebar/sidebar.service'; import { HostWindowService } from '../shared/host-window.service'; @@ -10,10 +10,17 @@ import { SearchConfigurationService } from '../core/shared/search/search-configu import { SearchService } from '../core/shared/search/search.service'; import { PaginatedSearchOptions } from '../shared/search/paginated-search-options.model'; import { SearchObjects } from '../shared/search/search-objects.model'; -import { Router } from '@angular/router'; +import { NavigationStart, Router } from '@angular/router'; import { RemoteData } from '../core/data/remote-data'; import { DSpaceObject } from '../core/shared/dspace-object.model'; import { getFirstSucceededRemoteData } from '../core/shared/operators'; +import { inspect } from 'util'; +import { hasValue, hasValueOperator, isNotEmpty } from '../shared/empty.util'; +import { Subscription } from 'rxjs/internal/Subscription'; +import { Observable } from 'rxjs/internal/Observable'; +import { ITEM_MODULE_PATH } from '../item-page/item-page-routing-paths'; +import { COLLECTION_MODULE_PATH } from '../collection-page/collection-page-routing-paths'; +import { COMMUNITY_MODULE_PATH } from '../community-page/community-page-routing-paths'; /** * This component triggers a page view statistic @@ -29,7 +36,17 @@ import { getFirstSucceededRemoteData } from '../core/shared/operators'; } ] }) -export class SearchTrackerComponent extends SearchComponent implements OnInit { +export class SearchTrackerComponent extends SearchComponent implements OnInit, OnDestroy { + /** + * Regex to match UUIDs + */ + uuidRegex = /\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g; + + /** + * Array to track all subscriptions and unsubscribe them onDestroy + * @type {Array} + */ + subs: Subscription[] = []; constructor( protected service: SearchService, @@ -44,8 +61,33 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit { } ngOnInit(): void { - // super.ngOnInit(); - this.getSearchOptions().pipe( + this.subs.push( + this.getSearchOptionsAndObjects().subscribe((options) => { + this.trackEvent(this.transformOptionsToEventProperties(options)); + }), + this.router.events.pipe( + filter((event) => event instanceof NavigationStart), + map((event: NavigationStart) => this.getDsoUUIDFromUrl(event.url)), + hasValueOperator(), + switchMap((uuid) => + this.getSearchOptionsAndObjects().pipe( + take(1), + map((options) => this.transformOptionsToEventProperties(Object.assign({}, options, { + object: uuid, + }))) + ) + ), + ).subscribe((options) => { + this.trackEvent(options); + }), + ); + } + + /** + * Get a combination of the currently applied search options and search query response + */ + getSearchOptionsAndObjects(): Observable<{ config: PaginatedSearchOptions, searchQueryResponse: SearchObjects }> { + return this.getSearchOptions().pipe( switchMap((options: PaginatedSearchOptions) => this.service.searchEntries(options).pipe( getFirstSucceededRemoteData(), @@ -53,31 +95,70 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit { config: options, searchQueryResponse: rd.payload })) - )), - ).subscribe(({ config, searchQueryResponse }) => { - const filters: { filter: string, operator: string, value: string, label: string; }[] = []; - const appliedFilters = searchQueryResponse.appliedFilters || []; - for (let i = 0, filtersLength = appliedFilters.length; i < filtersLength; i++) { - const appliedFilter = appliedFilters[i]; - filters.push(appliedFilter); + ) + ), + ); + } + + /** + * Transform the given options containing search-options, query-response and optional object UUID into properties + * that can be sent to Angularitics for triggering a search event + * @param options + */ + transformOptionsToEventProperties(options: { config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, object?: string }): any { + const filters: { filter: string, operator: string, value: string, label: string; }[] = []; + const appliedFilters = options.searchQueryResponse.appliedFilters || []; + for (let i = 0, filtersLength = appliedFilters.length; i < filtersLength; i++) { + const appliedFilter = appliedFilters[i]; + filters.push(appliedFilter); + } + return { + action: 'search', + properties: { + searchOptions: options.config, + page: { + size: options.config.pagination.size, // same as searchQueryResponse.page.elementsPerPage + totalElements: options.searchQueryResponse.pageInfo.totalElements, + totalPages: options.searchQueryResponse.pageInfo.totalPages, + number: options.config.pagination.currentPage, // same as searchQueryResponse.page.currentPage + }, + sort: { + by: options.config.sort.field, + order: options.config.sort.direction + }, + filters: filters, + object: options.object, + }, + }; + } + + /** + * Track an event with given properties + * @param properties + */ + trackEvent(properties: any) { + this.angulartics2.eventTrack.next(properties); + } + + /** + * Get the UUID from a DSO url + * Return null if the url isn't a community, collection or item page or the UUID couldn't be found + * @param url + */ + getDsoUUIDFromUrl(url: string): string { + if (isNotEmpty(url)) { + if (url.startsWith(`/${ITEM_MODULE_PATH}`) || url.startsWith(`/${COLLECTION_MODULE_PATH}`) || url.startsWith(`/${COMMUNITY_MODULE_PATH}`)) { + const uuid = url.substring(url.lastIndexOf('/') + 1); + if (uuid.match(this.uuidRegex)) { + return uuid; } - this.angulartics2.eventTrack.next({ - action: 'search', - properties: { - searchOptions: config, - page: { - size: config.pagination.size, // same as searchQueryResponse.page.elementsPerPage - totalElements: searchQueryResponse.pageInfo.totalElements, - totalPages: searchQueryResponse.pageInfo.totalPages, - number: config.pagination.currentPage, // same as searchQueryResponse.page.currentPage - }, - sort: { - by: config.sort.field, - order: config.sort.direction - }, - filters: filters, - }, - }); - }); + } + } + return null; + } + + ngOnDestroy() { + super.ngOnDestroy(); + this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); } } diff --git a/src/app/statistics/angulartics/dspace-provider.ts b/src/app/statistics/angulartics/dspace-provider.ts index cd1aab94bd..30a56ad505 100644 --- a/src/app/statistics/angulartics/dspace-provider.ts +++ b/src/app/statistics/angulartics/dspace-provider.ts @@ -31,7 +31,8 @@ export class Angulartics2DSpace { event.properties.searchOptions, event.properties.page, event.properties.sort, - event.properties.filters + event.properties.filters, + event.properties.object, ); } } diff --git a/src/app/statistics/statistics.service.ts b/src/app/statistics/statistics.service.ts index 9e12e627b5..b9d078ad22 100644 --- a/src/app/statistics/statistics.service.ts +++ b/src/app/statistics/statistics.service.ts @@ -45,12 +45,14 @@ export class StatisticsService { * @param page: An object that describes the pagination status * @param sort: An object that describes the sort status * @param filters: An array of search filters used to filter the result set + * @param object: Object clicked */ trackSearchEvent( searchOptions: SearchOptions, page: { size: number, totalElements: number, totalPages: number, number: number }, sort: { by: string, order: string }, - filters?: { filter: string, operator: string, value: string, label: string }[] + filters?: { filter: string, operator: string, value: string, label: string }[], + object?: string, ) { const body = { query: searchOptions.query, @@ -87,6 +89,9 @@ export class StatisticsService { } Object.assign(body, { appliedFilters: bodyFilters }); } + if (hasValue(object)) { + Object.assign(body, { object }); + } this.sendEvent('/statistics/searchevents', body); } From 05d73abbe214c2b05e44907c21d9e1f536175ef7 Mon Sep 17 00:00:00 2001 From: Leonardo Guerrero Date: Wed, 5 Apr 2023 11:35:23 -0500 Subject: [PATCH 471/833] Update es.json5 --- src/assets/i18n/es.json5 | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index 303fc7fc61..2a85ffc155 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -752,8 +752,8 @@ // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "Para agregar o remover una persona en este grupo, pulse el botón ‘Examinar todo’ o utilice la barra de búsqueda de abajo para buscar los usuario (Use el desplegable que se encuentra a la derecha de la barra de búsqueda para seleccionar entre buscar por metadato o por correo electrónico). Posteriormente pulse el botón con el icono más por cada usuario que desea agregar a la lista, o el icono de papelera por cada usuario que desea remover. La lista puede contener varias páginas: utilice los controles de paginación debajo de la lista, para navegar a las siguientes páginas. Cuando haya finalizado, guarde sus cambios pulsando el botón ‘Guardar’ ubicado en la parte superior de la sección.", - // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for subgroups. Then click the plus icon for each subgroup you wish to add in the list below, or the trash can icon for each subgroup you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", - "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Para agregar o remover un sub-grupo en este grupo, pulse el botón ‘Examinar todo’ o utilice la barra de búsqueda de abajo para buscar los subgrupos- Posteriormente pulse el botón con el icono más por cada sub-grupo que desea agregar a la lista, o el icono de papelera por cada sub-grupo que desea remover. La lista puede contener varias páginas: utilice los controles de paginación debajo de la lista, para navegar a las siguientes páginas. Cuando haya finalizado, guarde sus cambios pulsando el botón ‘Guardar’ ubicado en la parte superior de la sección.", + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "Para agregar o remover un sub-grupo en este grupo, pulse el botón 'Examinar todo' o utilice la barra de búsqueda de abajo para buscar los subgrupos- Posteriormente pulse el botón con el icono más por cada sub-grupo que desea agregar a la lista, o el icono de papelera por cada sub-grupo que desea remover. La lista puede contener varias páginas: utilice los controles de paginación debajo de la lista, para navegar a las siguientes páginas. Cuando haya finalizado, guarde sus cambios pulsando el botón ‘Guardar’ ubicado en la parte superior de la sección.", // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Búsqueda administrativa", @@ -1891,12 +1891,10 @@ // "comcol-role.edit.scorereviewers.name": "Score Reviewers", - // TODO New key - Add a translation - "comcol-role.edit.scorereviewers.name": "Score Reviewers", + "comcol-role.edit.scorereviewers.name": "Revisores de puntuación", // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", - // TODO New key - Add a translation - "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + "comcol-role.edit.scorereviewers.description": "Los revisores pueden dar una puntuación a un envío entrante, esto definirá si el envío será rechazado o no.", // "community.form.abstract": "Short Description", "community.form.abstract": "Breve descripción", @@ -2588,6 +2586,9 @@ // "form.submit": "Save", "form.submit": "Guardar", + // "form.create": "Create", + "form.create": "Crear", + // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Suelte el ítem en la nueva posición", @@ -3953,8 +3954,8 @@ // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", "itemtemplate.edit.metadata.notifications.discarded.content": "Sus cambios fueron descartados. Para recuperar sus cambios pulse el botón 'Deshacer'", - // "itemtemplate.edit.metadata.notifications.discarded.title": "Changed discarded", - "itemtemplate.edit.metadata.notifications.discarded.title": "Cambio descartado", + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", + "itemtemplate.edit.metadata.notifications.discarded.title": "Cambios descartados", // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", "itemtemplate.edit.metadata.notifications.error.title": "Ocurrió un error", @@ -3968,8 +3969,8 @@ // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", "itemtemplate.edit.metadata.notifications.outdated.content": "La plantilla de ítem en la que usted esta trabajando actualmente ha sido cambiada por otro usuario. Sus cambios han sido descartados para evitar conflictos", - // "itemtemplate.edit.metadata.notifications.outdated.title": "Changed outdated", - "itemtemplate.edit.metadata.notifications.outdated.title": "Cambiado obsoleto", + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", + "itemtemplate.edit.metadata.notifications.outdated.title": "Cambios obsoletos", // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", "itemtemplate.edit.metadata.notifications.saved.content": "Sus cambios a los metadatos de esta plantilla de ítem han sido guardados.", @@ -5211,7 +5212,6 @@ // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", "register-page.registration.google-recaptcha.must-accept-cookies": "Para registrarse debe aceptar las cookies de Registro y recuperación de contraseña (Google reCaptcha).", - // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", "register-page.registration.error.maildomain": "Este correo electrónico no esta en la lista de dominios que pueden registrarse. Los dominios permitidos son {{ domains }}", @@ -5226,7 +5226,6 @@ // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", "register-page.registration.google-recaptcha.notification.message.expired": "Verificación caducada. Verifique de nuevo.", - // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", "register-page.registration.info.maildomain": "Las cuentas pueden registrarse para las direcciones de correo de los dominios", @@ -5943,6 +5942,8 @@ // "statistics.table.header.views": "Views", "statistics.table.header.views": "Visitas", + // "statistics.table.no-name": "(object name could not be loaded)", + "statistics.table.no-name": "(el nombre del objeto no pudo ser cargado)", // "submission.edit.breadcrumbs": "Edit Submission", @@ -6936,8 +6937,8 @@ // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Eliminar", - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", - "submission.workflow.generic.delete-help": "Si desea descartar este ítem, seleccione \"Eliminar\". Luego se le pedirá que lo confirme.", + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Seleccione esta opción para descartar este ítem. A contunuación se le pedirá confirmación.", // "submission.workflow.generic.edit": "Edit", "submission.workflow.generic.edit": "Editar", @@ -7089,7 +7090,7 @@ // "subscriptions.modal.new-subscription-form.type.content": "Content", "subscriptions.modal.new-subscription-form.type.content": "Contenido", - // "subscriptions.modal.new-subscription-form.frequency.D": "Diario", + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", "subscriptions.modal.new-subscription-form.frequency.D": "Diario", // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", @@ -7345,8 +7346,8 @@ "workflow-item.selectrevieweraction.button.confirm": "Confirmar", - // "workflow-item.scorereviewaction.notification.success.title": "Revisar evaluación", - "workflow-item.scorereviewaction.notification.success.title": "Revisar evaluación", + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + "workflow-item.scorereviewaction.notification.success.title": "Revisión de evaluación", // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", "workflow-item.scorereviewaction.notification.success.content": "La evaluación para este ítem ha sido enviada exitosamente", From 7410141d3fdb54e9f6d0bbe9ddeef642139b053f Mon Sep 17 00:00:00 2001 From: Mark Cooper Date: Wed, 22 Feb 2023 21:32:20 -0800 Subject: [PATCH 472/833] Build & publish dspace/dspace-angular imgs with -dist suffix --- .github/workflows/docker.yml | 30 ++++++++++++++++++++++++++++ Dockerfile.dist | 31 +++++++++++++++++++++++++++++ docker/README.md | 19 +++++++++++++++++- docker/docker-compose-dist.yml | 36 ++++++++++++++++++++++++++++++++++ docker/dspace-ui.json | 11 +++++++++++ 5 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 Dockerfile.dist create mode 100644 docker/docker-compose-dist.yml create mode 100644 docker/dspace-ui.json diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 908c5c34fd..9a2c838d83 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -88,3 +88,33 @@ jobs: # Use tags / labels provided by 'docker/metadata-action' above tags: ${{ steps.meta_build.outputs.tags }} labels: ${{ steps.meta_build.outputs.labels }} + + ##################################################### + # Build/Push the 'dspace/dspace-angular' image ('-dist' tag) + ##################################################### + # https://github.com/docker/metadata-action + # Get Metadata for docker_build_dist step below + - name: Sync metadata (tags, labels) from GitHub to Docker for 'dspace-angular-dist' image + id: meta_build_dist + uses: docker/metadata-action@v4 + with: + images: dspace/dspace-angular + tags: ${{ env.IMAGE_TAGS }} + # As this is a "dist" image, its tags are all suffixed with "-dist". Otherwise, it uses the same + # tagging logic as the primary 'dspace/dspace-angular' image above. + flavor: ${{ env.TAGS_FLAVOR }} + suffix=-dist + + - name: Build and push 'dspace-angular-dist' image + id: docker_build_dist + uses: docker/build-push-action@v3 + with: + context: . + file: ./Dockerfile.dist + platforms: ${{ env.PLATFORMS }} + # For pull requests, we run the Docker build (to ensure no PR changes break the build), + # but we ONLY do an image push to DockerHub if it's NOT a PR + push: ${{ github.event_name != 'pull_request' }} + # Use tags / labels provided by 'docker/metadata-action' above + tags: ${{ steps.meta_build_dist.outputs.tags }} + labels: ${{ steps.meta_build_dist.outputs.labels }} diff --git a/Dockerfile.dist b/Dockerfile.dist new file mode 100644 index 0000000000..2a6a66fc06 --- /dev/null +++ b/Dockerfile.dist @@ -0,0 +1,31 @@ +# This image will be published as dspace/dspace-angular:$DSPACE_VERSION-dist +# See https://github.com/DSpace/dspace-angular/tree/main/docker for usage details + +# Test build: +# docker build -f Dockerfile.dist -t dspace/dspace-angular:dspace-7_x-dist . + +FROM node:18-alpine as build + +# Ensure Python and other build tools are available +# These are needed to install some node modules, especially on linux/arm64 +RUN apk add --update python3 make g++ && rm -rf /var/cache/apk/* + +WORKDIR /app +COPY package.json yarn.lock ./ +RUN yarn install --network-timeout 300000 + +ADD . /app/ +RUN yarn build:prod + +FROM node:18-alpine +RUN npm install --global pm2 + +COPY --chown=node:node --from=build /app/dist /app/dist +COPY --chown=node:node config /app/config +COPY --chown=node:node docker/dspace-ui.json /app/dspace-ui.json + +WORKDIR /app +USER node +ENV NODE_ENV production +EXPOSE 4000 +CMD pm2-runtime start dspace-ui.json --json diff --git a/docker/README.md b/docker/README.md index 1a9fee0a81..f29071c5cf 100644 --- a/docker/README.md +++ b/docker/README.md @@ -6,7 +6,7 @@ If you wish to run DSpace on Docker in production, we recommend building your own Docker images. You are welcome to borrow ideas/concepts from the below images in doing so. But, the below images should not be used "as is" in any production scenario. *** -## 'Dockerfile' in root directory +## 'Dockerfile' in root directory This Dockerfile is used to build a *development* DSpace 7 Angular UI image, published as 'dspace/dspace-angular' ``` @@ -20,6 +20,15 @@ Admins to our DockerHub repo can manually publish with the following command. docker push dspace/dspace-angular:dspace-7_x ``` +The `Dockerfile.dist` is used to generate a *production* build and runtime environment. + +```bash +# build the latest image +docker build -f Dockerfile.dist -t dspace/dspace-angular:dspace-7_x-dist . +``` + +A default/demo version of this image is built *automatically*. + ## docker directory - docker-compose.yml - Starts DSpace Angular with Docker Compose from the current branch. This file assumes that a DSpace 7 REST instance will also be started in Docker. @@ -62,6 +71,14 @@ From DSpace/DSpace-angular docker-compose -p d7 -f docker/docker-compose.yml up -d ``` +## Run DSpace Angular dist build with DSpace Demo site backend + +``` +docker-compose -f docker/docker-compose-dist.yml pull +docker-compose -f docker/docker-compose-dist.yml build +docker-compose -p d7 -f docker/docker-compose-dist.yml up -d +``` + ## Ingest test data from AIPDIR Create an administrator diff --git a/docker/docker-compose-dist.yml b/docker/docker-compose-dist.yml new file mode 100644 index 0000000000..59b5fddab5 --- /dev/null +++ b/docker/docker-compose-dist.yml @@ -0,0 +1,36 @@ +# +# The contents of this file are subject to the license and copyright +# detailed in the LICENSE and NOTICE files at the root of the source +# tree and available online at +# +# http://www.dspace.org/license/ +# + +# Docker Compose for running the DSpace Angular UI dist build +# for previewing with the DSpace Demo site backend +version: '3.7' +networks: + dspacenet: +services: + dspace-angular: + container_name: dspace-angular + environment: + DSPACE_UI_SSL: 'false' + DSPACE_UI_HOST: dspace-angular + DSPACE_UI_PORT: '4000' + DSPACE_UI_NAMESPACE: / + DSPACE_REST_SSL: 'true' + DSPACE_REST_HOST: api7.dspace.org + DSPACE_REST_PORT: 443 + DSPACE_REST_NAMESPACE: /server + image: dspace/dspace-angular:dspace-7_x-dist + build: + context: .. + dockerfile: Dockerfile.dist + networks: + dspacenet: + ports: + - published: 4000 + target: 4000 + stdin_open: true + tty: true diff --git a/docker/dspace-ui.json b/docker/dspace-ui.json new file mode 100644 index 0000000000..0758679ab8 --- /dev/null +++ b/docker/dspace-ui.json @@ -0,0 +1,11 @@ +{ + "apps": [ + { + "name": "dspace-ui", + "cwd": "/app", + "script": "dist/server/main.js", + "instances": "max", + "exec_mode": "cluster" + } + ] +} \ No newline at end of file From d21ce380118240134d7b8838a27bde80cfb95107 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 11 Apr 2023 16:18:20 +0200 Subject: [PATCH 473/833] 101108: Automatic ng update @angular/core@14 --- package.json | 28 +- .../epeople-registry.component.ts | 4 +- .../eperson-form.component.spec.ts | 6 +- .../eperson-form/eperson-form.component.ts | 4 +- .../group-form/group-form.component.spec.ts | 6 +- .../group-form/group-form.component.ts | 4 +- .../members-list/members-list.component.ts | 4 +- .../subgroup-list/subgroups-list.component.ts | 4 +- .../groups-registry.component.ts | 4 +- .../metadata-schema-form.component.ts | 4 +- .../metadata-field-form.component.ts | 4 +- .../edit-bitstream-page.component.spec.ts | 6 +- .../edit-bitstream-page.component.ts | 4 +- .../collection-source.component.spec.ts | 6 +- .../collection-source.component.ts | 4 +- .../curation-form/curation-form.component.ts | 10 +- .../metadata-field-selector.component.ts | 4 +- .../forgot-password-form.component.spec.ts | 4 +- .../feedback-form.component.spec.ts | 4 +- .../feedback-form/feedback-form.component.ts | 4 +- ...bitstream-request-a-copy-page.component.ts | 14 +- .../orcid-sync-settings.component.spec.ts | 16 +- .../orcid-sync-settings.component.ts | 4 +- .../versions/item-versions.component.spec.ts | 4 +- .../versions/item-versions.component.ts | 4 +- .../profile-page-metadata-form.component.ts | 4 +- .../profile-page-security-form.component.ts | 8 +- .../register-email-form.component.spec.ts | 4 +- .../register-email-form.component.ts | 8 +- .../confirmed.validator.spec.ts | 8 +- .../create-profile/confirmed.validator.ts | 4 +- .../create-profile.component.spec.ts | 4 +- .../create-profile.component.ts | 14 +- .../search-navbar/search-navbar.component.ts | 4 +- .../collection-dropdown.component.ts | 4 +- .../comcol-form/comcol-form.component.spec.ts | 6 +- .../comcol-form/comcol-form.component.ts | 4 +- .../dso-selector/dso-selector.component.ts | 4 +- .../eperson-search-box.component.spec.ts | 8 +- .../eperson-search-box.component.ts | 4 +- .../group-search-box.component.spec.ts | 8 +- .../group-search-box.component.ts | 4 +- ...c-form-control-container.component.spec.ts | 8 +- ...ynamic-form-control-container.component.ts | 8 +- .../ds-dynamic-form.component.ts | 4 +- ...dynamic-type-bind-relation.service.spec.ts | 8 +- .../ds-dynamic-type-bind-relation.service.ts | 4 +- ...xisting-metadata-list-element.component.ts | 4 +- .../dynamic-form-array.component.ts | 4 +- .../custom-switch.component.spec.ts | 6 +- .../custom-switch/custom-switch.component.ts | 4 +- ...namic-date-picker-inline.component.spec.ts | 8 +- .../dynamic-date-picker-inline.component.ts | 4 +- .../date-picker/date-picker.component.spec.ts | 6 +- .../date-picker/date-picker.component.ts | 4 +- .../dynamic-disabled.component.spec.ts | 6 +- .../disabled/dynamic-disabled.component.ts | 4 +- .../models/dynamic-vocabulary.component.ts | 4 +- .../dynamic-form-group.component.ts | 4 +- .../list/dynamic-list.component.spec.ts | 32 +- .../models/list/dynamic-list.component.ts | 6 +- .../lookup/dynamic-lookup.component.spec.ts | 16 +- .../models/lookup/dynamic-lookup.component.ts | 4 +- .../onebox/dynamic-onebox.component.spec.ts | 8 +- .../models/onebox/dynamic-onebox.component.ts | 4 +- .../dynamic-relation-group.component.spec.ts | 16 +- .../dynamic-relation-group.components.ts | 4 +- ...amic-scrollable-dropdown.component.spec.ts | 8 +- .../dynamic-scrollable-dropdown.component.ts | 4 +- .../models/tag/dynamic-tag.component.spec.ts | 8 +- .../models/tag/dynamic-tag.component.ts | 4 +- .../form/builder/form-builder.service.spec.ts | 64 +- .../form/builder/form-builder.service.ts | 12 +- src/app/shared/form/form.component.ts | 26 +- src/app/shared/form/form.service.spec.ts | 22 +- src/app/shared/form/form.service.ts | 20 +- .../number-picker/number-picker.component.ts | 4 +- .../validation-suggestions.component.ts | 8 +- .../log-in-password.component.spec.ts | 4 +- .../password/log-in-password.component.ts | 6 +- .../shared/mocks/form-builder-service.mock.ts | 6 +- ...imed-task-actions-reject.component.spec.ts | 10 +- .../claimed-task-actions-reject.component.ts | 6 +- .../starts-with-abstract.component.ts | 8 +- .../subscription-modal.component.spec.ts | 26 +- .../subscription-modal.component.ts | 28 +- src/app/shared/testing/form-event.stub.ts | 10 +- .../utils/in-list-validator.directive.ts | 4 +- .../shared/utils/require-file.validator.ts | 6 +- .../accesses/section-accesses.component.ts | 6 +- .../section-upload-file-edit.component.ts | 8 +- .../system-wide-alert-form.component.ts | 10 +- ...vanced-workflow-action-rating.component.ts | 10 +- .../reviewers-list.component.ts | 4 +- yarn.lock | 6771 +++++++++-------- 95 files changed, 3842 insertions(+), 3701 deletions(-) diff --git a/package.json b/package.json index aceda4090b..4360d49bf3 100644 --- a/package.json +++ b/package.json @@ -55,17 +55,17 @@ "ts-node": "10.2.1" }, "dependencies": { - "@angular/animations": "~13.3.12", + "@angular/animations": "~14.3.0", "@angular/cdk": "^13.2.6", - "@angular/common": "~13.3.12", - "@angular/compiler": "~13.3.12", - "@angular/core": "~13.3.12", - "@angular/forms": "~13.3.12", - "@angular/localize": "13.3.12", - "@angular/platform-browser": "~13.3.12", - "@angular/platform-browser-dynamic": "~13.3.12", - "@angular/platform-server": "~13.3.12", - "@angular/router": "~13.3.12", + "@angular/common": "~14.3.0", + "@angular/compiler": "~14.3.0", + "@angular/core": "~14.3.0", + "@angular/forms": "~14.3.0", + "@angular/localize": "14.3.0", + "@angular/platform-browser": "~14.3.0", + "@angular/platform-browser-dynamic": "~14.3.0", + "@angular/platform-server": "~14.3.0", + "@angular/router": "~14.3.0", "@babel/runtime": "7.17.2", "@kolkov/ngx-gallery": "^2.0.1", "@material-ui/core": "^4.11.0", @@ -142,8 +142,8 @@ "@angular-eslint/schematics": "13.1.0", "@angular-eslint/template-parser": "13.1.0", "@angular/cli": "~13.3.10", - "@angular/compiler-cli": "~13.3.12", - "@angular/language-service": "~13.3.12", + "@angular/compiler-cli": "~14.3.0", + "@angular/language-service": "~14.3.0", "@cypress/schematic": "^1.5.0", "@fortawesome/fontawesome-free": "^6.2.1", "@ngrx/store-devtools": "^13.0.2", @@ -197,10 +197,10 @@ "sass-loader": "^12.6.0", "sass-resources-loader": "^2.1.1", "ts-node": "^8.10.2", - "typescript": "~4.5.5", + "typescript": "~4.8.4", "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.4.0", "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.5.0" } -} +} \ No newline at end of file diff --git a/src/app/access-control/epeople-registry/epeople-registry.component.ts b/src/app/access-control/epeople-registry/epeople-registry.component.ts index 55233d8173..eeeb10c7b3 100644 --- a/src/app/access-control/epeople-registry/epeople-registry.component.ts +++ b/src/app/access-control/epeople-registry/epeople-registry.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; @@ -89,7 +89,7 @@ export class EPeopleRegistryComponent implements OnInit, OnDestroy { private translateService: TranslateService, private notificationsService: NotificationsService, private authorizationService: AuthorizationDataService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private router: Router, private modalService: NgbModal, private paginationService: PaginationService, diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts index bf03e1defb..fb911e709c 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.spec.ts @@ -2,7 +2,7 @@ import { Observable, of as observableOf } from 'rxjs'; import { CommonModule } from '@angular/common'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; import { BrowserModule, By } from '@angular/platform-browser'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; @@ -116,9 +116,9 @@ describe('EPersonFormComponent', () => { const controlModel = model; const controlState = { value: controlModel.value, disabled: controlModel.disabled }; const controlOptions = this.createAbstractControlOptions(controlModel.validators, controlModel.asyncValidators, controlModel.updateOn); - controls[model.id] = new FormControl(controlState, controlOptions); + controls[model.id] = new UntypedFormControl(controlState, controlOptions); }); - return new FormGroup(controls, options); + return new UntypedFormGroup(controls, options); }, createAbstractControlOptions(validatorsConfig = null, asyncValidatorsConfig = null, updateOn = null) { return { diff --git a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts index 5a7ab735ca..8dbc9e92a4 100644 --- a/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts +++ b/src/app/access-control/epeople-registry/eperson-form/eperson-form.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicCheckboxModel, DynamicFormControlModel, @@ -108,7 +108,7 @@ export class EPersonFormComponent implements OnInit, OnDestroy { /** * A FormGroup that combines all inputs */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * An EventEmitter that's fired whenever the form is being submitted diff --git a/src/app/access-control/group-registry/group-form/group-form.component.spec.ts b/src/app/access-control/group-registry/group-form/group-form.component.spec.ts index a7a7cb5be4..d845550b55 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.spec.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.spec.ts @@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common'; import { HttpClient } from '@angular/common/http'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; import { BrowserModule, By } from '@angular/platform-browser'; import { ActivatedRoute, Router } from '@angular/router'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; @@ -130,9 +130,9 @@ describe('GroupFormComponent', () => { const controlModel = model; const controlState = { value: controlModel.value, disabled: controlModel.disabled }; const controlOptions = this.createAbstractControlOptions(controlModel.validators, controlModel.asyncValidators, controlModel.updateOn); - controls[model.id] = new FormControl(controlState, controlOptions); + controls[model.id] = new UntypedFormControl(controlState, controlOptions); }); - return new FormGroup(controls, options); + return new UntypedFormGroup(controls, options); }, createAbstractControlOptions(validatorsConfig = null, asyncValidatorsConfig = null, updateOn = null) { return { diff --git a/src/app/access-control/group-registry/group-form/group-form.component.ts b/src/app/access-control/group-registry/group-form/group-form.component.ts index 4302d126ea..72e34c1838 100644 --- a/src/app/access-control/group-registry/group-form/group-form.component.ts +++ b/src/app/access-control/group-registry/group-form/group-form.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, HostListener, OnDestroy, OnInit, Output, ChangeDetectorRef } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { @@ -95,7 +95,7 @@ export class GroupFormComponent implements OnInit, OnDestroy { /** * A FormGroup that combines all inputs */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * An EventEmitter that's fired whenever the form is being submitted diff --git a/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts b/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts index d0fc046093..56ab2f1540 100644 --- a/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts +++ b/src/app/access-control/group-registry/group-form/members-list/members-list.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { @@ -141,7 +141,7 @@ export class MembersListComponent implements OnInit, OnDestroy { public ePersonDataService: EPersonDataService, protected translateService: TranslateService, protected notificationsService: NotificationsService, - protected formBuilder: FormBuilder, + protected formBuilder: UntypedFormBuilder, protected paginationService: PaginationService, private router: Router ) { diff --git a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts index 5f1700e07d..ba65026533 100644 --- a/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts +++ b/src/app/access-control/group-registry/group-form/subgroup-list/subgroups-list.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, Observable, of as observableOf, Subscription } from 'rxjs'; @@ -86,7 +86,7 @@ export class SubgroupsListComponent implements OnInit, OnDestroy { constructor(public groupDataService: GroupDataService, private translateService: TranslateService, private notificationsService: NotificationsService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private paginationService: PaginationService, private router: Router) { this.currentSearchQuery = ''; diff --git a/src/app/access-control/group-registry/groups-registry.component.ts b/src/app/access-control/group-registry/groups-registry.component.ts index 70c9b22852..e4c624e3f6 100644 --- a/src/app/access-control/group-registry/groups-registry.component.ts +++ b/src/app/access-control/group-registry/groups-registry.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { @@ -99,7 +99,7 @@ export class GroupsRegistryComponent implements OnInit, OnDestroy { private dSpaceObjectDataService: DSpaceObjectDataService, private translateService: TranslateService, private notificationsService: NotificationsService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, protected routeService: RouteService, private router: Router, private authorizationService: AuthorizationDataService, diff --git a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts index 5c6885ae72..6d3138987a 100644 --- a/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts +++ b/src/app/admin/admin-registries/metadata-registry/metadata-schema-form/metadata-schema-form.component.ts @@ -5,7 +5,7 @@ import { DynamicFormLayout, DynamicInputModel } from '@ng-dynamic-forms/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { RegistryService } from '../../../../core/registry/registry.service'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { take } from 'rxjs/operators'; @@ -66,7 +66,7 @@ export class MetadataSchemaFormComponent implements OnInit, OnDestroy { /** * A FormGroup that combines all inputs */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * An EventEmitter that's fired whenever the form is being submitted diff --git a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts index 1c000c3c76..0beb306d6c 100644 --- a/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts +++ b/src/app/admin/admin-registries/metadata-schema/metadata-field-form/metadata-field-form.component.ts @@ -5,7 +5,7 @@ import { DynamicFormLayout, DynamicInputModel } from '@ng-dynamic-forms/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { RegistryService } from '../../../../core/registry/registry.service'; import { FormBuilderService } from '../../../../shared/form/builder/form-builder.service'; import { take } from 'rxjs/operators'; @@ -82,7 +82,7 @@ export class MetadataFieldFormComponent implements OnInit, OnDestroy { /** * A FormGroup that combines all inputs */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * An EventEmitter that's fired whenever the form is being submitted diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 44e48182fd..6081a076c0 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -15,7 +15,7 @@ import { INotification, Notification } from '../../shared/notifications/models/n import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../../core/shared/bitstream-format-support-level'; import { hasValue } from '../../shared/empty.util'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { FileSizePipe } from '../../shared/utils/file-size-pipe'; import { VarDirective } from '../../shared/utils/var.directive'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -84,9 +84,9 @@ describe('EditBitstreamPageComponent', () => { const controls = {}; if (hasValue(fModel)) { fModel.forEach((controlModel) => { - controls[controlModel.id] = new FormControl((controlModel as any).value); + controls[controlModel.id] = new UntypedFormControl((controlModel as any).value); }); - return new FormGroup(controls); + return new UntypedFormGroup(controls); } return undefined; } diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 8e63ec939f..1a3048097e 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -23,7 +23,7 @@ import { DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { TranslateService } from '@ngx-translate/core'; import { DynamicCustomSwitchModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model'; import cloneDeep from 'lodash/cloneDeep'; @@ -359,7 +359,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { /** * The form group of this form */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * The ID of the item the bitstream originates from diff --git a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts index fbaac87ed6..e7e98d9523 100644 --- a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts +++ b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.spec.ts @@ -12,7 +12,7 @@ import { NotificationType } from '../../../shared/notifications/models/notificat import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { DynamicFormControlModel, DynamicFormService } from '@ng-dynamic-forms/core'; import { hasValue } from '../../../shared/empty.util'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { RouterStub } from '../../../shared/testing/router.stub'; import { By } from '@angular/platform-browser'; import { Collection } from '../../../core/shared/collection.model'; @@ -98,9 +98,9 @@ describe('CollectionSourceComponent', () => { const controls = {}; if (hasValue(fModel)) { fModel.forEach((controlModel) => { - controls[controlModel.id] = new FormControl((controlModel as any).value); + controls[controlModel.id] = new UntypedFormControl((controlModel as any).value); }); - return new FormGroup(controls); + return new UntypedFormGroup(controls); } return undefined; } diff --git a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts index 512faa5311..2d1308cc83 100644 --- a/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-source/collection-source.component.ts @@ -14,7 +14,7 @@ import { Location } from '@angular/common'; import { TranslateService } from '@ngx-translate/core'; import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { hasNoValue, hasValue, isNotEmpty } from '../../../shared/empty.util'; import { ContentSource, ContentSourceHarvestType } from '../../../core/shared/content-source.model'; import { Observable, Subscription } from 'rxjs'; @@ -202,7 +202,7 @@ export class CollectionSourceComponent extends AbstractTrackableComponent implem /** * The form group of this form */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * Subscription to update the current form diff --git a/src/app/curation-form/curation-form.component.ts b/src/app/curation-form/curation-form.component.ts index 4b67580e77..464dd9673f 100644 --- a/src/app/curation-form/curation-form.component.ts +++ b/src/app/curation-form/curation-form.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { ScriptDataService } from '../core/data/processes/script-data.service'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { getFirstCompletedRemoteData } from '../core/shared/operators'; import { find, map } from 'rxjs/operators'; import { NotificationsService } from '../shared/notifications/notifications.service'; @@ -28,7 +28,7 @@ export class CurationFormComponent implements OnInit { config: Observable>; tasks: string[]; - form: FormGroup; + form: UntypedFormGroup; @Input() dsoHandle: string; @@ -45,9 +45,9 @@ export class CurationFormComponent implements OnInit { } ngOnInit(): void { - this.form = new FormGroup({ - task: new FormControl(''), - handle: new FormControl('') + this.form = new UntypedFormGroup({ + task: new UntypedFormControl(''), + handle: new UntypedFormControl('') }); this.config = this.configurationDataService.findByPropertyName(CURATION_CFG); diff --git a/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts b/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts index 5053a4b83d..5f76d87265 100644 --- a/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts +++ b/src/app/dso-shared/dso-edit-metadata/metadata-field-selector/metadata-field-selector.component.ts @@ -17,7 +17,7 @@ import { } from '../../../core/shared/operators'; import { Observable } from 'rxjs/internal/Observable'; import { RegistryService } from '../../../core/registry/registry.service'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject'; import { hasValue } from '../../../shared/empty.util'; import { Subscription } from 'rxjs/internal/Subscription'; @@ -70,7 +70,7 @@ export class MetadataFieldSelectorComponent implements OnInit, OnDestroy, AfterV /** * FormControl for the input */ - public input: FormControl = new FormControl(); + public input: UntypedFormControl = new UntypedFormControl(); /** * The current query to update mdFieldOptions$ for diff --git a/src/app/forgot-password/forgot-password-form/forgot-password-form.component.spec.ts b/src/app/forgot-password/forgot-password-form/forgot-password-form.component.spec.ts index 68566efaec..92d72d83df 100644 --- a/src/app/forgot-password/forgot-password-form/forgot-password-form.component.spec.ts +++ b/src/app/forgot-password/forgot-password-form/forgot-password-form.component.spec.ts @@ -5,7 +5,7 @@ import { NotificationsServiceStub } from '../../shared/testing/notifications-ser import { CommonModule } from '@angular/common'; import { RouterTestingModule } from '@angular/router/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { EPersonDataService } from '../../core/eperson/eperson-data.service'; @@ -60,7 +60,7 @@ describe('ForgotPasswordFormComponent', () => { {provide: ActivatedRoute, useValue: route}, {provide: Store, useValue: store}, {provide: EPersonDataService, useValue: ePersonDataService}, - {provide: FormBuilder, useValue: new FormBuilder()}, + {provide: UntypedFormBuilder, useValue: new UntypedFormBuilder()}, {provide: NotificationsService, useValue: notificationsService}, ], schemas: [CUSTOM_ELEMENTS_SCHEMA] diff --git a/src/app/info/feedback/feedback-form/feedback-form.component.spec.ts b/src/app/info/feedback/feedback-form/feedback-form.component.spec.ts index d6bedc46cf..c3d38a2876 100644 --- a/src/app/info/feedback/feedback-form/feedback-form.component.spec.ts +++ b/src/app/info/feedback/feedback-form/feedback-form.component.spec.ts @@ -7,7 +7,7 @@ import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; import { By } from '@angular/platform-browser'; import { RouteService } from '../../../core/services/route.service'; import { routeServiceStub } from '../../../shared/testing/route-service.stub'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsServiceStub } from '../../../shared/testing/notifications-service.stub'; import { AuthService } from '../../../core/auth/auth.service'; @@ -41,7 +41,7 @@ describe('FeedbackFormComponent', () => { declarations: [FeedbackFormComponent], providers: [ { provide: RouteService, useValue: routeServiceStub }, - { provide: FormBuilder, useValue: new FormBuilder() }, + { provide: UntypedFormBuilder, useValue: new UntypedFormBuilder() }, { provide: NotificationsService, useValue: notificationService }, { provide: FeedbackDataService, useValue: feedbackDataServiceStub }, { provide: AuthService, useValue: authService }, diff --git a/src/app/info/feedback/feedback-form/feedback-form.component.ts b/src/app/info/feedback/feedback-form/feedback-form.component.ts index 35cdd69cfc..684f974701 100644 --- a/src/app/info/feedback/feedback-form/feedback-form.component.ts +++ b/src/app/info/feedback/feedback-form/feedback-form.component.ts @@ -3,7 +3,7 @@ import { NoContent } from '../../../core/shared/NoContent.model'; import { FeedbackDataService } from '../../../core/feedback/feedback-data.service'; import { Component, Inject, OnInit } from '@angular/core'; import { RouteService } from '../../../core/services/route.service'; -import { FormBuilder, Validators } from '@angular/forms'; +import { UntypedFormBuilder, Validators } from '@angular/forms'; import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { TranslateService } from '@ngx-translate/core'; import { AuthService } from '../../../core/auth/auth.service'; @@ -37,7 +37,7 @@ export class FeedbackFormComponent implements OnInit { constructor( @Inject(NativeWindowService) protected _window: NativeWindowRef, public routeService: RouteService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, protected notificationsService: NotificationsService, protected translate: TranslateService, private feedbackDataService: FeedbackDataService, diff --git a/src/app/item-page/bitstreams/request-a-copy/bitstream-request-a-copy-page.component.ts b/src/app/item-page/bitstreams/request-a-copy/bitstream-request-a-copy-page.component.ts index 59819a4a66..77e1049d87 100644 --- a/src/app/item-page/bitstreams/request-a-copy/bitstream-request-a-copy-page.component.ts +++ b/src/app/item-page/bitstreams/request-a-copy/bitstream-request-a-copy-page.component.ts @@ -11,7 +11,7 @@ import { combineLatest as observableCombineLatest, Observable, of as observableO import { getBitstreamDownloadRoute, getForbiddenRoute } from '../../../app-routing-paths'; import { TranslateService } from '@ngx-translate/core'; import { EPerson } from '../../../core/eperson/models/eperson.model'; -import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { ItemRequestDataService } from '../../../core/data/item-request-data.service'; import { ItemRequest } from '../../../core/shared/item-request.model'; import { Item } from '../../../core/shared/item.model'; @@ -34,7 +34,7 @@ export class BitstreamRequestACopyPageComponent implements OnInit, OnDestroy { canDownload$: Observable; private subs: Subscription[] = []; - requestCopyForm: FormGroup; + requestCopyForm: UntypedFormGroup; item: Item; itemName: string; @@ -49,7 +49,7 @@ export class BitstreamRequestACopyPageComponent implements OnInit, OnDestroy { protected router: Router, private authorizationService: AuthorizationDataService, private auth: AuthService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private itemRequestDataService: ItemRequestDataService, private notificationsService: NotificationsService, private dsoNameService: DSONameService, @@ -59,15 +59,15 @@ export class BitstreamRequestACopyPageComponent implements OnInit, OnDestroy { ngOnInit(): void { this.requestCopyForm = this.formBuilder.group({ - name: new FormControl('', { + name: new UntypedFormControl('', { validators: [Validators.required], }), - email: new FormControl('', { + email: new UntypedFormControl('', { validators: [Validators.required, Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$')] }), - allfiles: new FormControl(''), - message: new FormControl(''), + allfiles: new UntypedFormControl(''), + message: new UntypedFormControl(''), }); diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.spec.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.spec.ts index cd466ae4a4..f2fa9d2440 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.spec.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterTestingModule } from '@angular/router/testing'; import { By } from '@angular/platform-browser'; @@ -26,7 +26,7 @@ describe('OrcidSyncSettingsComponent test suite', () => { let scheduler: TestScheduler; let researcherProfileService: jasmine.SpyObj; let notificationsService; - let formGroup: FormGroup; + let formGroup: UntypedFormGroup; const mockResearcherProfile: ResearcherProfile = Object.assign(new ResearcherProfile(), { id: 'test-id', @@ -186,12 +186,12 @@ describe('OrcidSyncSettingsComponent test suite', () => { beforeEach(() => { scheduler = getTestScheduler(); notificationsService = (comp as any).notificationsService; - formGroup = new FormGroup({ - syncMode: new FormControl('MANUAL'), - syncFundings: new FormControl('ALL'), - syncPublications: new FormControl('ALL'), - syncProfile_BIOGRAPHICAL: new FormControl(true), - syncProfile_IDENTIFIERS: new FormControl(true), + formGroup = new UntypedFormGroup({ + syncMode: new UntypedFormControl('MANUAL'), + syncFundings: new UntypedFormControl('ALL'), + syncPublications: new UntypedFormControl('ALL'), + syncProfile_BIOGRAPHICAL: new UntypedFormControl(true), + syncProfile_IDENTIFIERS: new UntypedFormControl(true), }); spyOn(comp.settingsUpdated, 'emit'); }); diff --git a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts index 494075c0f0..0bcbc295ac 100644 --- a/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts +++ b/src/app/item-page/orcid-page/orcid-sync-settings/orcid-sync-settings.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { TranslateService } from '@ngx-translate/core'; import { Operation } from 'fast-json-patch'; @@ -127,7 +127,7 @@ export class OrcidSyncSettingsComponent implements OnInit { * * @param form The form group */ - onSubmit(form: FormGroup): void { + onSubmit(form: UntypedFormGroup): void { const operations: Operation[] = []; this.fillOperationsFor(operations, '/orcid/mode', form.value.syncMode); this.fillOperationsFor(operations, '/orcid/publications', form.value.syncPublications); diff --git a/src/app/item-page/versions/item-versions.component.spec.ts b/src/app/item-page/versions/item-versions.component.spec.ts index 999176d996..e46f1585d7 100644 --- a/src/app/item-page/versions/item-versions.component.spec.ts +++ b/src/app/item-page/versions/item-versions.component.spec.ts @@ -18,7 +18,7 @@ import { PaginationServiceStub } from '../../shared/testing/pagination-service.s import { AuthService } from '../../core/auth/auth.service'; import { VersionDataService } from '../../core/data/version-data.service'; import { ItemDataService } from '../../core/data/item-data.service'; -import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; @@ -140,7 +140,7 @@ describe('ItemVersionsComponent', () => { imports: [TranslateModule.forRoot(), CommonModule, FormsModule, ReactiveFormsModule, BrowserModule, ItemSharedModule], providers: [ {provide: PaginationService, useValue: new PaginationServiceStub()}, - {provide: FormBuilder, useValue: new FormBuilder()}, + {provide: UntypedFormBuilder, useValue: new UntypedFormBuilder()}, {provide: NotificationsService, useValue: new NotificationsServiceStub()}, {provide: AuthService, useValue: authenticationServiceSpy}, {provide: AuthorizationDataService, useValue: authorizationServiceSpy}, diff --git a/src/app/item-page/versions/item-versions.component.ts b/src/app/item-page/versions/item-versions.component.ts index e0fc623f49..092f4fd222 100644 --- a/src/app/item-page/versions/item-versions.component.ts +++ b/src/app/item-page/versions/item-versions.component.ts @@ -32,7 +32,7 @@ import { getItemPageRoute, getItemVersionRoute } from '../item-page-routing-paths'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { ItemVersionsSummaryModalComponent } from './item-versions-summary-modal/item-versions-summary-modal.component'; import { NotificationsService } from '../../shared/notifications/notifications.service'; @@ -171,7 +171,7 @@ export class ItemVersionsComponent implements OnInit { private versionService: VersionDataService, private itemService: ItemDataService, private paginationService: PaginationService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private modalService: NgbModal, private notificationsService: NotificationsService, private translateService: TranslateService, diff --git a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts index 474e6fb025..c4e164a7e8 100644 --- a/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts +++ b/src/app/profile-page/profile-page-metadata-form/profile-page-metadata-form.component.ts @@ -5,7 +5,7 @@ import { DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { EPerson } from '../../core/eperson/models/eperson.model'; import { TranslateService } from '@ngx-translate/core'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; @@ -80,7 +80,7 @@ export class ProfilePageMetadataFormComponent implements OnInit { /** * The form group of this form */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * Prefix for the form's label messages of this component diff --git a/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts b/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts index 29bcffe4e4..04292ea96e 100644 --- a/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts +++ b/src/app/profile-page/profile-page-security-form/profile-page-security-form.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { DynamicFormControlModel, DynamicFormService, DynamicInputModel } from '@ng-dynamic-forms/core'; import { TranslateService } from '@ngx-translate/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { hasValue, isEmpty } from '../../shared/empty.util'; import { EPersonDataService } from '../../core/eperson/eperson-data.service'; import { NotificationsService } from '../../shared/notifications/notifications.service'; @@ -51,7 +51,7 @@ export class ProfilePageSecurityFormComponent implements OnInit { /** * The form group of this form */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * Indicates whether the "checkPasswordEmpty" needs to be added or not @@ -127,7 +127,7 @@ export class ProfilePageSecurityFormComponent implements OnInit { * Check if both password fields are filled in and equal * @param group The FormGroup to validate */ - checkPasswordsEqual(group: FormGroup) { + checkPasswordsEqual(group: UntypedFormGroup) { const pass = group.get('password').value; const repeatPass = group.get('passwordrepeat').value; @@ -138,7 +138,7 @@ export class ProfilePageSecurityFormComponent implements OnInit { * Checks if the password is empty * @param group The FormGroup to validate */ - checkPasswordEmpty(group: FormGroup) { + checkPasswordEmpty(group: UntypedFormGroup) { const pass = group.get('password').value; return isEmpty(pass) ? { emptyPassword: true } : null; } diff --git a/src/app/register-email-form/register-email-form.component.spec.ts b/src/app/register-email-form/register-email-form.component.spec.ts index 6136db4aec..9e852d9491 100644 --- a/src/app/register-email-form/register-email-form.component.spec.ts +++ b/src/app/register-email-form/register-email-form.component.spec.ts @@ -4,7 +4,7 @@ import { RestResponse } from '../core/cache/response.models'; import { CommonModule } from '@angular/common'; import { RouterTestingModule } from '@angular/router/testing'; import { TranslateModule } from '@ngx-translate/core'; -import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; import { Router } from '@angular/router'; import { NotificationsService } from '../shared/notifications/notifications.service'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; @@ -67,7 +67,7 @@ describe('RegisterEmailFormComponent', () => { {provide: Router, useValue: router}, {provide: EpersonRegistrationService, useValue: epersonRegistrationService}, {provide: ConfigurationDataService, useValue: configurationDataService}, - {provide: FormBuilder, useValue: new FormBuilder()}, + {provide: UntypedFormBuilder, useValue: new UntypedFormBuilder()}, {provide: NotificationsService, useValue: notificationsService}, {provide: CookieService, useValue: new CookieServiceMock()}, {provide: GoogleRecaptchaService, useValue: googleRecaptchaService}, diff --git a/src/app/register-email-form/register-email-form.component.ts b/src/app/register-email-form/register-email-form.component.ts index 9f0b186d39..ddb77b669c 100644 --- a/src/app/register-email-form/register-email-form.component.ts +++ b/src/app/register-email-form/register-email-form.component.ts @@ -3,7 +3,7 @@ import {EpersonRegistrationService} from '../core/data/eperson-registration.serv import {NotificationsService} from '../shared/notifications/notifications.service'; import {TranslateService} from '@ngx-translate/core'; import {Router} from '@angular/router'; -import { FormBuilder, FormControl, FormGroup, Validators, ValidatorFn } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators, ValidatorFn } from '@angular/forms'; import {Registration} from '../core/shared/registration.model'; import {RemoteData} from '../core/data/remote-data'; import {ConfigurationDataService} from '../core/data/configuration-data.service'; @@ -33,7 +33,7 @@ export class RegisterEmailFormComponent implements OnDestroy, OnInit { /** * The form containing the mail address */ - form: FormGroup; + form: UntypedFormGroup; /** * The message prefix @@ -79,7 +79,7 @@ export class RegisterEmailFormComponent implements OnDestroy, OnInit { private notificationService: NotificationsService, private translateService: TranslateService, private router: Router, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private configService: ConfigurationDataService, public googleRecaptchaService: GoogleRecaptchaService, public cookieService: CookieService, @@ -102,7 +102,7 @@ export class RegisterEmailFormComponent implements OnDestroy, OnInit { Validators.pattern('^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$') ]; this.form = this.formBuilder.group({ - email: new FormControl('', { + email: new UntypedFormControl('', { validators: validators, }) }); diff --git a/src/app/register-page/create-profile/confirmed.validator.spec.ts b/src/app/register-page/create-profile/confirmed.validator.spec.ts index 1be6aaf58f..b4d305fcf0 100644 --- a/src/app/register-page/create-profile/confirmed.validator.spec.ts +++ b/src/app/register-page/create-profile/confirmed.validator.spec.ts @@ -1,4 +1,4 @@ -import { FormBuilder, FormControl } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl } from '@angular/forms'; import { fakeAsync, waitForAsync } from '@angular/core/testing'; import { ConfirmedValidator } from './confirmed.validator'; @@ -7,9 +7,9 @@ describe('ConfirmedValidator', () => { beforeEach(waitForAsync(() => { - passwordForm = (new FormBuilder()).group({ - password: new FormControl('', {}), - confirmPassword: new FormControl('', {}) + passwordForm = (new UntypedFormBuilder()).group({ + password: new UntypedFormControl('', {}), + confirmPassword: new UntypedFormControl('', {}) }, { validator: ConfirmedValidator('password', 'confirmPassword') }); diff --git a/src/app/register-page/create-profile/confirmed.validator.ts b/src/app/register-page/create-profile/confirmed.validator.ts index 30f4f01701..914d50b540 100644 --- a/src/app/register-page/create-profile/confirmed.validator.ts +++ b/src/app/register-page/create-profile/confirmed.validator.ts @@ -1,10 +1,10 @@ -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; /** * Validator used to confirm that the password and confirmed password value are the same */ export function ConfirmedValidator(controlName: string, matchingControlName: string) { - return (formGroup: FormGroup) => { + return (formGroup: UntypedFormGroup) => { const control = formGroup.controls[controlName]; const matchingControl = formGroup.controls[matchingControlName]; if (matchingControl.errors && !matchingControl.errors.confirmedValidator) { diff --git a/src/app/register-page/create-profile/create-profile.component.spec.ts b/src/app/register-page/create-profile/create-profile.component.spec.ts index 026785e59b..d5a1fea8b2 100644 --- a/src/app/register-page/create-profile/create-profile.component.spec.ts +++ b/src/app/register-page/create-profile/create-profile.component.spec.ts @@ -7,7 +7,7 @@ import { TranslateModule } from '@ngx-translate/core'; import { ActivatedRoute, Router } from '@angular/router'; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { Store } from '@ngrx/store'; -import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, ReactiveFormsModule } from '@angular/forms'; import { EPersonDataService } from '../../core/eperson/eperson-data.service'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { of as observableOf } from 'rxjs'; @@ -135,7 +135,7 @@ describe('CreateProfileComponent', () => { {provide: ActivatedRoute, useValue: route}, {provide: Store, useValue: store}, {provide: EPersonDataService, useValue: ePersonDataService}, - {provide: FormBuilder, useValue: new FormBuilder()}, + {provide: UntypedFormBuilder, useValue: new UntypedFormBuilder()}, {provide: NotificationsService, useValue: notificationsService}, {provide: EndUserAgreementService, useValue: endUserAgreementService}, ], diff --git a/src/app/register-page/create-profile/create-profile.component.ts b/src/app/register-page/create-profile/create-profile.component.ts index 0e8e0e8742..eaaa983a43 100644 --- a/src/app/register-page/create-profile/create-profile.component.ts +++ b/src/app/register-page/create-profile/create-profile.component.ts @@ -3,7 +3,7 @@ import { ActivatedRoute, Router } from '@angular/router'; import { map } from 'rxjs/operators'; import { Registration } from '../../core/shared/registration.model'; import { Observable } from 'rxjs'; -import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { TranslateService } from '@ngx-translate/core'; import { EPersonDataService } from '../../core/eperson/eperson-data.service'; import { EPerson } from '../../core/eperson/models/eperson.model'; @@ -38,7 +38,7 @@ export class CreateProfileComponent implements OnInit { isInValidPassword = true; password: string; - userInfoForm: FormGroup; + userInfoForm: UntypedFormGroup; activeLangs: LangConfig[]; /** @@ -52,7 +52,7 @@ export class CreateProfileComponent implements OnInit { private store: Store, private router: Router, private route: ActivatedRoute, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private notificationsService: NotificationsService, private endUserAgreementService: EndUserAgreementService ) { @@ -71,14 +71,14 @@ export class CreateProfileComponent implements OnInit { this.activeLangs = environment.languages.filter((MyLangConfig) => MyLangConfig.active === true); this.userInfoForm = this.formBuilder.group({ - firstName: new FormControl('', { + firstName: new UntypedFormControl('', { validators: [Validators.required], }), - lastName: new FormControl('', { + lastName: new UntypedFormControl('', { validators: [Validators.required], }), - contactPhone: new FormControl(''), - language: new FormControl(''), + contactPhone: new UntypedFormControl(''), + language: new UntypedFormControl(''), }); } diff --git a/src/app/search-navbar/search-navbar.component.ts b/src/app/search-navbar/search-navbar.component.ts index ccdaa27861..98e64f6e10 100644 --- a/src/app/search-navbar/search-navbar.component.ts +++ b/src/app/search-navbar/search-navbar.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, ViewChild } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { SearchService } from '../core/shared/search/search.service'; import { expandSearchInput } from '../shared/animations/slide'; @@ -24,7 +24,7 @@ export class SearchNavbarComponent { // Search input field @ViewChild('searchInput') searchField: ElementRef; - constructor(private formBuilder: FormBuilder, private router: Router, private searchService: SearchService) { + constructor(private formBuilder: UntypedFormBuilder, private router: Router, private searchService: SearchService) { this.searchForm = this.formBuilder.group(({ query: '', })); diff --git a/src/app/shared/collection-dropdown/collection-dropdown.component.ts b/src/app/shared/collection-dropdown/collection-dropdown.component.ts index 10a673c7f2..575c2769b0 100644 --- a/src/app/shared/collection-dropdown/collection-dropdown.component.ts +++ b/src/app/shared/collection-dropdown/collection-dropdown.component.ts @@ -9,7 +9,7 @@ import { OnInit, Output } from '@angular/core'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { BehaviorSubject, from as observableFrom, Observable, of as observableOf, Subscription } from 'rxjs'; import { debounceTime, distinctUntilChanged, map, mergeMap, reduce, startWith, switchMap, take } from 'rxjs/operators'; @@ -54,7 +54,7 @@ export class CollectionDropdownComponent implements OnInit, OnDestroy { * The search form control * @type {FormControl} */ - public searchField: FormControl = new FormControl(); + public searchField: UntypedFormControl = new UntypedFormControl(); /** * The collection list obtained from a search diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts index 054c161da6..3f74f05118 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.spec.ts @@ -1,7 +1,7 @@ import { Location } from '@angular/common'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { RouterTestingModule } from '@angular/router/testing'; import { DynamicFormControlModel, DynamicFormService, DynamicInputModel } from '@ng-dynamic-forms/core'; @@ -30,9 +30,9 @@ describe('ComColFormComponent', () => { const controls = {}; if (hasValue(fModel)) { fModel.forEach((controlModel) => { - controls[controlModel.id] = new FormControl((controlModel as any).value); + controls[controlModel.id] = new UntypedFormControl((controlModel as any).value); }); - return new FormGroup(controls); + return new UntypedFormGroup(controls); } return undefined; } diff --git a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts index 23dfca8616..bbd8b01257 100644 --- a/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts +++ b/src/app/shared/comcol/comcol-forms/comcol-form/comcol-form.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormControlModel, DynamicFormService, DynamicInputModel } from '@ng-dynamic-forms/core'; import { TranslateService } from '@ngx-translate/core'; import { FileUploader } from 'ng2-file-upload'; @@ -66,7 +66,7 @@ export class ComColFormComponent implements On /** * The form group of this form */ - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * The uploader configuration options diff --git a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts index fe64c0a41e..503e4c4412 100644 --- a/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts +++ b/src/app/shared/dso-selector/dso-selector/dso-selector.component.ts @@ -9,7 +9,7 @@ import { QueryList, ViewChildren } from '@angular/core'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { BehaviorSubject, @@ -86,7 +86,7 @@ export class DSOSelectorComponent implements OnInit, OnDestroy { /** * Input form control to query the list */ - public input: FormControl = new FormControl(); + public input: UntypedFormControl = new UntypedFormControl(); /** * Default pagination for this feature diff --git a/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.spec.ts b/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.spec.ts index 5a9e74055a..e88f08a131 100644 --- a/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.spec.ts +++ b/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; -import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { TranslateModule } from '@ngx-translate/core'; @@ -13,7 +13,7 @@ describe('EpersonSearchBoxComponent test suite', () => { let compAsAny: any; let fixture: ComponentFixture; let de; - let formBuilder: FormBuilder; + let formBuilder: UntypedFormBuilder; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ @@ -27,7 +27,7 @@ describe('EpersonSearchBoxComponent test suite', () => { TestComponent ], providers: [ - FormBuilder, + UntypedFormBuilder, EpersonSearchBoxComponent ], schemas: [ @@ -64,7 +64,7 @@ describe('EpersonSearchBoxComponent test suite', () => { beforeEach(() => { // initTestScheduler(); fixture = TestBed.createComponent(EpersonSearchBoxComponent); - formBuilder = TestBed.inject(FormBuilder); + formBuilder = TestBed.inject(UntypedFormBuilder); comp = fixture.componentInstance; compAsAny = fixture.componentInstance; }); diff --git a/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.ts b/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.ts index 2aa4891c03..4689d29a8c 100644 --- a/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.ts +++ b/src/app/shared/eperson-group-list/eperson-search-box/eperson-search-box.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Output } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Subscription } from 'rxjs'; @@ -33,7 +33,7 @@ export class EpersonSearchBoxComponent { */ @Output() search: EventEmitter = new EventEmitter(); - constructor(private formBuilder: FormBuilder) { + constructor(private formBuilder: UntypedFormBuilder) { this.searchForm = this.formBuilder.group(({ scope: 'metadata', query: '', diff --git a/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.spec.ts b/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.spec.ts index d28a144245..b4c663902d 100644 --- a/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.spec.ts +++ b/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { Component, NO_ERRORS_SCHEMA } from '@angular/core'; -import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { TranslateModule } from '@ngx-translate/core'; @@ -13,7 +13,7 @@ describe('GroupSearchBoxComponent test suite', () => { let compAsAny: any; let fixture: ComponentFixture; let de; - let formBuilder: FormBuilder; + let formBuilder: UntypedFormBuilder; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ @@ -27,7 +27,7 @@ describe('GroupSearchBoxComponent test suite', () => { TestComponent ], providers: [ - FormBuilder, + UntypedFormBuilder, GroupSearchBoxComponent ], schemas: [ @@ -64,7 +64,7 @@ describe('GroupSearchBoxComponent test suite', () => { beforeEach(() => { // initTestScheduler(); fixture = TestBed.createComponent(GroupSearchBoxComponent); - formBuilder = TestBed.inject(FormBuilder); + formBuilder = TestBed.inject(UntypedFormBuilder); comp = fixture.componentInstance; compAsAny = fixture.componentInstance; }); diff --git a/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.ts b/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.ts index 3e45bb0336..154bee2d07 100644 --- a/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.ts +++ b/src/app/shared/eperson-group-list/group-search-box/group-search-box.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Output } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Subscription } from 'rxjs'; @@ -33,7 +33,7 @@ export class GroupSearchBoxComponent { */ @Output() search: EventEmitter = new EventEmitter(); - constructor(private formBuilder: FormBuilder) { + constructor(private formBuilder: UntypedFormBuilder) { this.searchForm = this.formBuilder.group(({ query: '', })); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts index 08966f0f78..b77ee9950c 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { CUSTOM_ELEMENTS_SCHEMA, DebugElement, NgZone, SimpleChange } from '@angular/core'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { By } from '@angular/platform-browser'; @@ -187,7 +187,7 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { new DynamicQualdropModel({ id: 'combobox', readOnly: false, required: false }) ]; const testModel = formModel[8]; - let formGroup: FormGroup; + let formGroup: UntypedFormGroup; let fixture: ComponentFixture; let component: DsDynamicFormControlContainerComponent; let debugElement: DebugElement; @@ -270,8 +270,8 @@ describe('DsDynamicFormControlContainerComponent test suite', () => { it('should initialize correctly', () => { expect(component.context).toBeNull(); - expect(component.control instanceof FormControl).toBe(true); - expect(component.group instanceof FormGroup).toBe(true); + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); expect(component.model instanceof DynamicFormControlModel).toBe(true); expect(component.hasErrorMessaging).toBe(false); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts index 5eee8f932d..ff5a119b6f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form-control-container.component.ts @@ -17,7 +17,7 @@ import { ViewChild, ViewContainerRef } from '@angular/core'; -import { FormArray, FormGroup } from '@angular/forms'; +import { UntypedFormArray, UntypedFormGroup } from '@angular/forms'; import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, @@ -199,12 +199,12 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo @Input('templates') inputTemplateList: QueryList; @Input() hasMetadataModel: any; @Input() formId: string; - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; @Input() formModel: DynamicFormControlModel[]; @Input() asBootstrapFormGroup = false; @Input() bindId = true; @Input() context: any | null = null; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() hostClass: string[]; @Input() hasErrorMessaging = false; @Input() layout = null as DynamicFormLayout; @@ -475,7 +475,7 @@ export class DsDynamicFormControlContainerComponent extends DynamicFormControlCo onRemove(): void { const arrayContext: DynamicFormArrayModel = (this.context as DynamicFormArrayGroupModel).context; const path = this.formBuilderService.getPath(arrayContext); - const formArrayControl = this.group.root.get(path) as FormArray; + const formArrayControl = this.group.root.get(path) as UntypedFormArray; this.formBuilderService.removeFormArrayGroup(this.context.index, formArrayControl, arrayContext); if (this.model.parent.context.groups.length === 0) { this.formBuilderService.addFormArrayGroup(formArrayControl, arrayContext); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts index 537a1f0f52..45511d6941 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-form.component.ts @@ -8,7 +8,7 @@ import { QueryList, ViewChildren } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormComponent, DynamicFormControlContainerComponent, @@ -27,7 +27,7 @@ import { DsDynamicFormControlContainerComponent } from './ds-dynamic-form-contro export class DsDynamicFormComponent extends DynamicFormComponent { @Input() formId: string; - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; @Input() formModel: DynamicFormControlModel[]; @Input() formLayout: DynamicFormLayout; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts index 7f0c7e2e35..12b2409bf2 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.spec.ts @@ -14,7 +14,7 @@ import { } from '../../../mocks/form-models.mock'; import {DsDynamicTypeBindRelationService} from './ds-dynamic-type-bind-relation.service'; import {FormFieldMetadataValueObject} from '../models/form-field-metadata-value.model'; -import {FormControl, ReactiveFormsModule} from '@angular/forms'; +import {UntypedFormControl, ReactiveFormsModule} from '@angular/forms'; import {FormBuilderService} from '../form-builder.service'; import {getMockFormBuilderService} from '../../../mocks/form-builder-service.mock'; import {Injector} from '@angular/core'; @@ -87,7 +87,7 @@ describe('DSDynamicTypeBindRelationService test suite', () => { it('Should receive one subscription to dc.type type binding"', () => { const testModel = mockInputWithTypeBindModel; testModel.typeBindRelations = getTypeBindRelations(['boundType']); - const dcTypeControl = new FormControl(); + const dcTypeControl = new UntypedFormControl(); dcTypeControl.setValue('boundType'); let subscriptions = service.subscribeRelations(testModel, dcTypeControl); expect(subscriptions).toHaveSize(1); @@ -96,7 +96,7 @@ describe('DSDynamicTypeBindRelationService test suite', () => { it('Expect hasMatch to be true (ie. this should be hidden)', () => { const testModel = mockInputWithTypeBindModel; testModel.typeBindRelations = getTypeBindRelations(['boundType']); - const dcTypeControl = new FormControl(); + const dcTypeControl = new UntypedFormControl(); dcTypeControl.setValue('boundType'); testModel.typeBindRelations[0].when[0].value = 'anotherType'; const relation = dynamicFormRelationService.findRelationByMatcher((testModel as any).typeBindRelations, HIDDEN_MATCHER); @@ -111,7 +111,7 @@ describe('DSDynamicTypeBindRelationService test suite', () => { it('Expect hasMatch to be false (ie. this should NOT be hidden)', () => { const testModel = mockInputWithTypeBindModel; testModel.typeBindRelations = getTypeBindRelations(['boundType']); - const dcTypeControl = new FormControl(); + const dcTypeControl = new UntypedFormControl(); dcTypeControl.setValue('boundType'); testModel.typeBindRelations[0].when[0].value = 'boundType'; const relation = dynamicFormRelationService.findRelationByMatcher((testModel as any).typeBindRelations, HIDDEN_MATCHER); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts index 5dd4a6627d..d5e735ed1a 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service.ts @@ -1,5 +1,5 @@ import { Inject, Injectable, Injector, Optional } from '@angular/core'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { Subscription } from 'rxjs'; import { startWith } from 'rxjs/operators'; @@ -172,7 +172,7 @@ export class DsDynamicTypeBindRelationService { * @param model * @param control */ - subscribeRelations(model: DynamicFormControlModel, control: FormControl): Subscription[] { + subscribeRelations(model: DynamicFormControlModel, control: UntypedFormControl): Subscription[] { const relatedModels = this.getRelatedFormModel(model); const subscriptions: Subscription[] = []; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/existing-metadata-list-element/existing-metadata-list-element.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/existing-metadata-list-element/existing-metadata-list-element.component.ts index 3160bccb41..aa50133e8a 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/existing-metadata-list-element/existing-metadata-list-element.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/existing-metadata-list-element/existing-metadata-list-element.component.ts @@ -1,6 +1,6 @@ /* eslint-disable max-classes-per-file */ import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output } from '@angular/core'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { DynamicFormArrayGroupModel } from '@ng-dynamic-forms/core'; import { Store } from '@ngrx/store'; import { BehaviorSubject, Subscription } from 'rxjs'; @@ -64,7 +64,7 @@ export class ReorderableFormFieldMetadataValue extends Reorderable { constructor( public metadataValue: FormFieldMetadataValueObject, public model: DynamicConcatModel, - public control: FormControl, + public control: UntypedFormControl, public group: DynamicFormArrayGroupModel, oldIndex?: number, newIndex?: number diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts index 01bba74cc8..9d48bdac21 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/array-group/dynamic-form-array.component.ts @@ -1,6 +1,6 @@ import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { Component, EventEmitter, Input, Output, QueryList } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormArrayComponent, DynamicFormControlCustomEvent, @@ -26,7 +26,7 @@ export class DsDynamicFormArrayComponent extends DynamicFormArrayComponent { @Input() bindId = true; @Input() formModel: DynamicFormControlModel[]; @Input() formLayout: DynamicFormLayout; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() layout: DynamicFormControlLayout; @Input() model: DynamicRowArrayModel;// DynamicRow? @Input() templates: QueryList | undefined; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts index 9f85ccc013..ceb498fe56 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.spec.ts @@ -1,5 +1,5 @@ import { DynamicFormsCoreModule, DynamicFormService } from '@ng-dynamic-forms/core'; -import { FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormGroup, ReactiveFormsModule } from '@angular/forms'; import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { DebugElement } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -11,7 +11,7 @@ describe('CustomSwitchComponent', () => { const testModel = new DynamicCustomSwitchModel({ id: 'switch' }); const formModel = [testModel]; - let formGroup: FormGroup; + let formGroup: UntypedFormGroup; let fixture: ComponentFixture; let component: CustomSwitchComponent; let debugElement: DebugElement; @@ -47,7 +47,7 @@ describe('CustomSwitchComponent', () => { it('should initialize correctly', () => { expect(component.bindId).toBe(true); - expect(component.group instanceof FormGroup).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); expect(component.model instanceof DynamicCustomSwitchModel).toBe(true); expect(component.blur).toBeDefined(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts index 5b3f1e89e4..47780e66f6 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicNGBootstrapCheckboxComponent } from '@ng-dynamic-forms/ui-ng-bootstrap'; import { DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; @@ -24,7 +24,7 @@ export class CustomSwitchComponent extends DynamicNGBootstrapCheckboxComponent { /** * The formgroup containing this component */ - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; /** * The model used for displaying the switch diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts index 0756e48a8d..c0d1c83bf9 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { DebugElement } from '@angular/core'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; @@ -11,7 +11,7 @@ describe('DsDatePickerInlineComponent test suite', () => { const testModel = new DynamicDatePickerModel({ id: 'datepicker' }); const formModel = [testModel]; - let formGroup: FormGroup; + let formGroup: UntypedFormGroup; let fixture: ComponentFixture; let component: DsDatePickerInlineComponent; let debugElement: DebugElement; @@ -53,8 +53,8 @@ describe('DsDatePickerInlineComponent test suite', () => { it('should initialize correctly', () => { expect(component.bindId).toBe(true); - expect(component.control instanceof FormControl).toBe(true); - expect(component.group instanceof FormGroup).toBe(true); + expect(component.control instanceof UntypedFormControl).toBe(true); + expect(component.group instanceof UntypedFormGroup).toBe(true); expect(component.model instanceof DynamicDatePickerModel).toBe(true); expect(component.blur).toBeDefined(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts index f23b6c1e7b..2eb6e9291c 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker-inline/dynamic-date-picker-inline.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { NgbDatepicker, NgbDatepickerConfig } from '@ng-bootstrap/ng-bootstrap'; import { DynamicDatePickerModel, @@ -16,7 +16,7 @@ import { export class DsDatePickerInlineComponent extends DynamicFormControlComponent { @Input() bindId = true; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() layout: DynamicFormControlLayout; @Input() model: DynamicDatePickerModel; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts index 4989dab93a..ffc36008c6 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.spec.ts @@ -1,7 +1,7 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ComponentFixture, inject, TestBed, waitForAsync, } from '@angular/core/testing'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; @@ -15,8 +15,8 @@ import { } from '../../../../../testing/dynamic-form-mock-services'; -export const DATE_TEST_GROUP = new FormGroup({ - date: new FormControl() +export const DATE_TEST_GROUP = new UntypedFormGroup({ + date: new UntypedFormControl() }); export const DATE_TEST_MODEL_CONFIG = { diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts index 78f9935829..8d5ce5b48e 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/date-picker/date-picker.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicDsDatePickerModel } from './date-picker.model'; import { hasValue } from '../../../../../empty.util'; import { @@ -18,7 +18,7 @@ export const DS_DATE_PICKER_SEPARATOR = '-'; export class DsDatePickerComponent extends DynamicFormControlComponent implements OnInit { @Input() bindId = true; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: DynamicDsDatePickerModel; @Input() legend: string; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts index 8cfa5c818a..a25ad4d231 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; -import { FormControl, FormGroup, FormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { TranslateModule } from '@ngx-translate/core'; @@ -31,8 +31,8 @@ describe('DsDynamicDisabledComponent', () => { name: 'disabledInput', hasSelectableMetadata: false }); - group = new FormGroup({ - disabledInput: new FormControl(), + group = new UntypedFormGroup({ + disabledInput: new UntypedFormControl(), }); } diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts index 974858b1cc..222ad51049 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/disabled/dynamic-disabled.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormControlComponent, DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; @@ -18,7 +18,7 @@ import { DynamicDisabledModel } from './dynamic-disabled.model'; export class DsDynamicDisabledComponent extends DynamicFormControlComponent { @Input() formId: string; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: DynamicDisabledModel; modelValuesString = ''; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts index 4c24443633..c8a5ed98ad 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormControlComponent, @@ -25,7 +25,7 @@ import { PageInfo } from '../../../../../core/shared/page-info.model'; }) export abstract class DsDynamicVocabularyComponent extends DynamicFormControlComponent { - @Input() abstract group: FormGroup; + @Input() abstract group: UntypedFormGroup; @Input() abstract model: DsDynamicInputModel; @Output() abstract blur: EventEmitter; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts index 9d8d73eab5..cfd1bc293c 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/form-group/dynamic-form-group.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, QueryList } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormControlComponent, DynamicFormControlCustomEvent, @@ -22,7 +22,7 @@ export class DsDynamicFormGroupComponent extends DynamicFormControlComponent { @Input() formModel: DynamicFormControlModel[]; @Input() formLayout: DynamicFormLayout; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() layout: DynamicFormControlLayout; @Input() model: DynamicFormGroupModel; @Input() templates: QueryList | DynamicTemplateDirective[] | undefined; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts index b4a02457dc..51ce584bb1 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.spec.ts @@ -1,6 +1,6 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ComponentFixture, inject, TestBed, waitForAsync, } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; @@ -136,9 +136,9 @@ describe('DsDynamicListComponent test suite', () => { listFixture = TestBed.createComponent(DsDynamicListComponent); listComp = listFixture.componentInstance; // FormComponent test instance - listComp.group = new FormGroup({ - listCheckbox: new FormGroup({}), - listRadio: new FormGroup({}) + listComp.group = new UntypedFormGroup({ + listCheckbox: new UntypedFormGroup({}), + listRadio: new UntypedFormGroup({}) }); listComp.model = new DynamicListCheckboxGroupModel(LIST_CHECKBOX_TEST_MODEL_CONFIG, LAYOUT_TEST); listFixture.detectChanges(); @@ -184,9 +184,9 @@ describe('DsDynamicListComponent test suite', () => { listFixture = TestBed.createComponent(DsDynamicListComponent); listComp = listFixture.componentInstance; // FormComponent test instance - listComp.group = new FormGroup({ - listCheckbox: new FormGroup({}), - listRadio: new FormGroup({}) + listComp.group = new UntypedFormGroup({ + listCheckbox: new UntypedFormGroup({}), + listRadio: new UntypedFormGroup({}) }); listComp.model = new DynamicListCheckboxGroupModel(LIST_CHECKBOX_TEST_MODEL_CONFIG, LAYOUT_TEST); modelValue = [Object.assign(new VocabularyEntry(), { authority: 1, display: 'one', value: 1 })]; @@ -224,9 +224,9 @@ describe('DsDynamicListComponent test suite', () => { listFixture = TestBed.createComponent(DsDynamicListComponent); listComp = listFixture.componentInstance; // FormComponent test instance - listComp.group = new FormGroup({ - listCheckbox: new FormGroup({}), - listRadio: new FormGroup({}) + listComp.group = new UntypedFormGroup({ + listCheckbox: new UntypedFormGroup({}), + listRadio: new UntypedFormGroup({}) }); listComp.model = new DynamicListRadioGroupModel(LIST_RADIO_TEST_MODEL_CONFIG, LAYOUT_TEST); listFixture.detectChanges(); @@ -260,9 +260,9 @@ describe('DsDynamicListComponent test suite', () => { listFixture = TestBed.createComponent(DsDynamicListComponent); listComp = listFixture.componentInstance; // FormComponent test instance - listComp.group = new FormGroup({ - listCheckbox: new FormGroup({}), - listRadio: new FormGroup({}) + listComp.group = new UntypedFormGroup({ + listCheckbox: new UntypedFormGroup({}), + listRadio: new UntypedFormGroup({}) }); listComp.model = new DynamicListRadioGroupModel(LIST_RADIO_TEST_MODEL_CONFIG, LAYOUT_TEST); modelValue = Object.assign(new VocabularyEntry(), { authority: 1, display: 'one', value: 1 }); @@ -291,9 +291,9 @@ describe('DsDynamicListComponent test suite', () => { }) class TestComponent { - group: FormGroup = new FormGroup({ - listCheckbox: new FormGroup({}), - listRadio: new FormGroup({}) + group: UntypedFormGroup = new UntypedFormGroup({ + listCheckbox: new UntypedFormGroup({}), + listRadio: new UntypedFormGroup({}) }); model = new DynamicListCheckboxGroupModel(LIST_CHECKBOX_TEST_MODEL_CONFIG, LAYOUT_TEST); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts index 88158f9414..aa62e5b40d 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/list/dynamic-list.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormGroup, ValidatorFn, ValidationErrors, AbstractControl } from '@angular/forms'; +import { UntypedFormGroup, ValidatorFn, ValidationErrors, AbstractControl } from '@angular/forms'; import { DynamicCheckboxModel, DynamicFormControlComponent, @@ -35,7 +35,7 @@ export interface ListItem { }) export class DsDynamicListComponent extends DynamicFormControlComponent implements OnInit { - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: any; @Output() blur: EventEmitter = new EventEmitter(); @@ -108,7 +108,7 @@ export class DsDynamicListComponent extends DynamicFormControlComponent implemen */ protected setOptionsFromVocabulary() { if (this.model.vocabularyOptions.name && this.model.vocabularyOptions.name.length > 0) { - const listGroup = this.group.controls[this.model.id] as FormGroup; + const listGroup = this.group.controls[this.model.id] as UntypedFormGroup; if (this.model.repeatable && this.model.required) { listGroup.addValidators(this.hasAtLeastOneVocabularyEntry()); } diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts index 27029ff2be..2fea4fc985 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.spec.ts @@ -1,6 +1,6 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ComponentFixture, fakeAsync, inject, TestBed, tick, waitForAsync, } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; @@ -71,9 +71,9 @@ let LOOKUP_NAME_TEST_MODEL_CONFIG = { hasSelectableMetadata: false }; -let LOOKUP_TEST_GROUP = new FormGroup({ - lookup: new FormControl(), - lookupName: new FormControl() +let LOOKUP_TEST_GROUP = new UntypedFormGroup({ + lookup: new UntypedFormControl(), + lookupName: new UntypedFormControl() }); describe('Dynamic Lookup component', () => { @@ -122,9 +122,9 @@ describe('Dynamic Lookup component', () => { hasSelectableMetadata: false }; - LOOKUP_TEST_GROUP = new FormGroup({ - lookup: new FormControl(), - lookupName: new FormControl() + LOOKUP_TEST_GROUP = new UntypedFormGroup({ + lookup: new UntypedFormControl(), + lookupName: new UntypedFormControl() }); } @@ -564,7 +564,7 @@ describe('Dynamic Lookup component', () => { }) class TestComponent { - group: FormGroup = LOOKUP_TEST_GROUP; + group: UntypedFormGroup = LOOKUP_TEST_GROUP; inputLookupModelConfig = LOOKUP_TEST_MODEL_CONFIG; diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts index 3993704895..63545f45d2 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/lookup/dynamic-lookup.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { of as observableOf, Subscription } from 'rxjs'; import { catchError, distinctUntilChanged } from 'rxjs/operators'; @@ -30,7 +30,7 @@ import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; }) export class DsDynamicLookupComponent extends DsDynamicVocabularyComponent implements OnDestroy, OnInit { - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: any; @Output() blur: EventEmitter = new EventEmitter(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts index cf417145a7..69520aba63 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.spec.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ComponentFixture, fakeAsync, inject, TestBed, tick, } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { CdkTreeModule } from '@angular/cdk/tree'; @@ -47,8 +47,8 @@ export class MockNgbModalRef { } function init() { - ONEBOX_TEST_GROUP = new FormGroup({ - onebox: new FormControl(), + ONEBOX_TEST_GROUP = new UntypedFormGroup({ + onebox: new UntypedFormControl(), }); ONEBOX_TEST_MODEL_CONFIG = { @@ -457,7 +457,7 @@ describe('DsDynamicOneboxComponent test suite', () => { }) class TestComponent { - group: FormGroup = ONEBOX_TEST_GROUP; + group: UntypedFormGroup = ONEBOX_TEST_GROUP; model = new DynamicOneboxModel(ONEBOX_TEST_MODEL_CONFIG); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts index 008328bf73..251ff36a68 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; import { @@ -44,7 +44,7 @@ import { VocabularyEntryDetail } from '../../../../../../core/submission/vocabul }) export class DsDynamicOneboxComponent extends DsDynamicVocabularyComponent implements OnInit { - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: DynamicOneboxModel; @Output() blur: EventEmitter = new EventEmitter(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts index 733758fd27..feca7f95c6 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.component.spec.ts @@ -1,7 +1,7 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ComponentFixture, inject, TestBed, waitForAsync, } from '@angular/core/testing'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { Store, StoreModule } from '@ngrx/store'; @@ -83,8 +83,8 @@ function init() { hasSelectableMetadata: false } as DynamicRelationGroupModelConfig; - FORM_GROUP_TEST_GROUP = new FormGroup({ - dc_contributor_author: new FormControl(), + FORM_GROUP_TEST_GROUP = new UntypedFormGroup({ + dc_contributor_author: new UntypedFormControl(), }); } @@ -96,9 +96,9 @@ describe('DsDynamicRelationGroupComponent test suite', () => { let groupFixture: ComponentFixture; let modelValue: any; let html; - let control1: FormControl; + let control1: UntypedFormControl; let model1: DsDynamicInputModel; - let control2: FormControl; + let control2: UntypedFormControl; let model2: DsDynamicInputModel; // waitForAsync beforeEach @@ -170,9 +170,9 @@ describe('DsDynamicRelationGroupComponent test suite', () => { groupComp.group = FORM_GROUP_TEST_GROUP; groupComp.model = new DynamicRelationGroupModel(FORM_GROUP_TEST_MODEL_CONFIG); groupFixture.detectChanges(); - control1 = service.getFormControlById('dc_contributor_author', (groupComp as any).formRef.formGroup, groupComp.formModel) as FormControl; + control1 = service.getFormControlById('dc_contributor_author', (groupComp as any).formRef.formGroup, groupComp.formModel) as UntypedFormControl; model1 = service.findById('dc_contributor_author', groupComp.formModel) as DsDynamicInputModel; - control2 = service.getFormControlById('local_contributor_affiliation', (groupComp as any).formRef.formGroup, groupComp.formModel) as FormControl; + control2 = service.getFormControlById('local_contributor_affiliation', (groupComp as any).formRef.formGroup, groupComp.formModel) as UntypedFormControl; model2 = service.findById('local_contributor_affiliation', groupComp.formModel) as DsDynamicInputModel; // spyOn(store, 'dispatch'); @@ -272,7 +272,7 @@ describe('DsDynamicRelationGroupComponent test suite', () => { groupComp.onChipSelected(0); groupFixture.detectChanges(); - control1 = service.getFormControlById('dc_contributor_author', (groupComp as any).formRef.formGroup, groupComp.formModel) as FormControl; + control1 = service.getFormControlById('dc_contributor_author', (groupComp as any).formRef.formGroup, groupComp.formModel) as UntypedFormControl; model1 = service.findById('dc_contributor_author', groupComp.formModel) as DsDynamicInputModel; control1.setValue('test author modify'); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts index fd111e44c2..7fdfb61b74 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { combineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { filter, map, mergeMap, scan } from 'rxjs/operators'; @@ -43,7 +43,7 @@ import { VocabularyEntryDetail } from '../../../../../../core/submission/vocabul export class DsDynamicRelationGroupComponent extends DynamicFormControlComponent implements OnDestroy, OnInit { @Input() formId: string; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: DynamicRelationGroupModel; @Output() blur: EventEmitter = new EventEmitter(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts index e8e971e488..0fe617e231 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.spec.ts @@ -1,6 +1,6 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ComponentFixture, fakeAsync, inject, TestBed, tick, waitForAsync, } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; @@ -21,8 +21,8 @@ import { mockDynamicFormValidationService } from '../../../../../testing/dynamic-form-mock-services'; -export const SD_TEST_GROUP = new FormGroup({ - dropdown: new FormControl(), +export const SD_TEST_GROUP = new UntypedFormGroup({ + dropdown: new UntypedFormControl(), }); export const SD_TEST_MODEL_CONFIG = { @@ -219,7 +219,7 @@ describe('Dynamic Dynamic Scrollable Dropdown component', () => { }) class TestComponent { - group: FormGroup = SD_TEST_GROUP; + group: UntypedFormGroup = SD_TEST_GROUP; model = new DynamicScrollableDropdownModel(SD_TEST_MODEL_CONFIG); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts index 5e35df5ef7..43b785b21f 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/scrollable-dropdown/dynamic-scrollable-dropdown.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { Observable, of as observableOf } from 'rxjs'; import { catchError, distinctUntilChanged, map, tap } from 'rxjs/operators'; @@ -29,7 +29,7 @@ import { FormFieldMetadataValueObject } from '../../../models/form-field-metadat }) export class DsDynamicScrollableDropdownComponent extends DsDynamicVocabularyComponent implements OnInit { @Input() bindId = true; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: DynamicScrollableDropdownModel; @Output() blur: EventEmitter = new EventEmitter(); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts index 162d9c3cec..a6a4c45170 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.spec.ts @@ -1,6 +1,6 @@ // Load the implementations that should be tested import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { ComponentFixture, fakeAsync, flush, inject, TestBed, waitForAsync, } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; @@ -39,8 +39,8 @@ let TAG_TEST_GROUP; let TAG_TEST_MODEL_CONFIG; function init() { - TAG_TEST_GROUP = new FormGroup({ - tag: new FormControl(), + TAG_TEST_GROUP = new UntypedFormGroup({ + tag: new UntypedFormControl(), }); TAG_TEST_MODEL_CONFIG = { @@ -291,7 +291,7 @@ describe('DsDynamicTagComponent test suite', () => { }) class TestComponent { - group: FormGroup = TAG_TEST_GROUP; + group: UntypedFormGroup = TAG_TEST_GROUP; model = new DynamicTagModel(TAG_TEST_MODEL_CONFIG); diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts index 1c015be747..4abb68a53b 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/tag/dynamic-tag.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { DynamicFormLayoutService, DynamicFormValidationService } from '@ng-dynamic-forms/core'; import { Observable, of as observableOf } from 'rxjs'; @@ -32,7 +32,7 @@ import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; export class DsDynamicTagComponent extends DsDynamicVocabularyComponent implements OnInit { @Input() bindId = true; - @Input() group: FormGroup; + @Input() group: UntypedFormGroup; @Input() model: DynamicTagModel; @Output() blur: EventEmitter = new EventEmitter(); diff --git a/src/app/shared/form/builder/form-builder.service.spec.ts b/src/app/shared/form/builder/form-builder.service.spec.ts index 7d1a9a3986..fd3588e73e 100644 --- a/src/app/shared/form/builder/form-builder.service.spec.ts +++ b/src/app/shared/form/builder/form-builder.service.spec.ts @@ -1,8 +1,8 @@ import { inject, TestBed } from '@angular/core/testing'; import { - FormArray, - FormControl, - FormGroup, + UntypedFormArray, + UntypedFormControl, + UntypedFormGroup, NG_ASYNC_VALIDATORS, NG_VALIDATORS, ReactiveFormsModule @@ -683,21 +683,21 @@ describe('FormBuilderService test suite', () => { const formGroup = service.createFormGroup(testModel); - expect(formGroup instanceof FormGroup).toBe(true); + expect(formGroup instanceof UntypedFormGroup).toBe(true); - expect(formGroup.get('testCheckbox') instanceof FormControl).toBe(true); - expect(formGroup.get('testCheckboxGroup') instanceof FormGroup).toBe(true); - expect(formGroup.get('testDatepicker') instanceof FormControl).toBe(true); - expect(formGroup.get('testFormArray') instanceof FormArray).toBe(true); - expect(formGroup.get('testInput') instanceof FormControl).toBe(true); - expect(formGroup.get('testRadioGroup') instanceof FormControl).toBe(true); - expect(formGroup.get('testSelect') instanceof FormControl).toBe(true); - expect(formGroup.get('testTextArea') instanceof FormControl).toBe(true); - expect(formGroup.get('testFileUpload') instanceof FormControl).toBe(true); - expect(formGroup.get('testEditor') instanceof FormControl).toBe(true); - expect(formGroup.get('testTimePicker') instanceof FormControl).toBe(true); - expect(formGroup.get('testRating') instanceof FormControl).toBe(true); - expect(formGroup.get('testColorPicker') instanceof FormControl).toBe(true); + expect(formGroup.get('testCheckbox') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testCheckboxGroup') instanceof UntypedFormGroup).toBe(true); + expect(formGroup.get('testDatepicker') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testFormArray') instanceof UntypedFormArray).toBe(true); + expect(formGroup.get('testInput') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testRadioGroup') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testSelect') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testTextArea') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testFileUpload') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testEditor') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testTimePicker') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testRating') instanceof UntypedFormControl).toBe(true); + expect(formGroup.get('testColorPicker') instanceof UntypedFormControl).toBe(true); }); it('should throw when unknown DynamicFormControlModel id is specified in JSON', () => { @@ -720,7 +720,7 @@ describe('FormBuilderService test suite', () => { it('should add a form control to an existing form group', () => { const formGroup = service.createFormGroup(testModel); - const nestedFormGroup = formGroup.controls.testFormGroup as FormGroup; + const nestedFormGroup = formGroup.controls.testFormGroup as UntypedFormGroup; const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; const newModel1 = new DynamicInputModel({ id: 'newInput1' }); const newModel2 = new DynamicInputModel({ id: 'newInput2' }); @@ -731,14 +731,14 @@ describe('FormBuilderService test suite', () => { expect(formGroup.controls[newModel1.id]).toBeTruthy(); expect(testModel[testModel.length - 1] === newModel1).toBe(true); - expect((formGroup.controls.testFormGroup as FormGroup).controls[newModel2.id]).toBeTruthy(); + expect((formGroup.controls.testFormGroup as UntypedFormGroup).controls[newModel2.id]).toBeTruthy(); expect(nestedFormGroupModel.get(nestedFormGroupModel.group.length - 1) === newModel2).toBe(true); }); it('should insert a form control to an existing form group', () => { const formGroup = service.createFormGroup(testModel); - const nestedFormGroup = formGroup.controls.testFormGroup as FormGroup; + const nestedFormGroup = formGroup.controls.testFormGroup as UntypedFormGroup; const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; const newModel1 = new DynamicInputModel({ id: 'newInput1' }); const newModel2 = new DynamicInputModel({ id: 'newInput2' }); @@ -750,7 +750,7 @@ describe('FormBuilderService test suite', () => { expect(testModel[4] === newModel1).toBe(true); expect(service.getPath(testModel[4])).toEqual(['newInput1']); - expect((formGroup.controls.testFormGroup as FormGroup).controls[newModel2.id]).toBeTruthy(); + expect((formGroup.controls.testFormGroup as UntypedFormGroup).controls[newModel2.id]).toBeTruthy(); expect(nestedFormGroupModel.get(0) === newModel2).toBe(true); expect(service.getPath(nestedFormGroupModel.get(0))).toEqual(['testFormGroup', 'newInput2']); }); @@ -769,14 +769,14 @@ describe('FormBuilderService test suite', () => { service.moveFormGroupControl(0, 1, nestedFormGroupModel); - expect((formGroup.controls.testFormGroup as FormGroup).controls[model2.id]).toBeTruthy(); + expect((formGroup.controls.testFormGroup as UntypedFormGroup).controls[model2.id]).toBeTruthy(); expect(nestedFormGroupModel.get(1) === model2).toBe(true); }); it('should remove a form control from an existing form group', () => { const formGroup = service.createFormGroup(testModel); - const nestedFormGroup = formGroup.controls.testFormGroup as FormGroup; + const nestedFormGroup = formGroup.controls.testFormGroup as UntypedFormGroup; const nestedFormGroupModel = testModel[7] as DynamicFormGroupModel; const length = testModel.length; const size = nestedFormGroupModel.size(); @@ -810,7 +810,7 @@ describe('FormBuilderService test suite', () => { formArray = service.createFormArray(model); - expect(formArray instanceof FormArray).toBe(true); + expect(formArray instanceof UntypedFormArray).toBe(true); expect(formArray.length).toBe(model.initialCount); }); @@ -841,8 +841,8 @@ describe('FormBuilderService test suite', () => { const index = 3; const step = 1; - (formArray.at(index) as FormGroup).controls.testFormArrayGroupInput.setValue('next test value 1'); - (formArray.at(index + step) as FormGroup).controls.testFormArrayGroupInput.setValue('next test value 2'); + (formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 1'); + (formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 2'); (model.get(index).get(0) as DynamicFormValueControlModel).value = 'next test value 1'; (model.get(index + step).get(0) as DynamicFormValueControlModel).value = 'next test value 2'; @@ -851,8 +851,8 @@ describe('FormBuilderService test suite', () => { expect(formArray.length).toBe(model.initialCount); - expect((formArray.at(index) as FormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 2'); - expect((formArray.at(index + step) as FormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 1'); + expect((formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 2'); + expect((formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 1'); expect((model.get(index).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 2'); expect((model.get(index + step).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 1'); @@ -865,8 +865,8 @@ describe('FormBuilderService test suite', () => { const index = 3; const step = -1; - (formArray.at(index) as FormGroup).controls.testFormArrayGroupInput.setValue('next test value 1'); - (formArray.at(index + step) as FormGroup).controls.testFormArrayGroupInput.setValue('next test value 2'); + (formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 1'); + (formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.setValue('next test value 2'); (model.get(index).get(0) as DynamicFormValueControlModel).value = 'next test value 1'; (model.get(index + step).get(0) as DynamicFormValueControlModel).value = 'next test value 2'; @@ -875,8 +875,8 @@ describe('FormBuilderService test suite', () => { expect(formArray.length).toBe(model.initialCount); - expect((formArray.at(index) as FormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 2'); - expect((formArray.at(index + step) as FormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 1'); + expect((formArray.at(index) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 2'); + expect((formArray.at(index + step) as UntypedFormGroup).controls.testFormArrayGroupInput.value).toEqual('next test value 1'); expect((model.get(index).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 2'); expect((model.get(index + step).get(0) as DynamicFormValueControlModel).value).toEqual('next test value 1'); diff --git a/src/app/shared/form/builder/form-builder.service.ts b/src/app/shared/form/builder/form-builder.service.ts index b3a78d4669..cf6f38bf7b 100644 --- a/src/app/shared/form/builder/form-builder.service.ts +++ b/src/app/shared/form/builder/form-builder.service.ts @@ -1,5 +1,5 @@ import {Injectable, Optional} from '@angular/core'; -import { AbstractControl, FormControl, FormGroup } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { DYNAMIC_FORM_CONTROL_TYPE_ARRAY, @@ -59,7 +59,7 @@ export class FormBuilderService extends DynamicFormService { /** * This map contains the active forms control groups */ - private formGroups: Map; + private formGroups: Map; /** * This is the field to use for type binding @@ -83,7 +83,7 @@ export class FormBuilderService extends DynamicFormService { } - createDynamicFormControlEvent(control: FormControl, group: FormGroup, model: DynamicFormControlModel, type: string): DynamicFormControlEvent { + createDynamicFormControlEvent(control: UntypedFormControl, group: UntypedFormGroup, model: DynamicFormControlModel, type: string): DynamicFormControlEvent { const $event = { value: (model as any).value, autoSave: false @@ -369,12 +369,12 @@ export class FormBuilderService extends DynamicFormService { return model.type === DYNAMIC_FORM_CONTROL_TYPE_INPUT; } - getFormControlById(id: string, formGroup: FormGroup, groupModel: DynamicFormControlModel[], index = 0): AbstractControl { + getFormControlById(id: string, formGroup: UntypedFormGroup, groupModel: DynamicFormControlModel[], index = 0): AbstractControl { const fieldModel = this.findById(id, groupModel, index); return isNotEmpty(fieldModel) ? formGroup.get(this.getPath(fieldModel)) : null; } - getFormControlByModel(formGroup: FormGroup, fieldModel: DynamicFormControlModel): AbstractControl { + getFormControlByModel(formGroup: UntypedFormGroup, fieldModel: DynamicFormControlModel): AbstractControl { return isNotEmpty(fieldModel) ? formGroup.get(this.getPath(fieldModel)) : null; } @@ -412,7 +412,7 @@ export class FormBuilderService extends DynamicFormService { * @param id id of model * @param formGroup FormGroup */ - addFormGroups(id: string, formGroup: FormGroup): void { + addFormGroups(id: string, formGroup: UntypedFormGroup): void { this.formGroups.set(id, formGroup); } diff --git a/src/app/shared/form/form.component.ts b/src/app/shared/form/form.component.ts index 086b5e1fd8..79cf8ad2c7 100644 --- a/src/app/shared/form/form.component.ts +++ b/src/app/shared/form/form.component.ts @@ -1,6 +1,6 @@ import { distinctUntilChanged, filter, map } from 'rxjs/operators'; import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; +import { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { Observable, Subscription } from 'rxjs'; import { @@ -68,7 +68,7 @@ export class FormComponent implements OnDestroy, OnInit { */ @Input() formModel: DynamicFormControlModel[]; @Input() parentFormModel: DynamicFormGroupModel | DynamicFormGroupModel[]; - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; @Input() formLayout = null as DynamicFormLayout; /* eslint-disable @angular-eslint/no-output-rename */ @@ -122,9 +122,9 @@ export class FormComponent implements OnDestroy, OnInit { })); }*/ - private getFormGroup(): FormGroup { + private getFormGroup(): UntypedFormGroup { if (!!this.parentFormModel) { - return this.formGroup.parent as FormGroup; + return this.formGroup.parent as UntypedFormGroup; } return this.formGroup; @@ -184,7 +184,7 @@ export class FormComponent implements OnDestroy, OnInit { const { fieldIndex } = error; let field: AbstractControl; if (!!this.parentFormModel) { - field = this.formBuilderService.getFormControlById(fieldId, formGroup.parent as FormGroup, formModel, fieldIndex); + field = this.formBuilderService.getFormControlById(fieldId, formGroup.parent as UntypedFormGroup, formModel, fieldIndex); } else { field = this.formBuilderService.getFormControlById(fieldId, formGroup, formModel, fieldIndex); } @@ -207,7 +207,7 @@ export class FormComponent implements OnDestroy, OnInit { const { fieldIndex } = error; let field: AbstractControl; if (!!this.parentFormModel) { - field = this.formBuilderService.getFormControlById(fieldId, formGroup.parent as FormGroup, formModel, fieldIndex); + field = this.formBuilderService.getFormControlById(fieldId, formGroup.parent as UntypedFormGroup, formModel, fieldIndex); } else { field = this.formBuilderService.getFormControlById(fieldId, formGroup, formModel, fieldIndex); } @@ -254,7 +254,7 @@ export class FormComponent implements OnDestroy, OnInit { onBlur(event: DynamicFormControlEvent): void { this.blur.emit(event); - const control: FormControl = event.control; + const control: UntypedFormControl = event.control; const fieldIndex: number = (event.context && event.context.index) ? event.context.index : 0; if (control.valid) { this.formService.removeError(this.formId, event.model.name, fieldIndex); @@ -280,7 +280,7 @@ export class FormComponent implements OnDestroy, OnInit { this.change.emit(event); } - const control: FormControl = event.control; + const control: UntypedFormControl = event.control; const fieldIndex: number = (event.context && event.context.index) ? event.context.index : 0; if (control.valid) { this.formService.removeError(this.formId, event.model.id, fieldIndex); @@ -314,7 +314,7 @@ export class FormComponent implements OnDestroy, OnInit { } removeItem($event, arrayContext: DynamicFormArrayModel, index: number): void { - const formArrayControl = this.formGroup.get(this.formBuilderService.getPath(arrayContext)) as FormArray; + const formArrayControl = this.formGroup.get(this.formBuilderService.getPath(arrayContext)) as UntypedFormArray; const event = this.getEvent($event, arrayContext, index, 'remove'); if (this.formBuilderService.isQualdropGroup(event.model as DynamicFormControlModel)) { // In case of qualdrop value remove event must be dispatched before removing the control from array @@ -329,7 +329,7 @@ export class FormComponent implements OnDestroy, OnInit { } insertItem($event, arrayContext: DynamicFormArrayModel, index: number): void { - const formArrayControl = this.formGroup.get(this.formBuilderService.getPath(arrayContext)) as FormArray; + const formArrayControl = this.formGroup.get(this.formBuilderService.getPath(arrayContext)) as UntypedFormArray; this.formBuilderService.insertFormArrayGroup(index, formArrayControl, arrayContext); this.addArrayItem.emit(this.getEvent($event, arrayContext, index, 'add')); this.formService.changeForm(this.formId, this.formModel); @@ -344,17 +344,17 @@ export class FormComponent implements OnDestroy, OnInit { protected getEvent($event: any, arrayContext: DynamicFormArrayModel, index: number, type: string): DynamicFormControlEvent { const context = arrayContext.groups[index]; const itemGroupModel = context.context; - let group = this.formGroup.get(itemGroupModel.id) as FormGroup; + let group = this.formGroup.get(itemGroupModel.id) as UntypedFormGroup; if (isNull(group)) { for (const key of Object.keys(this.formGroup.controls)) { - group = this.formGroup.controls[key].get(itemGroupModel.id) as FormGroup; + group = this.formGroup.controls[key].get(itemGroupModel.id) as UntypedFormGroup; if (isNotNull(group)) { break; } } } const model = context.group[0] as DynamicFormControlModel; - const control = group.controls[index] as FormControl; + const control = group.controls[index] as UntypedFormControl; return { $event, context, control, group, model, type }; } } diff --git a/src/app/shared/form/form.service.spec.ts b/src/app/shared/form/form.service.spec.ts index e565c8f219..57880ffc14 100644 --- a/src/app/shared/form/form.service.spec.ts +++ b/src/app/shared/form/form.service.spec.ts @@ -1,6 +1,6 @@ import { Store, StoreModule } from '@ngrx/store'; import { inject, TestBed, waitForAsync } from '@angular/core/testing'; -import { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { DynamicFormControlModel, DynamicFormGroupModel, DynamicInputModel } from '@ng-dynamic-forms/core'; @@ -22,7 +22,7 @@ describe('FormService test suite', () => { const formId = 'testForm'; let service: FormService; let builderService: FormBuilderService; - let formGroup: FormGroup; + let formGroup: UntypedFormGroup; const formModel: DynamicFormControlModel[] = [ new DynamicInputModel({ id: 'author', value: 'test' }), @@ -104,18 +104,18 @@ describe('FormService test suite', () => { .subscribe((state) => { state.forms = formState; }); - const author: AbstractControl = new FormControl('test'); - const title: AbstractControl = new FormControl(undefined, Validators.required); - const date: AbstractControl = new FormControl(undefined); - const description: AbstractControl = new FormControl(undefined); + const author: AbstractControl = new UntypedFormControl('test'); + const title: AbstractControl = new UntypedFormControl(undefined, Validators.required); + const date: AbstractControl = new UntypedFormControl(undefined); + const description: AbstractControl = new UntypedFormControl(undefined); - const addressLocation: FormGroup = new FormGroup({ - zipCode: new FormControl(undefined), - state: new FormControl(undefined), - city: new FormControl(undefined), + const addressLocation: UntypedFormGroup = new UntypedFormGroup({ + zipCode: new UntypedFormControl(undefined), + state: new UntypedFormControl(undefined), + city: new UntypedFormControl(undefined), }); - formGroup = new FormGroup({ author, title, date, description, addressLocation }); + formGroup = new UntypedFormGroup({ author, title, date, description, addressLocation }); controls = { author, title, date, description , addressLocation }; service = new FormService(builderService, store); }) diff --git a/src/app/shared/form/form.service.ts b/src/app/shared/form/form.service.ts index 2dbf78f565..bf316daaed 100644 --- a/src/app/shared/form/form.service.ts +++ b/src/app/shared/form/form.service.ts @@ -1,6 +1,6 @@ import { distinctUntilChanged, filter, map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; -import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms'; +import { AbstractControl, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { Observable } from 'rxjs'; import { select, Store } from '@ngrx/store'; @@ -96,13 +96,13 @@ export class FormService { /** * Method to validate form's fields */ - public validateAllFormFields(formGroup: FormGroup | FormArray) { + public validateAllFormFields(formGroup: UntypedFormGroup | UntypedFormArray) { Object.keys(formGroup.controls).forEach((field) => { const control = formGroup.get(field); - if (control instanceof FormControl) { + if (control instanceof UntypedFormControl) { control.markAsTouched({ onlySelf: true }); control.markAsDirty({ onlySelf: true }); - } else if (control instanceof FormGroup || control instanceof FormArray) { + } else if (control instanceof UntypedFormGroup || control instanceof UntypedFormArray) { this.validateAllFormFields(control); } }); @@ -112,14 +112,14 @@ export class FormService { * Check if form group has an invalid form control * @param formGroup The form group to check */ - public hasValidationErrors(formGroup: FormGroup | FormArray): boolean { + public hasValidationErrors(formGroup: UntypedFormGroup | UntypedFormArray): boolean { let hasErrors = false; const fields: string[] = Object.keys(formGroup.controls); for (const field of fields) { const control = formGroup.get(field); - if (control instanceof FormControl) { + if (control instanceof UntypedFormControl) { hasErrors = !control.valid && control.touched; - } else if (control instanceof FormGroup || control instanceof FormArray) { + } else if (control instanceof UntypedFormGroup || control instanceof UntypedFormArray) { hasErrors = this.hasValidationErrors(control); } if (hasErrors) { @@ -162,7 +162,7 @@ export class FormService { } // if the field in question is a concat group, pass down the error to its fields - if (field instanceof FormGroup && model instanceof DynamicFormGroupModel && this.formBuilderService.isConcatGroup(model)) { + if (field instanceof UntypedFormGroup && model instanceof DynamicFormGroupModel && this.formBuilderService.isConcatGroup(model)) { model.group.forEach((subModel) => { const subField = field.controls[subModel.id]; @@ -183,7 +183,7 @@ export class FormService { } // if the field in question is a concat group, clear the error from its fields - if (field instanceof FormGroup && model instanceof DynamicFormGroupModel && this.formBuilderService.isConcatGroup(model)) { + if (field instanceof UntypedFormGroup && model instanceof DynamicFormGroupModel && this.formBuilderService.isConcatGroup(model)) { model.group.forEach((subModel) => { const subField = field.controls[subModel.id]; @@ -194,7 +194,7 @@ export class FormService { field.markAsUntouched(); } - public resetForm(formGroup: FormGroup, groupModel: DynamicFormControlModel[], formId: string) { + public resetForm(formGroup: UntypedFormGroup, groupModel: DynamicFormControlModel[], formId: string) { this.formBuilderService.clearAllModelsValue(groupModel); formGroup.reset(); this.store.dispatch(new FormChangeAction(formId, formGroup.value)); diff --git a/src/app/shared/form/number-picker/number-picker.component.ts b/src/app/shared/form/number-picker/number-picker.component.ts index 0df1e050cd..82240c41d1 100644 --- a/src/app/shared/form/number-picker/number-picker.component.ts +++ b/src/app/shared/form/number-picker/number-picker.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, SimpleChanges, } from '@angular/core'; -import { ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { ControlValueAccessor, UntypedFormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms'; import { isEmpty } from '../../empty.util'; @Component({ @@ -31,7 +31,7 @@ export class NumberPickerComponent implements OnInit, ControlValueAccessor { startValue: number; - constructor(private fb: FormBuilder, private cd: ChangeDetectorRef) { + constructor(private fb: UntypedFormBuilder, private cd: ChangeDetectorRef) { } ngOnInit() { diff --git a/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.ts b/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.ts index d845df0555..050b3296c5 100644 --- a/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.ts +++ b/src/app/shared/input-suggestions/validation-suggestions/validation-suggestions.component.ts @@ -1,5 +1,5 @@ import { Component, forwardRef, Input, OnInit } from '@angular/core'; -import { FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; import { ObjectUpdatesService } from '../../../core/data/object-updates/object-updates.service'; import { MetadatumViewModel } from '../../../core/shared/metadata.models'; import { MetadataFieldValidator } from '../../utils/metadatafield-validator.directive'; @@ -26,7 +26,7 @@ import { InputSuggestion } from '../input-suggestions.model'; */ export class ValidationSuggestionsComponent extends InputSuggestionsComponent implements OnInit { - form: FormGroup; + form: UntypedFormGroup; /** * The current url of this page @@ -52,8 +52,8 @@ export class ValidationSuggestionsComponent extends InputSuggestionsComponent im } ngOnInit() { - this.form = new FormGroup({ - metadataNameField: new FormControl(this._value, { + this.form = new UntypedFormGroup({ + metadataNameField: new UntypedFormControl(this._value, { asyncValidators: [this.metadataFieldValidator.validate.bind(this.metadataFieldValidator)], validators: [Validators.required] }) diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts b/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts index 5238482770..5d9370f204 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts +++ b/src/app/shared/log-in/methods/password/log-in-password.component.spec.ts @@ -1,6 +1,6 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { provideMockStore } from '@ngrx/store/testing'; @@ -95,7 +95,7 @@ describe('LogInPasswordComponent', () => { it('should create a FormGroup comprised of FormControls', () => { fixture.detectChanges(); - expect(component.form instanceof FormGroup).toBe(true); + expect(component.form instanceof UntypedFormGroup).toBe(true); }); it('should authenticate', () => { diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.ts b/src/app/shared/log-in/methods/password/log-in-password.component.ts index e4a92ded29..22b3b13130 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.ts +++ b/src/app/shared/log-in/methods/password/log-in-password.component.ts @@ -1,6 +1,6 @@ import { map } from 'rxjs/operators'; import { Component, Inject, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { select, Store } from '@ngrx/store'; import { Observable } from 'rxjs'; @@ -63,7 +63,7 @@ export class LogInPasswordComponent implements OnInit { * The authentication form. * @type {FormGroup} */ - public form: FormGroup; + public form: UntypedFormGroup; /** * @constructor @@ -79,7 +79,7 @@ export class LogInPasswordComponent implements OnInit { @Inject('isStandalonePage') public isStandalonePage: boolean, private authService: AuthService, private hardRedirectService: HardRedirectService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private store: Store ) { this.authMethod = injectedAuthMethodModel; diff --git a/src/app/shared/mocks/form-builder-service.mock.ts b/src/app/shared/mocks/form-builder-service.mock.ts index f9d9dffdcb..eaaeb60829 100644 --- a/src/app/shared/mocks/form-builder-service.mock.ts +++ b/src/app/shared/mocks/form-builder-service.mock.ts @@ -1,14 +1,14 @@ import { FormBuilderService } from '../form/builder/form-builder.service'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import {DsDynamicInputModel} from '../form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; export function getMockFormBuilderService(): FormBuilderService { return jasmine.createSpyObj('FormBuilderService', { modelFromConfiguration: [], - createFormGroup: new FormGroup({}), + createFormGroup: new UntypedFormGroup({}), getValueFromModel: {}, - getFormControlById: new FormControl(), + getFormControlById: new UntypedFormControl(), hasMappedGroupValue: false, findById: {}, getPath: ['test', 'path'], diff --git a/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.spec.ts b/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.spec.ts index b3ea5e1258..2d369ae014 100644 --- a/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.spec.ts +++ b/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.spec.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; -import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, ReactiveFormsModule } from '@angular/forms'; import { By } from '@angular/platform-browser'; import { NgbModal, NgbModule } from '@ng-bootstrap/ng-bootstrap'; @@ -25,7 +25,7 @@ import { ClaimedDeclinedTaskSearchResult } from '../../../object-collection/shar let component: ClaimedTaskActionsRejectComponent; let fixture: ComponentFixture; -let formBuilder: FormBuilder; +let formBuilder: UntypedFormBuilder; let modalService: NgbModal; const searchService = getMockSearchService(); @@ -63,7 +63,7 @@ describe('ClaimedTaskActionsRejectComponent', () => { { provide: SearchService, useValue: searchService }, { provide: RequestService, useValue: requestService }, { provide: PoolTaskDataService, useValue: mockPoolTaskDataService }, - FormBuilder, + UntypedFormBuilder, NgbModal, ], schemas: [NO_ERRORS_SCHEMA] @@ -72,7 +72,7 @@ describe('ClaimedTaskActionsRejectComponent', () => { }).compileComponents(); fixture = TestBed.createComponent(ClaimedTaskActionsRejectComponent); component = fixture.componentInstance; - formBuilder = TestBed.inject(FormBuilder); + formBuilder = TestBed.inject(UntypedFormBuilder); modalService = TestBed.inject(NgbModal); component.object = object; component.modalRef = modalService.open('ok'); @@ -82,7 +82,7 @@ describe('ClaimedTaskActionsRejectComponent', () => { it('should init reject form properly', () => { expect(component.rejectForm).toBeDefined(); - expect(component.rejectForm instanceof FormGroup).toBeTruthy(); + expect(component.rejectForm instanceof UntypedFormGroup).toBeTruthy(); expect(component.rejectForm.controls.reason).toBeDefined(); }); diff --git a/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.ts b/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.ts index 31514613ce..7d68af1b8f 100644 --- a/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.ts +++ b/src/app/shared/mydspace-actions/claimed-task/reject/claimed-task-actions-reject.component.ts @@ -1,5 +1,5 @@ import { Component, Injector, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { ClaimedTaskActionsAbstractComponent } from '../abstract/claimed-task-actions-abstract.component'; @@ -34,7 +34,7 @@ export class ClaimedTaskActionsRejectComponent extends ClaimedTaskActionsAbstrac /** * The reject form group */ - public rejectForm: FormGroup; + public rejectForm: UntypedFormGroup; /** * Reference to NgbModal @@ -47,7 +47,7 @@ export class ClaimedTaskActionsRejectComponent extends ClaimedTaskActionsAbstrac protected translate: TranslateService, protected searchService: SearchService, protected requestService: RequestService, - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private modalService: NgbModal) { super(injector, router, notificationsService, translate, searchService, requestService); } diff --git a/src/app/shared/starts-with/starts-with-abstract.component.ts b/src/app/shared/starts-with/starts-with-abstract.component.ts index 3b35a11269..26140dcc6d 100644 --- a/src/app/shared/starts-with/starts-with-abstract.component.ts +++ b/src/app/shared/starts-with/starts-with-abstract.component.ts @@ -1,7 +1,7 @@ import { Component, Inject, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Subscription } from 'rxjs'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { hasValue } from '../empty.util'; import { PaginationService } from '../../core/pagination/pagination.service'; @@ -21,7 +21,7 @@ export abstract class StartsWithAbstractComponent implements OnInit, OnDestroy { /** * The formdata controlling the StartsWith input */ - formData: FormGroup; + formData: UntypedFormGroup; /** * List of subscriptions @@ -43,8 +43,8 @@ export abstract class StartsWithAbstractComponent implements OnInit, OnDestroy { } }) ); - this.formData = new FormGroup({ - startsWith: new FormControl() + this.formData = new UntypedFormGroup({ + startsWith: new UntypedFormControl() }); } diff --git a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts index 90f2e51e63..992e0de18d 100644 --- a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts +++ b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CommonModule } from '@angular/common'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, ReactiveFormsModule } from '@angular/forms'; import { DebugElement, NO_ERRORS_SCHEMA } from '@angular/core'; import { NgbActiveModal, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; @@ -120,13 +120,13 @@ describe('SubscriptionModalComponent', () => { }); it('should edit an existing subscription', () => { - component.subscriptionForm = new FormGroup({}); + component.subscriptionForm = new UntypedFormGroup({}); for (let t of testTypes) { - const formGroup = new FormGroup({ - subscriptionId: new FormControl(testSubscriptionId), - frequencies: new FormGroup({ - f: new FormControl(false), - g: new FormControl(true), + const formGroup = new UntypedFormGroup({ + subscriptionId: new UntypedFormControl(testSubscriptionId), + frequencies: new UntypedFormGroup({ + f: new UntypedFormControl(false), + g: new UntypedFormControl(true), }) }); component.subscriptionForm.addControl(t, formGroup); @@ -143,13 +143,13 @@ describe('SubscriptionModalComponent', () => { }); it('should create a new subscription', () => { - component.subscriptionForm = new FormGroup({}); + component.subscriptionForm = new UntypedFormGroup({}); for (let t of testTypes) { - const formGroup = new FormGroup({ - subscriptionId: new FormControl(undefined), - frequencies: new FormGroup({ - f: new FormControl(false), - g: new FormControl(true), + const formGroup = new UntypedFormGroup({ + subscriptionId: new UntypedFormControl(undefined), + frequencies: new UntypedFormGroup({ + f: new UntypedFormControl(false), + g: new UntypedFormControl(true), }) }); component.subscriptionForm.addControl(t, formGroup); diff --git a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.ts b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.ts index cd37a2bb02..f2fb66887f 100644 --- a/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.ts +++ b/src/app/shared/subscriptions/subscription-modal/subscription-modal.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { BehaviorSubject, combineLatest, from, shareReplay } from 'rxjs'; import { map, mergeMap, take, tap } from 'rxjs/operators'; @@ -57,7 +57,7 @@ export class SubscriptionModalComponent implements OnInit { /** * Reactive form group that will be used to add/edit subscriptions */ - subscriptionForm: FormGroup; + subscriptionForm: UntypedFormGroup; /** * Used to show validation errors when user submits @@ -84,7 +84,7 @@ export class SubscriptionModalComponent implements OnInit { @Output() updateSubscription: EventEmitter = new EventEmitter(); constructor( - private formBuilder: FormBuilder, + private formBuilder: UntypedFormBuilder, private modalService: NgbModal, private notificationsService: NotificationsService, private subscriptionService: SubscriptionsDataService, @@ -121,13 +121,13 @@ export class SubscriptionModalComponent implements OnInit { } initFormByAllSubscriptions(): void { - this.subscriptionForm = new FormGroup({}); + this.subscriptionForm = new UntypedFormGroup({}); for (let t of this.subscriptionDefaultTypes) { - const formGroup = new FormGroup({}); + const formGroup = new UntypedFormGroup({}); formGroup.addControl('subscriptionId', this.formBuilder.control('')); formGroup.addControl('frequencies', this.formBuilder.group({})); for (let f of this.frequencyDefaultValues) { - (formGroup.controls.frequencies as FormGroup).addControl(f, this.formBuilder.control(false)); + (formGroup.controls.frequencies as UntypedFormGroup).addControl(f, this.formBuilder.control(false)); } this.subscriptionForm.addControl(t, formGroup); } @@ -139,13 +139,13 @@ export class SubscriptionModalComponent implements OnInit { * If the subscription is passed start the form with the information of subscription */ initFormByGivenSubscription(): void { - const formGroup = new FormGroup({}); + const formGroup = new UntypedFormGroup({}); formGroup.addControl('subscriptionId', this.formBuilder.control(this.subscription.id)); formGroup.addControl('frequencies', this.formBuilder.group({})); - (formGroup.get('frequencies') as FormGroup).addValidators(Validators.required); + (formGroup.get('frequencies') as UntypedFormGroup).addValidators(Validators.required); for (let f of this.frequencyDefaultValues) { const value = findIndex(this.subscription.subscriptionParameterList, ['value', f]) !== -1; - (formGroup.controls.frequencies as FormGroup).addControl(f, this.formBuilder.control(value)); + (formGroup.controls.frequencies as UntypedFormGroup).addControl(f, this.formBuilder.control(value)); } this.subscriptionForm = this.formBuilder.group({ @@ -167,11 +167,11 @@ export class SubscriptionModalComponent implements OnInit { this.showDeleteInfo$.next(true); for (let subscription of res.page) { const type = subscription.subscriptionType; - const subscriptionGroup: FormGroup = this.subscriptionForm.get(type) as FormGroup; + const subscriptionGroup: UntypedFormGroup = this.subscriptionForm.get(type) as UntypedFormGroup; if (isNotEmpty(subscriptionGroup)) { subscriptionGroup.controls.subscriptionId.setValue(subscription.id); for (let parameter of subscription.subscriptionParameterList.filter((p) => p.name === 'frequency')) { - (subscriptionGroup.controls.frequencies as FormGroup).controls[parameter.value]?.setValue(true); + (subscriptionGroup.controls.frequencies as UntypedFormGroup).controls[parameter.value]?.setValue(true); } } } @@ -194,12 +194,12 @@ export class SubscriptionModalComponent implements OnInit { const subscriptionsToBeUpdated = []; subscriptionTypes.forEach((subscriptionType: string) => { - const subscriptionGroup: FormGroup = this.subscriptionForm.controls[subscriptionType] as FormGroup; + const subscriptionGroup: UntypedFormGroup = this.subscriptionForm.controls[subscriptionType] as UntypedFormGroup; if (subscriptionGroup.touched && subscriptionGroup.dirty) { const body = this.createBody( subscriptionGroup.controls.subscriptionId.value, subscriptionType, - subscriptionGroup.controls.frequencies as FormGroup + subscriptionGroup.controls.frequencies as UntypedFormGroup ); if (isNotEmpty(body.id)) { @@ -257,7 +257,7 @@ export class SubscriptionModalComponent implements OnInit { } - private createBody(subscriptionId: string, subscriptionType: string, frequencies: FormGroup): Partial { + private createBody(subscriptionId: string, subscriptionType: string, frequencies: UntypedFormGroup): Partial { const body = { id: (isNotEmpty(subscriptionId) ? subscriptionId : null), subscriptionType: subscriptionType, diff --git a/src/app/shared/testing/form-event.stub.ts b/src/app/shared/testing/form-event.stub.ts index 30436a82fc..908d0df746 100644 --- a/src/app/shared/testing/form-event.stub.ts +++ b/src/app/shared/testing/form-event.stub.ts @@ -1,4 +1,4 @@ -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { DynamicCheckboxModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; export const accessConditionChangeEvent = { @@ -16,7 +16,7 @@ export const accessConditionChangeEvent = { type: 'change', }, context: null, - control: new FormControl({ + control: new UntypedFormControl({ errors: null, pristine: false, status: 'VALID', @@ -26,7 +26,7 @@ export const accessConditionChangeEvent = { valueChanges: { _isScalar: false, observers: [], closed: false, isStopped: false, hasError: false }, _updateOn: 'change', }), - group: new FormGroup({}), + group: new UntypedFormGroup({}), model: new DynamicSelectModel({ additional: null, asyncValidators: null, @@ -66,7 +66,7 @@ export const checkboxChangeEvent = { type: 'change', }, context: null, - control: new FormControl({ + control: new UntypedFormControl({ errors: null, pristine: false, status: 'VALID', @@ -76,7 +76,7 @@ export const checkboxChangeEvent = { valueChanges: { _isScalar: false, observers: [], closed: false, isStopped: false, hasError: false }, _updateOn: 'change', }), - group: new FormGroup({}), + group: new UntypedFormGroup({}), model: new DynamicCheckboxModel({ additional: null, asyncValidators: null, diff --git a/src/app/shared/utils/in-list-validator.directive.ts b/src/app/shared/utils/in-list-validator.directive.ts index 42ff7da1fd..fef0c2f962 100644 --- a/src/app/shared/utils/in-list-validator.directive.ts +++ b/src/app/shared/utils/in-list-validator.directive.ts @@ -1,5 +1,5 @@ import { Directive, Input } from '@angular/core'; -import { FormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms'; +import { UntypedFormControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms'; import { inListValidator } from './validator.functions'; /** @@ -23,7 +23,7 @@ export class InListValidator implements Validator { * The function that checks if the form control's value is currently valid * @param c The FormControl */ - validate(c: FormControl): ValidationErrors | null { + validate(c: UntypedFormControl): ValidationErrors | null { return inListValidator(this.dsInListValidator)(c); } } diff --git a/src/app/shared/utils/require-file.validator.ts b/src/app/shared/utils/require-file.validator.ts index 7902bfec28..ef41ad4309 100644 --- a/src/app/shared/utils/require-file.validator.ts +++ b/src/app/shared/utils/require-file.validator.ts @@ -1,5 +1,5 @@ import {Directive} from '@angular/core'; -import {NG_VALIDATORS, Validator, FormControl} from '@angular/forms'; +import {NG_VALIDATORS, Validator, UntypedFormControl} from '@angular/forms'; @Directive({ // eslint-disable-next-line @angular-eslint/directive-selector @@ -12,11 +12,11 @@ import {NG_VALIDATORS, Validator, FormControl} from '@angular/forms'; * Validator directive to validate if a file is selected */ export class FileValidator implements Validator { - static validate(c: FormControl): {[key: string]: any} { + static validate(c: UntypedFormControl): {[key: string]: any} { return c.value == null || c.value.length === 0 ? { required : true } : null; } - validate(c: FormControl): {[key: string]: any} { + validate(c: UntypedFormControl): {[key: string]: any} { return FileValidator.validate(c); } } diff --git a/src/app/submission/sections/accesses/section-accesses.component.ts b/src/app/submission/sections/accesses/section-accesses.component.ts index 25106f3ba8..451fc73670 100644 --- a/src/app/submission/sections/accesses/section-accesses.component.ts +++ b/src/app/submission/sections/accesses/section-accesses.component.ts @@ -1,6 +1,6 @@ import { SectionAccessesService } from './section-accesses.service'; import { Component, Inject, ViewChild } from '@angular/core'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { filter, map, mergeMap, take } from 'rxjs/operators'; import { combineLatest, Observable, of, Subscription } from 'rxjs'; @@ -186,8 +186,8 @@ export class SubmissionSectionAccessesComponent extends SectionModelComponent { if (event.model.id === FORM_ACCESS_CONDITION_TYPE_CONFIG.id) { // Clear previous state when switching through different access conditions - const startDateControl: FormControl = event.control.parent.get('startDate') as FormControl; - const endDateControl: FormControl = event.control.parent.get('endDate') as FormControl; + const startDateControl: UntypedFormControl = event.control.parent.get('startDate') as UntypedFormControl; + const endDateControl: UntypedFormControl = event.control.parent.get('endDate') as UntypedFormControl; startDateControl?.markAsUntouched(); endDateControl?.markAsUntouched(); diff --git a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts index 195d291530..83cde97bcb 100644 --- a/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts +++ b/src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core'; -import { FormControl } from '@angular/forms'; +import { UntypedFormControl } from '@angular/forms'; import { DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER, @@ -240,13 +240,13 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit { * @param control * The [[FormControl]] object */ - public setOptions(model: DynamicFormControlModel, control: FormControl) { + public setOptions(model: DynamicFormControlModel, control: UntypedFormControl) { let accessCondition: AccessConditionOption = null; this.availableAccessConditionOptions.filter((element) => element.name === control.value) .forEach((element) => accessCondition = element ); if (isNotEmpty(accessCondition)) { - const startDateControl: FormControl = control.parent.get('startDate') as FormControl; - const endDateControl: FormControl = control.parent.get('endDate') as FormControl; + const startDateControl: UntypedFormControl = control.parent.get('startDate') as UntypedFormControl; + const endDateControl: UntypedFormControl = control.parent.get('endDate') as UntypedFormControl; // Clear previous state startDateControl?.markAsUntouched(); diff --git a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts index 23c9fb75f9..eaff12c169 100644 --- a/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts +++ b/src/app/system-wide-alert/alert-form/system-wide-alert-form.component.ts @@ -6,7 +6,7 @@ import { PaginatedList } from '../../core/data/paginated-list.model'; import { SystemWideAlert } from '../system-wide-alert.model'; import { hasValue, isNotEmpty } from '../../shared/empty.util'; import { BehaviorSubject, Observable } from 'rxjs'; -import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap'; import { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz'; import { RemoteData } from '../../core/data/remote-data'; @@ -39,7 +39,7 @@ export class SystemWideAlertFormComponent implements OnInit { /** * The form group representing the system-wide alert */ - alertForm: FormGroup; + alertForm: UntypedFormGroup; /** * Date object to store the countdown date part @@ -116,11 +116,11 @@ export class SystemWideAlertFormComponent implements OnInit { * Creates the form with empty values */ createForm() { - this.alertForm = new FormBuilder().group({ - formMessage: new FormControl('', { + this.alertForm = new UntypedFormBuilder().group({ + formMessage: new UntypedFormControl('', { validators: [Validators.required], }), - formActive: new FormControl(false), + formActive: new UntypedFormControl(false), } ); this.setDateTime(new Date()); diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.ts index 8a84801fda..ebf1ead64a 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-rating/advanced-workflow-action-rating.component.ts @@ -3,7 +3,7 @@ import { rendersAdvancedWorkflowTaskOption } from '../../../shared/mydspace-actions/claimed-task/switcher/claimed-task-actions-decorator'; import { AdvancedWorkflowActionComponent } from '../advanced-workflow-action/advanced-workflow-action.component'; -import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms'; import { WorkflowAction } from '../../../core/tasks/models/workflow-action-object.model'; import { RatingAdvancedWorkflowInfo } from '../../../core/tasks/models/rating-advanced-workflow-info.model'; @@ -22,13 +22,13 @@ export const ADVANCED_WORKFLOW_ACTION_RATING = 'scorereviewaction'; }) export class AdvancedWorkflowActionRatingComponent extends AdvancedWorkflowActionComponent implements OnInit { - ratingForm: FormGroup; + ratingForm: UntypedFormGroup; ngOnInit(): void { super.ngOnInit(); - this.ratingForm = new FormGroup({ - review: new FormControl(''), - rating: new FormControl(0, Validators.min(1)), + this.ratingForm = new UntypedFormGroup({ + review: new UntypedFormControl(''), + rating: new UntypedFormControl(0, Validators.min(1)), }); } diff --git a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.ts b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.ts index 7112a30543..460f163b70 100644 --- a/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.ts +++ b/src/app/workflowitems-edit-page/advanced-workflow-action/advanced-workflow-action-select-reviewer/reviewers-list/reviewers-list.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChanges, EventEmitter, Output } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Router } from '@angular/router'; import { TranslateService } from '@ngx-translate/core'; import { EPersonDataService } from '../../../../core/eperson/eperson-data.service'; @@ -55,7 +55,7 @@ export class ReviewersListComponent extends MembersListComponent implements OnIn public ePersonDataService: EPersonDataService, translateService: TranslateService, notificationsService: NotificationsService, - formBuilder: FormBuilder, + formBuilder: UntypedFormBuilder, paginationService: PaginationService, router: Router) { super(groupService, ePersonDataService, translateService, notificationsService, formBuilder, paginationService, router); diff --git a/yarn.lock b/yarn.lock index abb5e4c4d2..00dafb2c9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,9 +2,17 @@ # yarn lockfile v1 -"@ampproject/remapping@2.2.0", "@ampproject/remapping@^2.0.0", "@ampproject/remapping@^2.1.0": +"@ampproject/remapping@^2.1.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@ampproject/remapping@2.2.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: "@jridgewell/gen-mapping" "^0.1.0" @@ -12,7 +20,7 @@ "@angular-builders/custom-webpack@~13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-builders/custom-webpack/-/custom-webpack-13.1.0.tgz#854f1276204a6d3d52ad9bdab45c6ac362a158c8" + resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-13.1.0.tgz" integrity sha512-qhtnAv1i7agk14zeKZZfXjrckYt37OZ+3tsTBLhf3ZFbwREK8L1SNi8xhZ1j1JLGsf2Dp0GEcZrSYeFDweo0WA== dependencies: "@angular-devkit/architect" ">=0.1300.0 < 0.1400.0" @@ -23,31 +31,31 @@ tsconfig-paths "^3.9.0" webpack-merge "^5.7.3" -"@angular-devkit/architect@0.1303.10", "@angular-devkit/architect@>=0.1300.0 < 0.1400.0", "@angular-devkit/architect@^0.1303.0": - version "0.1303.10" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1303.10.tgz#a79e749e27326151c507d36dbd3c396a0f417a63" - integrity sha512-A8blp98GY9Lg5RdgZ4M/nT0DhWsFv+YikC6+ebJsUTn/L06GcQNhyZKGCwB69S4Xe/kcYJgKpI2nAYnOLDpJlQ== - dependencies: - "@angular-devkit/core" "13.3.10" - rxjs "6.6.7" - "@angular-devkit/architect@^0.1202.10": version "0.1202.18" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1202.18.tgz#64feaf5015efb688ee9d3876bd630eca340cdf14" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.18.tgz" integrity sha512-C4ASKe+xBjl91MJyHDLt3z7ICPF9FU6B0CeJ1phwrlSHK9lmFG99WGxEj/Tc82+vHyPhajqS5XJ38KyVAPBGzA== dependencies: "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/build-angular@^13.0.0", "@angular-devkit/build-angular@~13.3.10": - version "13.3.10" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-13.3.10.tgz#746be990238f6a3af08c54104a17cfc69e90593d" - integrity sha512-eKMjwr7XHlh/lYqYvdIrHZfVPM8fCxP4isKzCDiOjsJ+4fl+Ycq8RvjtOLntBN6A1U8h93rZNE+VOTEGCJcGig== +"@angular-devkit/architect@^0.1303.0", "@angular-devkit/architect@>=0.1300.0 < 0.1400.0", "@angular-devkit/architect@0.1303.11": + version "0.1303.11" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.11.tgz" + integrity sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg== + dependencies: + "@angular-devkit/core" "13.3.11" + rxjs "6.6.7" + +"@angular-devkit/build-angular@^13.0.0", "@angular-devkit/build-angular@^13.3.4", "@angular-devkit/build-angular@~13.3.10": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.11.tgz" + integrity sha512-H4tpdmRu+6HSjsL+swV/8qj8v0YSDq6lpb31EYajlBB6fDj+YJQvHgaWvexSWl6eIqgDKXcujhNUjNi1enjwHw== dependencies: "@ampproject/remapping" "2.2.0" - "@angular-devkit/architect" "0.1303.10" - "@angular-devkit/build-webpack" "0.1303.10" - "@angular-devkit/core" "13.3.10" + "@angular-devkit/architect" "0.1303.11" + "@angular-devkit/build-webpack" "0.1303.11" + "@angular-devkit/core" "13.3.11" "@babel/core" "7.16.12" "@babel/generator" "7.16.8" "@babel/helper-annotate-as-pure" "7.16.7" @@ -58,7 +66,7 @@ "@babel/runtime" "7.16.7" "@babel/template" "7.16.7" "@discoveryjs/json-ext" "0.5.6" - "@ngtools/webpack" "13.3.10" + "@ngtools/webpack" "13.3.11" ansi-colors "4.1.1" babel-loader "8.2.5" babel-plugin-istanbul "6.1.1" @@ -103,7 +111,7 @@ text-table "0.2.0" tree-kill "1.2.2" tslib "2.3.1" - webpack "5.70.0" + webpack "5.76.1" webpack-dev-middleware "5.3.0" webpack-dev-server "4.7.3" webpack-merge "5.8.0" @@ -111,17 +119,17 @@ optionalDependencies: esbuild "0.14.22" -"@angular-devkit/build-webpack@0.1303.10": - version "0.1303.10" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1303.10.tgz#a1e06c54f60e19982ae408d0b21822b5e299472c" - integrity sha512-nthTy6r4YQQTrvOpOS3dqjoJog/SL9Hn5YLytqnEp2r2he5evYsKV2Jtqi49/VgW1ohrGzw+bI0c3dUGKweyfw== +"@angular-devkit/build-webpack@0.1303.11": + version "0.1303.11" + resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.11.tgz" + integrity sha512-599pWAQLq7i/fmEZLb7PaNU6nmPC3EZbJk1nU/UBcpx7FWs9e0o2XQE2PCAs0buqtQxVjSgY6kMO8ex5dUmgUQ== dependencies: - "@angular-devkit/architect" "0.1303.10" + "@angular-devkit/architect" "0.1303.11" rxjs "6.6.7" -"@angular-devkit/core@12.2.18", "@angular-devkit/core@^12.2.17": +"@angular-devkit/core@^12.2.17", "@angular-devkit/core@12.2.18": version "12.2.18" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-12.2.18.tgz#6c530658b59f625388986fc73e4c4f966269725a" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" integrity sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww== dependencies: ajv "8.6.2" @@ -131,10 +139,10 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@13.3.10", "@angular-devkit/core@^13.0.0", "@angular-devkit/core@^13.3.4": - version "13.3.10" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-13.3.10.tgz#08d43d8d7723fb31faadac2d2d84ccaa4d3144d2" - integrity sha512-NSjyrccES+RkVL/wt1t1jNmJOV9z5H4/DtVjJQbAt/tDE5Mo0ygnhELd/QiUmjVfzfSkhr75LqQD8NtURoGBwQ== +"@angular-devkit/core@^13.0.0", "@angular-devkit/core@^13.3.4", "@angular-devkit/core@13.3.11": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz" + integrity sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w== dependencies: ajv "8.9.0" ajv-formats "2.1.1" @@ -143,21 +151,21 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/schematics@12.2.18", "@angular-devkit/schematics@^12.2.17": +"@angular-devkit/schematics@^12.2.17", "@angular-devkit/schematics@12.2.18": version "12.2.18" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-12.2.18.tgz#22de79ff820ed484e6edccfac30a9f6b0562842e" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" integrity sha512-bZ9NS5PgoVfetRC6WeQBHCY5FqPZ9y2TKHUo12sOB2YSL3tgWgh1oXyP8PtX34gasqsLjNULxEQsAQYEsiX/qQ== dependencies: "@angular-devkit/core" "12.2.18" ora "5.4.1" rxjs "6.6.7" -"@angular-devkit/schematics@13.3.10": - version "13.3.10" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-13.3.10.tgz#d182b0da728669d11ffc0b0710bed358f008de2d" - integrity sha512-/G0xInGBfFiJJQET3nKMe8V7Ny+fcxAZsXxFuOpuH2jfKqty9JMmuJw6ll5qEP0h3NnKPsF+9J1Gvq8Bmb4uDQ== +"@angular-devkit/schematics@13.3.11": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz" + integrity sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg== dependencies: - "@angular-devkit/core" "13.3.10" + "@angular-devkit/core" "13.3.11" jsonc-parser "3.0.0" magic-string "0.25.7" ora "5.4.1" @@ -165,19 +173,19 @@ "@angular-eslint/builder@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/builder/-/builder-13.1.0.tgz#5351ab74dce519e5605c0cddc84e9ff1dc014eb9" + resolved "https://registry.npmjs.org/@angular-eslint/builder/-/builder-13.1.0.tgz" integrity sha512-RdyeetctnipVdCBrU/mipJ2XKiLC1yGmK1Sfbbgwu0s49CAdOArY/b+b8OU3yyy4EO1EGKQMlzs6F3wTYgiZCA== dependencies: "@nrwl/devkit" "13.1.3" "@angular-eslint/bundled-angular-compiler@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.1.0.tgz#5806625096441050d9b39b01d176f38d7549e9bc" + resolved "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.1.0.tgz" integrity sha512-0VSAZ3zrHkKdbvogQ4GLSf+lKojtPL3LXLlvXU9xNgNsqw68+gSNwaWd595tXoQCmpwWpTerKUbyIsGnPA7EYA== "@angular-eslint/eslint-plugin-template@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-13.1.0.tgz#b5b8cc839c5c32d5bd55ba47bb58a80c0c4c4c42" + resolved "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-13.1.0.tgz" integrity sha512-ceZAMjufE58aduOW/UwjrbCRWocYC0zOEJ2jUkPt6jlL8yzc+SC6UitO0VmMgUsCizHueav5/3gKy05xqwk/CA== dependencies: "@angular-eslint/bundled-angular-compiler" "13.1.0" @@ -187,7 +195,7 @@ "@angular-eslint/eslint-plugin@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/eslint-plugin/-/eslint-plugin-13.1.0.tgz#cb3a1d4dfff5334459c7f3b4b3a124c84673b833" + resolved "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-13.1.0.tgz" integrity sha512-WiggBWPhhpSjcYVHJiawCduCsydM/RPudUE8zxv0Nmj/APuzNgvUr6E//uYTrhNv9EIJoZutRovw7R4Y/yXj4Q== dependencies: "@angular-eslint/utils" "13.1.0" @@ -195,7 +203,7 @@ "@angular-eslint/schematics@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/schematics/-/schematics-13.1.0.tgz#2d53e55db0f78460f8f79c64c42579ddbc93d8a1" + resolved "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-13.1.0.tgz" integrity sha512-/gVtkRP09cGhnUF3tr0phwNA5/ml94V3cqO8X4Z4QmyAaIwxuOJ0mJvWrVN7aurURxh9WoeWD/HXOvtC5igtpQ== dependencies: "@angular-eslint/eslint-plugin" "13.1.0" @@ -206,7 +214,7 @@ "@angular-eslint/template-parser@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/template-parser/-/template-parser-13.1.0.tgz#5161dc061610212b730d929de9b3d7d365de8335" + resolved "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-13.1.0.tgz" integrity sha512-gKV+kms+kYm1HdToH3j4HL1RrjvMHscVkhwjoV1WbJColnfDivVAZ6/5/J92/A/8r7vJptQkftsbiaGKDyg47w== dependencies: "@angular-eslint/bundled-angular-compiler" "13.1.0" @@ -214,37 +222,37 @@ "@angular-eslint/utils@13.1.0": version "13.1.0" - resolved "https://registry.yarnpkg.com/@angular-eslint/utils/-/utils-13.1.0.tgz#3023c0c66d02a5e80dbcf5b11b1c4767f5811bd2" + resolved "https://registry.npmjs.org/@angular-eslint/utils/-/utils-13.1.0.tgz" integrity sha512-iLmYMXNk+1sFMIlYXN8/Z5UcNAOno38v10lzo4bMjCpzXKkMa0O2b+4qi+469iUJAU6RAZ5weUL+S2Wtlr0ooA== dependencies: "@angular-eslint/bundled-angular-compiler" "13.1.0" "@typescript-eslint/experimental-utils" "5.11.0" -"@angular/animations@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-13.3.12.tgz#5fbd2f5b796ed2b801df09d1b0925721d8a75ec3" - integrity sha512-dc2JDokKJuuNxzzZa9FvuQU71kYC/e0xCLjGxEgX48sGKwajHRGBuzYFb8EmvLeA24SshYGmrxN0vGG9GhLK6g== +"@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@~14.3.0", "@angular/animations@14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz" + integrity sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg== dependencies: tslib "^2.3.0" "@angular/cdk@^13.2.6": version "13.3.9" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-13.3.9.tgz#a177196e872e29be3f84d3a50f778d361c689ff7" + resolved "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.9.tgz" integrity sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA== dependencies: tslib "^2.3.0" optionalDependencies: parse5 "^5.0.0" -"@angular/cli@~13.3.10": - version "13.3.10" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-13.3.10.tgz#a3a1baf20ffcfc58794660a05e9027afec73c84e" - integrity sha512-MssGlWSFv2d8d6b0+ml0NLYWr/X+2FzIleaoEwkYnLeCTBrH07xghVkCbSk8OnTvEmuBcUcsNiPprpLFY4cGEw== +"@angular/cli@>= 13.0.0 < 14.0.0", "@angular/cli@>=12", "@angular/cli@~13.3.10": + version "13.3.11" + resolved "https://registry.npmjs.org/@angular/cli/-/cli-13.3.11.tgz" + integrity sha512-LTuQ1wC/VJiHqHx8nYJCx0EJv1Ek7R6VvP/5vmr/+M8oVvJ2zSh/aIbcPg6BTL0YEfMI6nX41mUjPBUfF0q2OA== dependencies: - "@angular-devkit/architect" "0.1303.10" - "@angular-devkit/core" "13.3.10" - "@angular-devkit/schematics" "13.3.10" - "@schematics/angular" "13.3.10" + "@angular-devkit/architect" "0.1303.11" + "@angular-devkit/core" "13.3.11" + "@angular-devkit/schematics" "13.3.11" + "@schematics/angular" "13.3.11" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.3.3" @@ -261,17 +269,17 @@ symbol-observable "4.0.0" uuid "8.3.2" -"@angular/common@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-13.3.12.tgz#6ef3187232415e69995eb590a12ebcd44e457425" - integrity sha512-Nk4zNKfda92aFe+cucHRv2keyryR7C1ZnsurwZW9WZSobpY3z2tTT81F+yy35lGoMt5BDBAIpfh1b4j9Ue/vMg== +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@~14.3.0", "@angular/common@14.3.0", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz" + integrity sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-13.3.12.tgz#34f03dc806b63af06ab47f3fda3217e24e423560" - integrity sha512-6jrdVwexPihWlyitopc3rn2ReEkhAaMI8UWR0SOTnt3NaqNYWeio4bpeWlumgNPElDyY5rmyrmJgeaY8ICa8qA== +"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^13.0.0 || ^13.3.0-rc.0", "@angular/compiler-cli@~14.3.0", "@angular/compiler-cli@14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz" + integrity sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ== dependencies: "@babel/core" "^7.17.2" chokidar "^3.0.0" @@ -284,91 +292,119 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-13.3.12.tgz#9fa94d116310060bcdd429c24d593b70f8a082da" - integrity sha512-F5vJYrjbNvEWoVz9J/CqiT3Iod6g9bV0dGI5EeURcW4yHXHZ12ioQpfU3+bE7qXcTlnofbdDhK8cGxGx01SzBA== +"@angular/compiler@~14.3.0", "@angular/compiler@14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz" + integrity sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw== dependencies: tslib "^2.3.0" -"@angular/core@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-13.3.12.tgz#6817eec14a86a76dd6200dd6d1a89ca520968b09" - integrity sha512-jx0YC+NbPMbxGr5bXECkCEQv2RdVxR8AJNnabkPk8ZjwCpDzROrbELwwS1kunrZUhffcD15IhWGBvf1EGHAYDw== +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@~14.3.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" + integrity sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ== dependencies: tslib "^2.3.0" -"@angular/forms@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-13.3.12.tgz#21a4a3f5d7539d42351b9f2a7cac10463b6b7c00" - integrity sha512-auow1TKZx44ha1ia8Jwg2xp2Q7BbpShG5Ft8tewL3T44aTmJY7svWOE/m+DkZ/SXHmTFnbZFobGU5aEfe0+pNw== +"@angular/core@13.4.0": + version "13.4.0" + resolved "https://registry.npmjs.org/@angular/core/-/core-13.4.0.tgz" + integrity sha512-RE9KL7pRj+3lkJjdSR2uKmqiG0gqjnoVCMbSLG93pWrmzNIhElmlkiDaK39aMHGl836dc68Usv9CEisyVnRqHQ== dependencies: tslib "^2.3.0" -"@angular/language-service@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-13.3.12.tgz#1e82c5b833d5097386e4b957248bd4ba96255cbe" - integrity sha512-h4zYAmDLxR3DfqfHgOwxuiuX1WDYpYCYwVRYKmk4Mo2AtrRyNwQmkktPgpOFDK9F3gSZ35hbXniuSZbvyy53+g== - -"@angular/localize@13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-13.3.12.tgz#2350da015a2c05c6f1e891644d1d3bf7cfc6dd15" - integrity sha512-2RJhOwVMg1OqunRBjbjMfIEXxYhnHtkqOFyeZPTzxWWeHLlgNzh5wZ7A9604csuWC91DRhA2BdENv5nOs+5h5Q== +"@angular/forms@^13.0.0", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@~14.3.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz" + integrity sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw== dependencies: - "@babel/core" "7.17.2" - glob "7.2.0" + tslib "^2.3.0" + +"@angular/language-service@~14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-14.3.0.tgz" + integrity sha512-Sij3OQzj1UGs1O8H9PxVAY/o27+oqZwQRnib66rsWvtbIBTjHp4FV3dTs5iVcr62GGv4V4Mff/2I82NP10GPQg== + +"@angular/localize@^13.0.0", "@angular/localize@^13.0.0 || ^13.3.0-rc.0", "@angular/localize@14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/localize/-/localize-14.3.0.tgz" + integrity sha512-YmwlOEGnFonfDrIcWqlxXVFFjd0Q6yXeHGZCBFBfwbtjIseiJJ4UBmkTUgFeq7qlWevSFQzHdQnraFRGZpnMig== + dependencies: + "@babel/core" "7.18.9" + glob "8.0.3" yargs "^17.2.1" -"@angular/platform-browser-dynamic@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.12.tgz#2c27c8eb135f643e31594752b28e134eb06e52ac" - integrity sha512-/hBggov0PxK/KNJqIu3MVc5k8f0iDbygDP8Z1k/J0FcllOSRdO4LsQd1fsCfGfwIUf0YWGyD7KraSGpBBiWlFg== +"@angular/platform-browser-dynamic@~14.3.0", "@angular/platform-browser-dynamic@14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.3.0.tgz" + integrity sha512-rneZiMrIiYRhrkQvdL40E2ErKRn4Zdo6EtjBM9pAmWeyoM8oMnOZb9gz5vhrkNWg06kVMVg0yKqluP5How7j3A== dependencies: tslib "^2.3.0" -"@angular/platform-browser@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-13.3.12.tgz#913e42f5a1cc7f691a81554345a87ae4236ee14d" - integrity sha512-sfhQqU4xjTJCjkH62TQeH5/gkay/KzvNDF95J6NHi/Q6p2dbtzZdXuLJKR/sHxtF2kc505z5v9RNm6XMSXM1KA== +"@angular/platform-browser@>=5.0.0 <14.0.0", "@angular/platform-browser@~14.3.0", "@angular/platform-browser@14.3.0", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.3.0.tgz" + integrity sha512-w9Y3740UmTz44T0Egvc+4QV9sEbO61L+aRHbpkLTJdlEGzHByZvxJmJyBYmdqeyTPwc/Zpy7c02frlpfAlyB7A== dependencies: tslib "^2.3.0" -"@angular/platform-server@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-13.3.12.tgz#6a185544d9d7ef0a4eb35806f5bcabff7a1c5f1a" - integrity sha512-a7iksZTJeAe3WDjjq73/TsCPafA/aSGDeY0a0QwTkzvLM+yGIlTloQao+BpyACJXB4k9gU5qLAzDgyWXHiGhsg== +"@angular/platform-server@^13.3.4", "@angular/platform-server@~14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-14.3.0.tgz" + integrity sha512-JGeyS5T2bpG1wiRPFpVFU6L8OeYYe1cVDQRi1B1Wzd3hZklF0BCck0BHpYIifuhQGoUpsG7t3aDiqJW2Oj9Vaw== dependencies: domino "^2.1.2" tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@~13.3.12": - version "13.3.12" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-13.3.12.tgz#5238a910a6af7a20efcd8c3235d60eb5feaa0692" - integrity sha512-X+TAxTAlqUd2gPm6drFBGVzQsbQWM5wmZ8S5D5i+86x7Ku0v2CUFICT6AUPSl9+FTPiexlL4FdmvQV2CnGTSUw== +"@angular/router@^13.0.0", "@angular/router@~14.3.0": + version "14.3.0" + resolved "https://registry.npmjs.org/@angular/router/-/router-14.3.0.tgz" + integrity sha512-uip0V7w7k7xyxxpTPbr7EuMnYLj3FzJrwkLVJSEw3TMMGHt5VU5t4BBa9veGZOta2C205XFrTAHnp8mD+XYY1w== dependencies: tslib "^2.3.0" "@assemblyscript/loader@^0.10.1": version "0.10.1" - resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.10.1.tgz#70e45678f06c72fa2e350e8553ec4a4d72b92e06" + resolved "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz" integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" - integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== +"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.17.2", "@babel/core@^7.4.0-0", "@babel/core@7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" "@babel/core@7.16.12": version "7.16.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz" integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== dependencies: "@babel/code-frame" "^7.16.7" @@ -387,122 +423,83 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/core@7.17.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.2.tgz#2c77fc430e95139d816d39b113b31bf40fb22337" - integrity sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw== - dependencies: - "@ampproject/remapping" "^2.0.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/core@^7.12.3", "@babel/core@^7.17.2": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" - integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.0" - "@babel/helper-module-transforms" "^7.20.2" - "@babel/helpers" "^7.20.5" - "@babel/parser" "^7.20.5" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@7.16.8": +"@babel/generator@^7.16.8", "@babel/generator@7.16.8": version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz" integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== dependencies: "@babel/types" "^7.16.8" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.16.8", "@babel/generator@^7.17.0", "@babel/generator@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" - integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== +"@babel/generator@^7.18.9", "@babel/generator@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== dependencies: - "@babel/types" "^7.20.5" + "@babel/types" "^7.21.4" "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: "@babel/types" "^7.18.6" +"@babel/helper-annotate-as-pure@7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== dependencies: "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" - integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== +"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== dependencies: - "@babel/compat-data" "^7.20.0" - "@babel/helper-validator-option" "^7.18.6" + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" - integrity sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz" + integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.0" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" - integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz" + integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.2.1" + regexpu-core "^5.3.1" "@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: "@babel/helper-compilation-targets" "^7.17.7" @@ -514,74 +511,74 @@ "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== "@babel/helper-explode-assignable-expression@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== +"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz" + integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.21.0" "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6", "@babel/helper-module-transforms@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" - integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== +"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" "@babel/helper-simple-access" "^7.20.2" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.1" - "@babel/types" "^7.20.2" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": +"@babel/helper-remap-async-to-generator@^7.16.8": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" @@ -589,56 +586,57 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" - integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== dependencies: "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.19.1" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" -"@babel/helper-simple-access@^7.19.4", "@babel/helper-simple-access@^7.20.2": +"@babel/helper-simple-access@^7.20.2": version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz" integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: "@babel/types" "^7.20.2" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz" integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: "@babel/types" "^7.20.0" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: "@babel/types" "^7.18.6" "@babel/helper-string-parser@^7.19.4": version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== "@babel/helper-wrap-function@^7.18.9": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz" integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" @@ -646,84 +644,74 @@ "@babel/traverse" "^7.20.5" "@babel/types" "^7.20.5" -"@babel/helpers@^7.16.7", "@babel/helpers@^7.17.2", "@babel/helpers@^7.20.5": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" - integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== +"@babel/helpers@^7.16.7", "@babel/helpers@^7.18.9": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0", "@babel/parser@^7.18.10", "@babel/parser@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" - integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== +"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@7.16.8": +"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@7.16.8": version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz" integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== dependencies: "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz#352f02baa5d69f4e7529bdac39aaa02d41146af9" - integrity sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-class-properties@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -731,7 +719,7 @@ "@babel/plugin-proposal-export-namespace-from@^7.16.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" @@ -739,23 +727,23 @@ "@babel/plugin-proposal-json-strings@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" @@ -763,61 +751,61 @@ "@babel/plugin-proposal-numeric-separator@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz#a556f59d555f06961df1e572bb5eca864c84022d" - integrity sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ== + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/compat-data" "^7.20.1" - "@babel/helper-compilation-targets" "^7.20.0" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-parameters" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== +"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.20.7": + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.16.11": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" - integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-create-class-features-plugin" "^7.21.0" "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -825,173 +813,165 @@ "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@7.16.8": +"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@7.16.8": version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz" integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: "@babel/helper-module-imports" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.16.7": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz#401215f9dc13dc5262940e2e527c9536b3d7f237" - integrity sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA== + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-classes@^7.16.7": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz#c0033cf1916ccf78202d04be4281d161f6709bb2" - integrity sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g== + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-compilation-targets" "^7.20.7" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-optimise-call-expression" "^7.18.6" "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.19.1" + "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.16.7": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" "@babel/plugin-transform-destructuring@^7.16.7": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz#c23741cfa44ddd35f5e53896e88c75331b8b2792" - integrity sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw== + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -999,29 +979,29 @@ "@babel/plugin-transform-duplicate-keys@^7.16.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-for-of@^7.16.7": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz" + integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-function-name@^7.16.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: "@babel/helper-compilation-targets" "^7.18.9" @@ -1030,48 +1010,48 @@ "@babel/plugin-transform-literals@^7.16.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-modules-amd@^7.16.7": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz#aca391801ae55d19c4d8d2ebfeaa33df5f2a2cbd" - integrity sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg== + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz#25b32feef24df8038fc1ec56038917eacb0b730c" - integrity sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ== + version "7.21.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz" + integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== dependencies: - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-simple-access" "^7.19.4" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" "@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz#59e2a84064b5736a4471b1aa7b13d4431d327e0d" - integrity sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ== + version "7.20.11" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.6" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-validator-identifier" "^7.19.1" "@babel/plugin-transform-modules-umd@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: "@babel/helper-module-transforms" "^7.18.6" @@ -1079,7 +1059,7 @@ "@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.20.5" @@ -1087,36 +1067,36 @@ "@babel/plugin-transform-new-target@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.20.1": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz#f8f9186c681d10c3de7620c916156d893c8a019e" - integrity sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ== +"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.20.7": + version "7.21.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-property-literals@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.16.7": version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -1124,14 +1104,14 @@ "@babel/plugin-transform-reserved-words@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@7.16.10": version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz" integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== dependencies: "@babel/helper-module-imports" "^7.16.7" @@ -1143,50 +1123,50 @@ "@babel/plugin-transform-shorthand-properties@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-spread@^7.16.7": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-transform-sticky-regex@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-template-literals@^7.16.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typeof-symbol@^7.16.7": version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.16.7": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -1194,7 +1174,7 @@ "@babel/preset-env@7.16.11": version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz" integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== dependencies: "@babel/compat-data" "^7.16.8" @@ -1274,7 +1254,7 @@ "@babel/preset-modules@^0.1.5": version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1283,73 +1263,71 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime-corejs3@^7.10.2": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.20.6.tgz#63dae945963539ab0ad578efbf3eff271e7067ae" - integrity sha512-tqeujPiuEfcH067mx+7otTQWROVMKHXEaOQcAeNV5dDdbPWvPcFA8/W9LXw2NfjNmOetqLl03dfnG2WALPlsRQ== + version "7.21.0" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz" + integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== dependencies: core-js-pure "^3.25.1" regenerator-runtime "^0.13.11" -"@babel/runtime@7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@7.17.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@>=7", "@babel/runtime@7.17.2": version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" - integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@7.16.7": +"@babel/runtime@7.16.7": version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.7", "@babel/template@7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== dependencies: "@babel/code-frame" "^7.16.7" "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/template@^7.16.7", "@babel/template@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" -"@babel/traverse@^7.10.3", "@babel/traverse@^7.16.10", "@babel/traverse@^7.17.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" - integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== +"@babel/traverse@^7.10.3", "@babel/traverse@^7.16.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.5" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.10.3", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.4.4": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" - integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== +"@babel/types@^7.10.3", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== dependencies: "@babel/helper-string-parser" "^7.19.4" "@babel/helper-validator-identifier" "^7.19.1" @@ -1357,24 +1335,19 @@ "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960" - integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + "@jridgewell/trace-mapping" "0.3.9" "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz#8a997edf97d34071dd2e37ea6022447dd9e795ad" + resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz" integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== dependencies: "@csstools/selector-specificity" "^2.0.2" @@ -1382,7 +1355,7 @@ "@csstools/postcss-color-function@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz#2bd36ab34f82d0497cfacdc9b18d34b5e6f64b6b" + resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz" integrity sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -1390,21 +1363,21 @@ "@csstools/postcss-font-format-keywords@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz#677b34e9e88ae997a67283311657973150e8b16a" + resolved "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz" integrity sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-hwb-function@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz#ab54a9fce0ac102c754854769962f2422ae8aa8b" + resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz" integrity sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-ic-unit@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz#28237d812a124d1a16a5acc5c3832b040b303e58" + resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz" integrity sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -1412,7 +1385,7 @@ "@csstools/postcss-is-pseudo-class@^2.0.7": version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz#846ae6c0d5a1eaa878fce352c544f9c295509cd1" + resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz" integrity sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA== dependencies: "@csstools/selector-specificity" "^2.0.0" @@ -1420,21 +1393,21 @@ "@csstools/postcss-nested-calc@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz#d7e9d1d0d3d15cf5ac891b16028af2a1044d0c26" + resolved "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz" integrity sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-normalize-display-values@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz#15da54a36e867b3ac5163ee12c1d7f82d4d612c3" + resolved "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz" integrity sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-oklab-function@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz#88cee0fbc8d6df27079ebd2fa016ee261eecf844" + resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz" integrity sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -1442,45 +1415,45 @@ "@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz#542292558384361776b45c85226b9a3a34f276fa" + resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz" integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-stepped-value-functions@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz#f8772c3681cc2befed695e2b0b1d68e22f08c4f4" + resolved "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz" integrity sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-text-decoration-shorthand@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz#ea96cfbc87d921eca914d3ad29340d9bcc4c953f" + resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz" integrity sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-trigonometric-functions@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz#94d3e4774c36d35dcdc88ce091336cb770d32756" + resolved "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz" integrity sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og== dependencies: postcss-value-parser "^4.2.0" "@csstools/postcss-unset-value@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz#c99bb70e2cdc7312948d1eb41df2412330b81f77" + resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz" integrity sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g== "@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz#1bfafe4b7ed0f3e4105837e056e0a89b108ebe36" - integrity sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg== + version "2.2.0" + resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== "@cypress/request@^2.88.10": version "2.88.11" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.11.tgz#5a4c7399bc2d7e7ed56e92ce5acb620c8b187047" + resolved "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz" integrity sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w== dependencies: aws-sign2 "~0.7.0" @@ -1504,7 +1477,7 @@ "@cypress/schematic@^1.5.0": version "1.7.0" - resolved "https://registry.yarnpkg.com/@cypress/schematic/-/schematic-1.7.0.tgz#66343138f7f94843fa24f0c492a5a83408a7a047" + resolved "https://registry.npmjs.org/@cypress/schematic/-/schematic-1.7.0.tgz" integrity sha512-CouQrVlZ+uHVVBQtmNoMYU9LyoSAmQTOLDpVjrdTdMPpJH1mWnHCL5OCMt+FZLR+43KRiWEvDUjNqSza11oGsQ== dependencies: "@angular-devkit/architect" "^0.1202.10" @@ -1516,70 +1489,87 @@ "@cypress/xvfb@^1.2.4": version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + resolved "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz" integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== dependencies: debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@0.5.6": +"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.6": version "0.5.6" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" + resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz" integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== -"@discoveryjs/json-ext@^0.5.0": +"@discoveryjs/json-ext@0.5.7": version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@edsilv/http-status-codes@^1.0.3": version "1.0.3" - resolved "https://registry.yarnpkg.com/@edsilv/http-status-codes/-/http-status-codes-1.0.3.tgz#a1b767c552ac43f2983ab2b9ee20e9c73b79960b" + resolved "https://registry.npmjs.org/@edsilv/http-status-codes/-/http-status-codes-1.0.3.tgz" integrity sha512-HLK2FS5sZqxPqD53D6hhZxC6C8THTVwlyZDZ7J0iWsrB8JmMA69m/CQuNKZc1kki9WSVeck2fXna26NL0SE7cg== "@emotion/hash@^0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== "@es-joy/jsdoccomment@~0.36.1": version "0.36.1" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz#c37db40da36e4b848da5fd427a74bae3b004a30f" + resolved "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz" integrity sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg== dependencies: comment-parser "1.3.1" esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" -"@eslint/eslintrc@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" - integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz" + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" + espree "^9.5.1" + globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.38.0": + version "8.38.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz" + integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== + "@fortawesome/fontawesome-free@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz#344baf6ff9eaad7a73cff067d8c56bfc11ae5304" - integrity sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A== + version "6.4.0" + resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz" + integrity sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.11.6": - version "0.11.7" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" - integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" @@ -1587,22 +1577,22 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@iiif/vocabulary@^1.0.26": version "1.0.26" - resolved "https://registry.yarnpkg.com/@iiif/vocabulary/-/vocabulary-1.0.26.tgz#557fab623100ca860daeddf6e4de46a8f94aaf86" + resolved "https://registry.npmjs.org/@iiif/vocabulary/-/vocabulary-1.0.26.tgz" integrity sha512-yOsMDg5C90iMfD5HSydoTDzmOM/ki5zGiu4DbHpzRueM7D+12IcDHeai2A8QvEroS8HCJl5M1Edbju5rOlPIpg== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -1613,72 +1603,85 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@kolkov/ngx-gallery@^2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@kolkov/ngx-gallery/-/ngx-gallery-2.0.1.tgz#6c7903b4fc4719b093ef8a782aff731fe38ea320" + resolved "https://registry.npmjs.org/@kolkov/ngx-gallery/-/ngx-gallery-2.0.1.tgz" integrity sha512-mTigRy9Ha7bqCF/+GNKeW2Oe8ZILuM5GGMw+ZbvTQWq3X5hngeFFgv8GFG49Py3biX67kb0NhqCP+msLe4wbXQ== dependencies: tslib "^2.3.0" "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@material-ui/core@^4.11.0": +"@material-ui/core@^4.0.0", "@material-ui/core@^4.11.0", "@material-ui/core@^4.12.1", "@material-ui/core@^4.7.2": version "4.12.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" + resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz" integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== dependencies: "@babel/runtime" "^7.4.4" @@ -1694,16 +1697,16 @@ react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" -"@material-ui/icons@^4.9.1": +"@material-ui/icons@^4.5.1", "@material-ui/icons@^4.9.1": version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" + resolved "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz" integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== dependencies: "@babel/runtime" "^7.4.4" "@material-ui/lab@^4.0.0-alpha.53": version "4.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978" + resolved "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz" integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg== dependencies: "@babel/runtime" "^7.4.4" @@ -1714,7 +1717,7 @@ "@material-ui/styles@^4.11.5": version "4.11.5" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" + resolved "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz" integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== dependencies: "@babel/runtime" "^7.4.4" @@ -1736,7 +1739,7 @@ "@material-ui/system@^4.12.2": version "4.12.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" + resolved "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz" integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== dependencies: "@babel/runtime" "^7.4.4" @@ -1746,12 +1749,12 @@ "@material-ui/types@5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" + resolved "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz" integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== "@material-ui/utils@^4.11.3": version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" + resolved "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz" integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== dependencies: "@babel/runtime" "^7.4.4" @@ -1760,61 +1763,61 @@ "@ng-bootstrap/ng-bootstrap@^11.0.0": version "11.0.1" - resolved "https://registry.yarnpkg.com/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-11.0.1.tgz#6113b09bfb9b722f7ebf4b97d17e6addd0fd9e2f" + resolved "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-11.0.1.tgz" integrity sha512-xpXpW2x2S9ZQhEu5kCmEAFf8WvkVD+rcKb1NLQiLuiZgAQR7GXVexXy5Y+RIvTjAQmPEVyxaSgYiJA6sWNJLNw== dependencies: tslib "^2.3.0" "@ng-dynamic-forms/core@^15.0.0": version "15.0.0" - resolved "https://registry.yarnpkg.com/@ng-dynamic-forms/core/-/core-15.0.0.tgz#674a88c253aa100b30144bf7ebf518e24b72f553" + resolved "https://registry.npmjs.org/@ng-dynamic-forms/core/-/core-15.0.0.tgz" integrity sha512-JJ0w8WdOA+wsHyt/hwitGhv/e1j95/TlRS82vvZetP/Ip3kjvD/Ge8jbg4bEssIAXZjfBqS/Gy00Hxo4h57DgQ== dependencies: tslib "^2.0.0" "@ng-dynamic-forms/ui-ng-bootstrap@^15.0.0": version "15.0.0" - resolved "https://registry.yarnpkg.com/@ng-dynamic-forms/ui-ng-bootstrap/-/ui-ng-bootstrap-15.0.0.tgz#0ab5614bc2efccc4cddbb384865b66d4740bcd3d" + resolved "https://registry.npmjs.org/@ng-dynamic-forms/ui-ng-bootstrap/-/ui-ng-bootstrap-15.0.0.tgz" integrity sha512-b/+tOJxtDRMzoFA7KLA8JRxbAnXd8d8072/P6C+2xOMaG0Ttc1UUiNQOZ5w82y78nr0bZ63oFHSR0xzSVtMXnA== dependencies: tslib "^2.0.0" "@ngrx/effects@^13.0.2": version "13.2.0" - resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-13.2.0.tgz#36aba5af45ac034419509f799ed70acdb80228b1" + resolved "https://registry.npmjs.org/@ngrx/effects/-/effects-13.2.0.tgz" integrity sha512-HmWggpl3xGQFfUzON/uel5jSyUWsrGZsR5qR/oFLGjPRWzwKfdHrl0OcBl5IhFgFxT74cAi9F4JTICUytGRbFA== dependencies: tslib "^2.0.0" "@ngrx/router-store@^13.0.2": version "13.2.0" - resolved "https://registry.yarnpkg.com/@ngrx/router-store/-/router-store-13.2.0.tgz#ba6abfe8adfa5e5a5b981196347cf4339249612f" + resolved "https://registry.npmjs.org/@ngrx/router-store/-/router-store-13.2.0.tgz" integrity sha512-ojHxsGsHljYWiqv/OUQHFLb4ZNvmsBlF+CHGZ7vCwLYJ2d9TB2y5nOezfaZ1L46MLUp+uM3FD3fpnIFwXYsTNw== dependencies: tslib "^2.0.0" "@ngrx/store-devtools@^13.0.2": version "13.2.0" - resolved "https://registry.yarnpkg.com/@ngrx/store-devtools/-/store-devtools-13.2.0.tgz#69193e32aee141397d7d2c11c43278e3fa5191e7" + resolved "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-13.2.0.tgz" integrity sha512-k1NifkR/4OjbjAxauVZODCsgs2owMJXvEX2XoTWth7zscbHE8L3pLd0k1ox5pMPUEqWIptWTaJDzYqnQSoJaaw== dependencies: tslib "^2.0.0" -"@ngrx/store@^13.0.2": +"@ngrx/store@^13.0.2", "@ngrx/store@13.2.0": version "13.2.0" - resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-13.2.0.tgz#43d4e9bf064808dd546ef1edbbcd08c2a8e0871a" + resolved "https://registry.npmjs.org/@ngrx/store/-/store-13.2.0.tgz" integrity sha512-3wlGMkfe0EXsiS6E6W0wCksuGapa5Z6JVFvKQMHFpXZ3XeixXKlULnemlcdMT7Yrnry+CGOtRHqkmKxLoQzhTw== dependencies: tslib "^2.0.0" -"@ngtools/webpack@13.3.10", "@ngtools/webpack@^13.2.6": - version "13.3.10" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-13.3.10.tgz#442c0d41dc65e851816e2f5a1c6870db8e103f9e" - integrity sha512-QQ8ELLqW5PtvrEAMt99D0s982NW303k8UpZrQoQ9ODgnSVDMdbbzFPNTXq/20dg+nbp8nlOakUrkjB47TBwTNA== +"@ngtools/webpack@^13.2.6", "@ngtools/webpack@13.3.11": + version "13.3.11" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.11.tgz" + integrity sha512-gB33hTbc/RJmHyIgSUYj8ErPazhYYm7yfapOnvwHdYhCjrj1TKkR1ierOlhJtpfBYUQg6FChdl2YpyIQNPjWMA== "@nguniversal/builders@^13.1.1": version "13.1.1" - resolved "https://registry.yarnpkg.com/@nguniversal/builders/-/builders-13.1.1.tgz#e0571957f443b226833c4b17fdbb3a89d324a5e2" + resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-13.1.1.tgz" integrity sha512-R73GKHr7KeTIBE/kSudhsN0V1gx+TrnM28RHdzw3eHCz2Q3msGpgdt/79+2EjLcvWjoVHOsD+aFIJ9+sx422yQ== dependencies: "@angular-devkit/architect" "^0.1303.0" @@ -1831,7 +1834,7 @@ "@nguniversal/common@13.1.1": version "13.1.1" - resolved "https://registry.yarnpkg.com/@nguniversal/common/-/common-13.1.1.tgz#5f8c144f41a5f867c8d051d2ebfa052f10ac22fd" + resolved "https://registry.npmjs.org/@nguniversal/common/-/common-13.1.1.tgz" integrity sha512-DoAPA7+kUz+qMgCTUtRPFcMGY0zz8OSkOTZnxqO5sUYntD6mCEQImHU0WF4ud88j71o0Hv+AISJD1evAAANCdw== dependencies: critters "0.0.16" @@ -1840,7 +1843,7 @@ "@nguniversal/express-engine@^13.0.2": version "13.1.1" - resolved "https://registry.yarnpkg.com/@nguniversal/express-engine/-/express-engine-13.1.1.tgz#7c84056f73701a9dd8fa08544af73db7f9eb857e" + resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-13.1.1.tgz" integrity sha512-NdiBP0IRbPrNYEMLy3a6os2mNgRNE84tsMn+mV2uF4wv1JNs3YyoXcucWvhgHdODbDtc6z4CGn8t/6KagRqmvA== dependencies: "@nguniversal/common" "13.1.1" @@ -1848,34 +1851,34 @@ "@ngx-translate/core@^13.0.0": version "13.0.0" - resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-13.0.0.tgz#60547cb8a0845a2a0abfde6b0bf5ec6516a63fd6" + resolved "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz" integrity sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg== dependencies: tslib "^2.0.0" "@nicky-lenaers/ngx-scroll-to@^13.0.0": version "13.0.0" - resolved "https://registry.yarnpkg.com/@nicky-lenaers/ngx-scroll-to/-/ngx-scroll-to-13.0.0.tgz#da81253dafc872002786a26e1b82e29be1ca22a1" + resolved "https://registry.npmjs.org/@nicky-lenaers/ngx-scroll-to/-/ngx-scroll-to-13.0.0.tgz" integrity sha512-sF/F4yoHvOtEGkt58VJYbQVITbW0ivmQA+CJGzc9mnJS6XHFnc4be9rlCX3mz7mOn3FfEs+K80MnUivZ/EHfkQ== dependencies: tslib "^2.3.0" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1883,7 +1886,7 @@ "@npmcli/fs@^1.0.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== dependencies: "@gar/promisify" "^1.0.1" @@ -1891,7 +1894,7 @@ "@npmcli/fs@^2.1.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== dependencies: "@gar/promisify" "^1.1.3" @@ -1899,7 +1902,7 @@ "@npmcli/git@^2.1.0": version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz" integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== dependencies: "@npmcli/promise-spawn" "^1.3.2" @@ -1913,7 +1916,7 @@ "@npmcli/installed-package-contents@^1.0.6": version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== dependencies: npm-bundled "^1.1.1" @@ -1921,7 +1924,7 @@ "@npmcli/move-file@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== dependencies: mkdirp "^1.0.4" @@ -1929,7 +1932,7 @@ "@npmcli/move-file@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== dependencies: mkdirp "^1.0.4" @@ -1937,19 +1940,19 @@ "@npmcli/node-gyp@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz" integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== dependencies: infer-owner "^1.0.4" "@npmcli/run-script@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz" integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== dependencies: "@npmcli/node-gyp" "^1.0.2" @@ -1957,16 +1960,16 @@ node-gyp "^8.2.0" read-package-json-fast "^2.0.1" -"@nrwl/cli@*", "@nrwl/cli@15.3.0": - version "15.3.0" - resolved "https://registry.yarnpkg.com/@nrwl/cli/-/cli-15.3.0.tgz#61b145d2ba613f9df4dbb9188e631ca50a4e42cb" - integrity sha512-WAki2+puBp6qel/VAxdQmr/L/sLyw8K6bynYNmMl4eIlR5hjefrUChPzUiJDAS9/CUYQNOyva2VV5wofzdv95w== +"@nrwl/cli@*", "@nrwl/cli@15.9.2": + version "15.9.2" + resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.2.tgz" + integrity sha512-QoCmyrcGakHAYTJaNBbOerRQAmqJHMYGCdqtQidV+aP9p1Dy33XxDELfhd+IYmGqngutXuEWChNpWNhPloLnoA== dependencies: - nx "15.3.0" + nx "15.9.2" "@nrwl/devkit@13.1.3": version "13.1.3" - resolved "https://registry.yarnpkg.com/@nrwl/devkit/-/devkit-13.1.3.tgz#8b119587984371a4caf0b3601a7481e04bac65a3" + resolved "https://registry.npmjs.org/@nrwl/devkit/-/devkit-13.1.3.tgz" integrity sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA== dependencies: "@nrwl/tao" "13.1.3" @@ -1976,9 +1979,14 @@ semver "7.3.4" tslib "^2.0.0" +"@nrwl/nx-darwin-x64@15.9.2": + version "15.9.2" + resolved "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.2.tgz" + integrity sha512-qHfdluHlPzV0UHOwj1ZJ+qNEhzfLGiBuy1cOth4BSzDlvMnkuqBWoprfaXoztzYcus2NSILY1/7b3Jw4DAWmMw== + "@nrwl/tao@13.1.3": version "13.1.3" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-13.1.3.tgz#5a88029b0aa9dfd4bca0a86d3dde2b608c468b36" + resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-13.1.3.tgz" integrity sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA== dependencies: chalk "4.1.0" @@ -1993,16 +2001,16 @@ tslib "^2.0.0" yargs-parser "20.0.0" -"@nrwl/tao@15.3.0": - version "15.3.0" - resolved "https://registry.yarnpkg.com/@nrwl/tao/-/tao-15.3.0.tgz#20266f1269815cb28e21677b0aa7f913a7e31b17" - integrity sha512-alyzKKSgfgPwQ/FUozvk43VGOZHyNMiSM6Udl49ZaQwT77GXRFkrOu21odW6dciWPd3iUOUjfJISNqrEJmxvpw== +"@nrwl/tao@15.9.2": + version "15.9.2" + resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.2.tgz" + integrity sha512-+LqNC37w9c6q6Ukdpf0z0tt1PQFNi4gwhHpJvkYQiKRETHjyrrlyqTNEPEyA7PI62RuYC6VrpVw2gzI7ufqZEA== dependencies: - nx "15.3.0" + nx "15.9.2" "@parcel/watcher@2.0.4": version "2.0.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== dependencies: node-addon-api "^3.2.1" @@ -2010,28 +2018,28 @@ "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== "@react-dnd/asap@^4.0.0": version "4.0.1" - resolved "https://registry.yarnpkg.com/@react-dnd/asap/-/asap-4.0.1.tgz#5291850a6b58ce6f2da25352a64f1b0674871aab" + resolved "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz" integrity sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg== "@react-dnd/invariant@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@react-dnd/invariant/-/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e" + resolved "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz" integrity sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw== "@react-dnd/shallowequal@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a" + resolved "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz" integrity sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg== -"@redux-saga/core@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.2.1.tgz#3680989621517d075a2cc85e0d2744b682990ed8" - integrity sha512-ABCxsZy9DwmNoYNo54ZlfuTvh77RXx8ODKpxOHeWam2dOaLGQ7vAktpfOtqSeTdYrKEORtTeWnxkGJMmPOoukg== +"@redux-saga/core@^1.2.3": + version "1.2.3" + resolved "https://registry.npmjs.org/@redux-saga/core/-/core-1.2.3.tgz" + integrity sha512-U1JO6ncFBAklFTwoQ3mjAeQZ6QGutsJzwNBjgVLSWDpZTRhobUzuVDS1qH3SKGJD8fvqoaYOjp6XJ3gCmeZWgA== dependencies: "@babel/runtime" "^7.6.3" "@redux-saga/deferred" "^1.2.1" @@ -2044,19 +2052,19 @@ "@redux-saga/deferred@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.2.1.tgz#aca373a08ccafd6f3481037f2f7ee97f2c87c3ec" + resolved "https://registry.npmjs.org/@redux-saga/deferred/-/deferred-1.2.1.tgz" integrity sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g== "@redux-saga/delay-p@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.2.1.tgz#e72ac4731c5080a21f75b61bedc31cb639d9e446" + resolved "https://registry.npmjs.org/@redux-saga/delay-p/-/delay-p-1.2.1.tgz" integrity sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w== dependencies: "@redux-saga/symbols" "^1.1.3" "@redux-saga/is@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.3.tgz#b333f31967e87e32b4e6b02c75b78d609dd4ad73" + resolved "https://registry.npmjs.org/@redux-saga/is/-/is-1.1.3.tgz" integrity sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q== dependencies: "@redux-saga/symbols" "^1.1.3" @@ -2064,80 +2072,80 @@ "@redux-saga/symbols@^1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.3.tgz#b731d56201719e96dc887dc3ae9016e761654367" + resolved "https://registry.npmjs.org/@redux-saga/symbols/-/symbols-1.1.3.tgz" integrity sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg== "@redux-saga/types@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.2.1.tgz#9403f51c17cae37edf870c6bc0c81c1ece5ccef8" + resolved "https://registry.npmjs.org/@redux-saga/types/-/types-1.2.1.tgz" integrity sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA== "@researchgate/react-intersection-observer@^1.0.0": version "1.3.5" - resolved "https://registry.yarnpkg.com/@researchgate/react-intersection-observer/-/react-intersection-observer-1.3.5.tgz#0321d2dd609aaacdb9bace8004d99c72824fb142" + resolved "https://registry.npmjs.org/@researchgate/react-intersection-observer/-/react-intersection-observer-1.3.5.tgz" integrity sha512-aYlsex5Dd6BAHMJvJrUoFp8gzgMSL27xFvrxkVYW0bV1RMAapVsO+QeYLtTaSF/QCflktODodvv+wJm49oMnnQ== "@scarf/scarf@^1.1.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.1.1.tgz#d8b9f20037b3a37dbf8dcdc4b3b72f9285bfce35" + resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz" integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== -"@schematics/angular@13.3.10": - version "13.3.10" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-13.3.10.tgz#7d646ebfaf28bb1a6960493b11f5914f546a3ad5" - integrity sha512-sw6K8YihfcqNyfa2/65ACPixZHQJRBw1aNm8w0DRGFyO3aXRe9G5X23MkCMLH+63oK9R1cK63/fZ8zqfdSq7zA== - dependencies: - "@angular-devkit/core" "13.3.10" - "@angular-devkit/schematics" "13.3.10" - jsonc-parser "3.0.0" - "@schematics/angular@^12.2.17": version "12.2.18" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-12.2.18.tgz#dc6f8f572eaf6e562ec564bb7a52c5c9e38f43cb" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz" integrity sha512-niRS9Ly9y8uI0YmTSbo8KpdqCCiZ/ATMZWeS2id5M8JZvfXbngwiqJvojdSol0SWU+n1W4iA+lJBdt4gSKlD5w== dependencies: "@angular-devkit/core" "12.2.18" "@angular-devkit/schematics" "12.2.18" jsonc-parser "3.0.0" +"@schematics/angular@13.3.11": + version "13.3.11" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz" + integrity sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A== + dependencies: + "@angular-devkit/core" "13.3.11" + "@angular-devkit/schematics" "13.3.11" + jsonc-parser "3.0.0" + "@socket.io/component-emitter@~3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" + resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz" integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/body-parser@*": version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" @@ -2145,19 +2153,19 @@ "@types/bonjour@^3.5.9": version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz" integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== dependencies: "@types/node" "*" "@types/circular-json@^0.4.0": version "0.4.0" - resolved "https://registry.yarnpkg.com/@types/circular-json/-/circular-json-0.4.0.tgz#7401f7e218cfe87ad4c43690da5658b9acaf51be" + resolved "https://registry.npmjs.org/@types/circular-json/-/circular-json-0.4.0.tgz" integrity sha512-7+kYB7x5a7nFWW1YPBh3KxhwKfiaI4PbZ1RvzBU91LZy7lWJO822CI+pqzSre/DZ7KsCuMKdHnLHHFu8AyXbQg== "@types/connect-history-api-fallback@^1.3.5": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== dependencies: "@types/express-serve-static-core" "*" @@ -2165,172 +2173,152 @@ "@types/connect@*": version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== dependencies: "@types/node" "*" "@types/cookie@^0.4.1": version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz" integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== "@types/cors@^2.8.12": version "2.8.13" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz" integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== dependencies: "@types/node" "*" "@types/deep-freeze@0.1.2": version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/deep-freeze/-/deep-freeze-0.1.2.tgz#68e5379291910e82c2f0d1629732163c2aa662cc" + resolved "https://registry.npmjs.org/@types/deep-freeze/-/deep-freeze-0.1.2.tgz" integrity sha512-M6x29Vk4681dght4IMnPIcF1SNmeEm0c4uatlTFhp+++H1oDK1THEIzuCC2WeCBVhX+gU0NndsseDS3zaCtlcQ== "@types/ejs@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.1.tgz#29c539826376a65e7f7d672d51301f37ed718f6d" - integrity sha512-RQul5wEfY7BjWm0sYY86cmUN/pcXWGyVxWX93DFFJvcrxax5zKlieLwA3T77xJGwNcZW0YW6CYG70p1m8xPFmA== + version "3.1.2" + resolved "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.2.tgz" + integrity sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g== "@types/eslint-scope@^3.7.3": version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz" integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.4.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" - integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== + version "8.37.0" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": +"@types/estree@*", "@types/estree@^0.0.51": version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.9": - version "4.17.14" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" - integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== + version "4.17.17" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== dependencies: "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" + "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" "@types/serve-static" "*" "@types/grecaptcha@^3.0.4": version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/grecaptcha/-/grecaptcha-3.0.4.tgz#3de601f3b0cd0298faf052dd5bd62aff64c2be2e" + resolved "https://registry.npmjs.org/@types/grecaptcha/-/grecaptcha-3.0.4.tgz" integrity sha512-7l1Y8DTGXkx/r4pwU1nMVAR+yD/QC+MCHKXAyEX/7JZhwcN1IED09aZ9vCjjkcGdhSQiu/eJqcXInpl6eEEEwg== "@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" "@types/http-proxy@^1.17.5", "@types/http-proxy@^1.17.8": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + version "1.17.10" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz" + integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== dependencies: "@types/node" "*" "@types/jasmine@~3.6.0": version "3.6.11" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.6.11.tgz#4b1d77aa9dfc757407cb9e277216d8e83553f09d" + resolved "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz" integrity sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ== "@types/js-cookie@2.2.6": version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" + resolved "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz" integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash@^4.14.165": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== + version "4.14.192" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz" + integrity sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A== "@types/mime@*": version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/node@*": - version "18.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.2.tgz#c076ed1d7b6095078ad3cf21dfeea951842778b1" - integrity sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA== - -"@types/node@>=10.0.0": - version "18.11.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" - integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== - -"@types/node@^14.14.31": - version "14.18.36" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.36.tgz#c414052cb9d43fab67d679d5f3c641be911f5835" - integrity sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ== - -"@types/node@^14.14.9": - version "14.18.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.34.tgz#cd2e6fa0dbfb08a62582a7b967558e73c32061ec" - integrity sha512-hcU9AIQVHmPnmjRK+XUUYlILlr9pQrsqSrwov/JK1pnf3GTQowVBhx54FbvM0AU/VXGH4i3+vgXS5EguR7fysA== +"@types/node@*", "@types/node@^14.14.31", "@types/node@^14.14.9", "@types/node@>=10.0.0": + version "14.18.42" + resolved "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz" + integrity sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prop-types@*": version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/qs@*": version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/range-parser@*": version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-redux@^7.1.20": - version "7.1.24" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.24.tgz#6caaff1603aba17b27d20f8ad073e4c077e975c0" - integrity sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ== + version "7.1.25" + resolved "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.25.tgz" + integrity sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -2339,15 +2327,15 @@ "@types/react-transition-group@^4.2.0": version "4.4.5" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== dependencies: "@types/react" "*" -"@types/react@*": - version "18.0.26" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" - integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== +"@types/react@*", "@types/react@^16.8.6 || ^17.0.0": + version "18.0.34" + resolved "https://registry.npmjs.org/@types/react/-/react-18.0.34.tgz" + integrity sha512-NO1UO8941541CJl1BeOXi8a9dNKFK09Gnru5ZJqkm4Q3/WoQJtHvmwt0VX0SB9YCEwe7TfSSxDuaNmx6H2BAIQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2355,80 +2343,80 @@ "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/sanitize-html@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.6.2.tgz#9c47960841b9def1e4c9dfebaaab010a3f6e97b9" - integrity sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ== + version "2.9.0" + resolved "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.9.0.tgz" + integrity sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg== dependencies: - htmlparser2 "^6.0.0" + htmlparser2 "^8.0.0" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/semver@^7.3.12": version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== "@types/serve-index@^1.9.1": version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" - integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== + version "1.15.1" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== dependencies: "@types/mime" "*" "@types/node" "*" "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz" integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@^2.3.2": version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" + resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz" integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== "@types/sockjs@^0.3.33": version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz" integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== dependencies: "@types/node" "*" "@types/stacktrace-js@^0.0.33": version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/stacktrace-js/-/stacktrace-js-0.0.33.tgz#9b027370ca161b89798f308af77438802546cb39" + resolved "https://registry.npmjs.org/@types/stacktrace-js/-/stacktrace-js-0.0.33.tgz" integrity sha512-aqJ6QM9QThNL4dHBhwl1f9B0oDqiREkYLn9RldghUKsGeFWWGlCsqsRWxbh+hDvvmptMFqc4aIfFIGz9BBu8Qg== "@types/ws@^8.2.2", "@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + version "8.5.4" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== dependencies: "@types/node" "*" "@types/yauzl@^2.9.1": version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.11.0": +"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz#3b866371d8d75c70f9b81535e7f7d3aa26527c7a" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz" integrity sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw== dependencies: "@typescript-eslint/scope-manager" "5.11.0" @@ -2443,21 +2431,14 @@ "@typescript-eslint/experimental-utils@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz#e7b2bfd57ddda47c3f658faad57655ed9e01fea0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz" integrity sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ== dependencies: "@typescript-eslint/utils" "5.11.0" -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.45.1.tgz#a2b13d5a655902441589aa135fa17b4d938f9c5e" - integrity sha512-WlXwY9dbmc0Lzu6xQOZ3yN8u/ws/1R8zPC16O217LMZJCbV2hJezqkWMUB+jMwguOJW+cukCDe92vcwwf8zwjQ== - dependencies: - "@typescript-eslint/utils" "5.45.1" - -"@typescript-eslint/parser@5.11.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.11.0.tgz#b4fcaf65513f9b34bdcbffdda055724a5efb7e04" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz" integrity sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ== dependencies: "@typescript-eslint/scope-manager" "5.11.0" @@ -2467,23 +2448,23 @@ "@typescript-eslint/scope-manager@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz#f5aef83ff253f457ecbee5f46f762298f0101e4b" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz" integrity sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA== dependencies: "@typescript-eslint/types" "5.11.0" "@typescript-eslint/visitor-keys" "5.11.0" -"@typescript-eslint/scope-manager@5.45.1": - version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz#5b87d025eec7035d879b99c260f03be5c247883c" - integrity sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ== +"@typescript-eslint/scope-manager@5.58.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz" + integrity sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA== dependencies: - "@typescript-eslint/types" "5.45.1" - "@typescript-eslint/visitor-keys" "5.45.1" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" "@typescript-eslint/type-utils@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz#58be0ba73d1f6ef8983d79f7f0bc2209b253fefe" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz" integrity sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA== dependencies: "@typescript-eslint/utils" "5.11.0" @@ -2492,17 +2473,17 @@ "@typescript-eslint/types@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.11.0.tgz#ba345818a2540fdf2755c804dc2158517ab61188" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz" integrity sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ== -"@typescript-eslint/types@5.45.1": - version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" - integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== +"@typescript-eslint/types@5.58.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz" + integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== "@typescript-eslint/typescript-estree@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz#53f9e09b88368191e52020af77c312a4777ffa43" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz" integrity sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg== dependencies: "@typescript-eslint/types" "5.11.0" @@ -2513,22 +2494,36 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.45.1": - version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" - integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== +"@typescript-eslint/typescript-estree@5.58.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz" + integrity sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q== dependencies: - "@typescript-eslint/types" "5.45.1" - "@typescript-eslint/visitor-keys" "5.45.1" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/visitor-keys" "5.58.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/utils@^5.57.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/utils@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.11.0.tgz#d91548ef180d74c95d417950336d9260fdbe1dc5" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz" integrity sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw== dependencies: "@types/json-schema" "^7.0.9" @@ -2538,39 +2533,25 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@5.45.1": - version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" - integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.45.1" - "@typescript-eslint/types" "5.45.1" - "@typescript-eslint/typescript-estree" "5.45.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" - "@typescript-eslint/visitor-keys@5.11.0": version "5.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz#888542381f1a2ac745b06d110c83c0b261487ebb" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz" integrity sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA== dependencies: "@typescript-eslint/types" "5.11.0" eslint-visitor-keys "^3.0.0" -"@typescript-eslint/visitor-keys@5.45.1": - version "5.45.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" - integrity sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ== +"@typescript-eslint/visitor-keys@5.58.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz" + integrity sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA== dependencies: - "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/types" "5.58.0" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== dependencies: "@webassemblyjs/helper-numbers" "1.11.1" @@ -2578,22 +2559,22 @@ "@webassemblyjs/floating-point-hex-parser@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== "@webassemblyjs/helper-api-error@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== "@webassemblyjs/helper-buffer@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== "@webassemblyjs/helper-numbers@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.1" @@ -2602,12 +2583,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== "@webassemblyjs/helper-wasm-section@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2617,26 +2598,26 @@ "@webassemblyjs/ieee754@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== "@webassemblyjs/wasm-edit@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2650,7 +2631,7 @@ "@webassemblyjs/wasm-gen@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2661,7 +2642,7 @@ "@webassemblyjs/wasm-opt@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2671,7 +2652,7 @@ "@webassemblyjs/wasm-parser@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2683,7 +2664,7 @@ "@webassemblyjs/wast-printer@1.11.1": version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== dependencies: "@webassemblyjs/ast" "1.11.1" @@ -2691,24 +2672,24 @@ "@webpack-cli/configtest@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz" integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== "@webpack-cli/info@^1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + resolved "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz" integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== dependencies: envinfo "^7.7.3" "@webpack-cli/serve@^1.7.0": version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz" integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== "@wessberg/ts-evaluator@0.0.27": version "0.0.27" - resolved "https://registry.yarnpkg.com/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz#06e8b901d5e84f11199b9f84577c6426ae761767" + resolved "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz" integrity sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA== dependencies: chalk "^4.1.0" @@ -2718,47 +2699,47 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -"@yarnpkg/lockfile@1.1.0", "@yarnpkg/lockfile@^1.1.0": +"@yarnpkg/lockfile@^1.1.0", "@yarnpkg/lockfile@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== "@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.32" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.32.tgz#0aef0bd1b9e9954173c01a7cbd35f98765e39e7d" - integrity sha512-Sz2g88b3iAu2jpMnhtps2bRX2GAAOvanOxGcVi+o7ybGjLetxK23o2cHskXKypvXxtZTsJegel5pUWSPpYphww== + version "3.0.0-rc.42" + resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.42.tgz" + integrity sha512-eW9Mbegmb5bJjwawJM9ghjUjUqciNMhC6L7XrQPF/clXS5bbP66MstsgCT5hy9VlfUh/CfBT+0Wucf531dMjHA== dependencies: js-yaml "^3.10.0" tslib "^2.4.0" "@zkochan/js-yaml@0.0.6": version "0.0.6" - resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" + resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== dependencies: argparse "^2.0.1" abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2766,7 +2747,7 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: acorn-globals@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: acorn "^7.1.1" @@ -2774,120 +2755,100 @@ acorn-globals@^6.0.0: acorn-import-assertions@^1.7.6: version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^7.1.1: version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0, acorn-walk@^8.1.1: +acorn-walk@^8.0.0: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + acorn@^7.1.1: version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - adjust-sourcemap-loader@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99" + resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== dependencies: loader-utils "^2.0.0" regex-parser "^2.2.11" -adm-zip@^0.4.9: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -agent-base@6, agent-base@^6.0.2: +agent-base@^6.0.2, agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + version "4.3.0" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== dependencies: debug "^4.1.0" - depd "^1.1.2" + depd "^2.0.0" humanize-ms "^1.2.1" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-formats@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.0.tgz#96eaf83e38d32108b66d82a9cb0cfa24886cdfeb" - integrity sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q== +ajv-formats@^2.1.1, ajv-formats@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" -ajv-formats@2.1.1, ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== +ajv-formats@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz" + integrity sha512-USH2jBb+C/hIpwD2iRjp0pe0k+MvzG0mlSn/FIdCgQhUb9ALPRjt2KIQdfZDS9r0ZIeUAg7gOu9KL0PFqGqr5Q== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" -ajv@8.6.2: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@8.9.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" - integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -2895,10 +2856,40 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.8.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" - integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.9.1, ajv@^8.0.0, ajv@^8.8.0, ajv@^8.8.2, ajv@8.9.0: + version "8.9.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@8.6.2: + version "8.6.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2907,80 +2898,77 @@ ajv@^8.0.0, ajv@^8.8.0: angular-idle-preload@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/angular-idle-preload/-/angular-idle-preload-3.0.0.tgz#decace34d9fac1cb00000727a6dc5caafdb84e4d" + resolved "https://registry.npmjs.org/angular-idle-preload/-/angular-idle-preload-3.0.0.tgz" integrity sha512-W3P2m2B6MHdt1DVunH6H3VWkAZrG3ZwxGcPjedVvIyRhg/LmMtILoizHSxTXw3fsKIEdAPwGObXGpML9WD1jJA== angulartics2@^12.0.0: version "12.2.0" - resolved "https://registry.yarnpkg.com/angulartics2/-/angulartics2-12.2.0.tgz#79159693b4436905391e3b1e7d549c900408e175" + resolved "https://registry.npmjs.org/angulartics2/-/angulartics2-12.2.0.tgz" integrity sha512-1wl/cPA4PGYj42z80VIR+A0Hy3+rt13POzfTfZ83NUDx2KKbHjtTKS0O7u3umi10cqvi5tn4NTSYIFFJ1fI2Tw== dependencies: tslib "^2.3.0" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-html-community@^0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -2988,17 +2976,17 @@ anymatch@~3.1.2: "aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== arch@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -3006,42 +2994,55 @@ are-we-there-yet@^3.0.0: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== dependencies: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" -array-flatten@^2.1.0, array-flatten@^2.1.2: +array-flatten@^2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.4: +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.6: version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" @@ -3050,31 +3051,19 @@ array-includes@^3.1.4: get-intrinsic "^1.1.3" is-string "^1.0.7" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-union@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" + resolved "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz" integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.flat@^1.2.5: +array.prototype.flat@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" @@ -3082,119 +3071,136 @@ array.prototype.flat@^1.2.5: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0, assert-plus@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-each-series@0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-0.1.1.tgz#7617c1917401fd8ca4a28aadce3dbae98afeb432" + resolved "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz" integrity sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ== -async@^2.6.0, async@^2.6.4: +async@^2.6.0: version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +async@^2.6.4: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" async@^3.2.0, async@^3.2.3: version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== atob@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^10.4.13, autoprefixer@^10.4.2: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== + version "10.4.14" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.4.3: +"axe-core@^3 || ^4", axe-core@^4.4.3: version "4.6.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.6.3.tgz#fc0db6fdb65cc7a80ccf85286d91d64ababa3ece" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== -axios@0.21.4: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - axios@^0.27.2: version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: follow-redirects "^1.14.9" form-data "^4.0.0" axios@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.1.tgz#44cf04a3c9f0c2252ebd85975361c026cb9f864a" - integrity sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A== + version "1.3.5" + resolved "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz" + integrity sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@0.21.4: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + axobject-query@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== babel-loader@8.2.5: version "8.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz" integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: find-cache-dir "^3.3.1" @@ -3204,7 +3210,7 @@ babel-loader@8.2.5: babel-plugin-istanbul@6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -3215,7 +3221,7 @@ babel-plugin-istanbul@6.1.1: babel-plugin-polyfill-corejs2@^0.3.0: version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" @@ -3224,7 +3230,7 @@ babel-plugin-polyfill-corejs2@^0.3.0: babel-plugin-polyfill-corejs3@^0.5.0: version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz" integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.2" @@ -3232,53 +3238,53 @@ babel-plugin-polyfill-corejs3@^0.5.0: babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.2.0, base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@2.0.0, base64id@~2.0.0: +base64id@~2.0.0, base64id@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== basic-auth@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" batch-processor@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" + resolved "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz" integrity sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA== batch@0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" bent@~7.3.6: version "7.3.12" - resolved "https://registry.yarnpkg.com/bent/-/bent-7.3.12.tgz#e0a2775d4425e7674c64b78b242af4f49da6b035" + resolved "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz" integrity sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w== dependencies: bytesish "^0.4.1" @@ -3287,17 +3293,17 @@ bent@~7.3.6: big.js@^5.2.2: version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -3306,17 +3312,17 @@ bl@^4.0.3, bl@^4.1.0: blob-util@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + resolved "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz" integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== bluebird@^3.7.2: version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.1, body-parser@^1.19.0: +body-parser@^1.19.0, body-parser@1.20.1: version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" @@ -3333,9 +3339,9 @@ body-parser@1.20.1, body-parser@^1.19.0: unpipe "1.0.0" bonjour-service@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" - integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== + version "1.1.1" + resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== dependencies: array-flatten "^2.1.2" dns-equal "^1.0.0" @@ -3344,7 +3350,7 @@ bonjour-service@^1.0.11: bonjour@^3.5.0: version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== dependencies: array-flatten "^2.1.0" @@ -3356,17 +3362,17 @@ bonjour@^3.5.0: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bootstrap@^4.6.1: +bootstrap@^4.0.0, bootstrap@^4.6.1: version "4.6.2" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.6.2.tgz#8e0cd61611728a5bf65a3a2b8d6ff6c77d5d7479" + resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz" integrity sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -3374,40 +3380,39 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-sync-client@^2.27.10: - version "2.27.10" - resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.27.10.tgz#f06233ea66bd873b96664f001cbc49035022634d" - integrity sha512-KCFKA1YDj6cNul0VsA28apohtBsdk5Wv8T82ClOZPZMZWxPj4Ny5AUbrj9UlAb/k6pdxE5HABrWDhP9+cjt4HQ== +browser-sync-client@^2.29.1: + version "2.29.1" + resolved "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.1.tgz" + integrity sha512-aESnjt3rU7CZpzjyqzhIC2UJ3MVhzRis7cPKkGbyYWDf/wnbxyRa3fFenF3Qx9061/guY3HHhD67uiTVV26DVg== dependencies: etag "1.8.1" fresh "0.5.2" mitt "^1.1.3" - rxjs "^5.5.6" - typescript "^4.6.2" -browser-sync-ui@^2.27.10: - version "2.27.10" - resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-2.27.10.tgz#59dd6e436e17b743c99094ff5129306ab7ab5b79" - integrity sha512-elbJILq4Uo6OQv6gsvS3Y9vRAJlWu+h8j0JDkF0X/ua+3S6SVbbiWnZc8sNOFlG7yvVGIwBED3eaYQ0iBo1Dtw== +browser-sync-ui@^2.29.1: + version "2.29.1" + resolved "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.1.tgz" + integrity sha512-MB7SAiUgVUrhipO2xyO1sheC9H0+LKXPQ3L1tQWcZ3AgizBnUNKAqDZPSwe4grNSa8o8ImSAwJp7lMS6XYy1Dw== dependencies: async-each-series "0.1.1" + chalk "4.1.2" connect-history-api-fallback "^1" immutable "^3" server-destroy "1.0.1" @@ -3415,20 +3420,21 @@ browser-sync-ui@^2.27.10: stream-throttle "^0.1.3" browser-sync@^2.26.7: - version "2.27.10" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.27.10.tgz#3568d4f66afb0f68fee4a10902ecbbe8b2f680dd" - integrity sha512-xKm+6KJmJu6RuMWWbFkKwOCSqQOxYe3nOrFkKI5Tr/ZzjPxyU3pFShKK3tWnazBo/3lYQzN7fzjixG8fwJh1Xw== + version "2.29.1" + resolved "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.1.tgz" + integrity sha512-WXy9HMJVQaNUTPjmai330E2fnDA6W84l/vBILGkYu9yHXIpWw1gJYjdQWDfEhLFljYUHNTN9jM3GCej2T55m+g== dependencies: - browser-sync-client "^2.27.10" - browser-sync-ui "^2.27.10" + browser-sync-client "^2.29.1" + browser-sync-ui "^2.29.1" bs-recipes "1.3.4" bs-snippet-injector "^2.0.1" + chalk "4.1.2" chokidar "^3.5.1" connect "3.6.6" connect-history-api-fallback "^1" dev-ip "^1.0.1" easy-extender "^2.3.4" - eazy-logger "3.1.0" + eazy-logger "^4.0.1" etag "^1.8.1" fresh "^0.5.2" fs-extra "3.0.1" @@ -3438,7 +3444,7 @@ browser-sync@^2.26.7: micromatch "^4.0.2" opn "5.3.0" portscanner "2.2.0" - qs "6.2.3" + qs "^6.11.0" raw-body "^2.3.2" resp-modifier "6.0.2" rx "4.1.0" @@ -3447,47 +3453,47 @@ browser-sync@^2.26.7: serve-static "1.13.2" server-destroy "1.0.1" socket.io "^4.4.1" - ua-parser-js "1.0.2" + ua-parser-js "^1.0.33" yargs "^17.3.1" -browserslist@^4.14.5, browserslist@^4.19.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.9.1: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== +browserslist@^4.14.5, browserslist@^4.19.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1, "browserslist@>= 4.21.0": + version "4.21.5" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" bs-recipes@1.3.4: version "1.3.4" - resolved "https://registry.yarnpkg.com/bs-recipes/-/bs-recipes-1.3.4.tgz#0d2d4d48a718c8c044769fdc4f89592dc8b69585" + resolved "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz" integrity sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw== bs-snippet-injector@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz#61b5393f11f52559ed120693100343b6edb04dd5" + resolved "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz" integrity sha512-4u8IgB+L9L+S5hknOj3ddNSb42436gsnGm1AuM15B7CdbkpQTyVWgIM5/JUBiKiRwGOR86uo0Lu/OsX+SAlJmw== buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-indexof@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -3495,27 +3501,27 @@ buffer@^5.5.0, buffer@^5.6.0: builtins@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== bytes@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== bytesish@^0.4.1: version "0.4.4" - resolved "https://registry.yarnpkg.com/bytesish/-/bytesish-0.4.4.tgz#f3b535a0f1153747427aee27256748cff92347e6" + resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== -cacache@15.3.0, cacache@^15.0.5, cacache@^15.2.0: +cacache@^15.0.5, cacache@^15.2.0, cacache@15.3.0: version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== dependencies: "@npmcli/fs" "^1.0.0" @@ -3539,7 +3545,7 @@ cacache@15.3.0, cacache@^15.0.5, cacache@^15.2.0: cacache@^16.1.0: version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== dependencies: "@npmcli/fs" "^2.1.0" @@ -3563,12 +3569,12 @@ cacache@^16.1.0: cachedir@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -3576,62 +3582,91 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001299, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: - version "1.0.30001436" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz#22d7cbdbbbb60cdc4ca1030ccd6dea9f5de4848b" - integrity sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg== +caniuse-lite@^1.0.30001299, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001477" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz" + integrity sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ== caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== cerialize@0.1.18: version "0.1.18" - resolved "https://registry.yarnpkg.com/cerialize/-/cerialize-0.1.18.tgz#d0f4f1b61cec7e4ed16a3eda0cac2bc99787414d" + resolved "https://registry.npmjs.org/cerialize/-/cerialize-0.1.18.tgz" integrity sha512-C/hp4UoPrMK060251Pt/21axF9aL4ceJlg3+pThB68VghhRjOzBzy4f8R9AirXdNB4gpqgaV2deU3UaexInL5w== dependencies: typescript "^2.5.0" -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@~4.1.0: +chalk@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@~4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -3639,22 +3674,22 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@~4.1.0: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== charenc@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== check-more-types@^2.24.0: version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + resolved "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz" integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== cheerio-select@^1.5.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.6.0.tgz#489f36604112c722afa147dedd0d4609c09e1696" + resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz" integrity sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g== dependencies: css-select "^4.3.0" @@ -3665,7 +3700,7 @@ cheerio-select@^1.5.0: cheerio@1.0.0-rc.10: version "1.0.0-rc.10" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz" integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== dependencies: cheerio-select "^1.5.0" @@ -3676,9 +3711,9 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -3693,66 +3728,66 @@ cheerio@1.0.0-rc.10: chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^3.2.0: version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== circular-dependency-plugin@5.2.2: version "5.2.2" - resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" + resolved "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz" integrity sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ== circular-json@^0.5.0: version "0.5.9" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" + resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz" integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== classnames@^2.2.6: version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@3.1.0, cli-cursor@^3.1.0: +cli-cursor@^3.1.0, cli-cursor@3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-progress@^3.8.0: - version "3.11.2" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.11.2.tgz#f8c89bd157e74f3f2c43bcfb3505670b4d48fc77" - integrity sha512-lCPoS6ncgX4+rJu5bS3F/iCz17kZ9MPZ6dpuTtI0KXKABkhyXIdYB3Inby1OpaGti3YlI3EeEkM9AuWpelJrVA== + version "3.12.0" + resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" +cli-spinners@^2.5.0: + version "2.8.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.8.0.tgz" + integrity sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ== + cli-spinners@2.6.1: version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== - cli-table3@~0.6.1: version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== dependencies: string-width "^4.2.0" @@ -3761,7 +3796,7 @@ cli-table3@~0.6.1: cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -3769,12 +3804,12 @@ cli-truncate@^2.1.0: cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -3783,7 +3818,7 @@ cliui@^7.0.2: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -3792,7 +3827,7 @@ cliui@^8.0.1: clone-deep@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -3801,110 +3836,120 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clsx@^1.0.4, clsx@^1.1.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.16: version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== colors@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== - -commander@^2.2.0, commander@^2.20.0: +commander@^2.2.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== commander@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.0.0, commander@^7.2.0: +commander@^7.0.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== + comment-parser@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== common-tags@^1.8.0: version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compressible@~2.0.16: version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression-webpack-plugin@^9.2.0: version "9.2.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + resolved "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz" integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== dependencies: schema-utils "^4.0.0" @@ -3912,7 +3957,7 @@ compression-webpack-plugin@^9.2.0: compression@^1.7.4: version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -3925,32 +3970,22 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== connect-history-api-fallback@^1, connect-history-api-fallback@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== connect-history-api-fallback@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -connect@3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - integrity sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - connect@^3.7.0: version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== dependencies: debug "2.6.9" @@ -3958,31 +3993,41 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" +connect@3.6.6: + version "3.6.6" + resolved "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz" + integrity sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cookie-parser@1.4.5: version "1.4.5" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" + resolved "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz" integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== dependencies: cookie "0.4.0" @@ -3990,53 +4035,41 @@ cookie-parser@1.4.5: cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + cookie@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== cookie@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - copy-anything@^2.0.1: version "2.0.6" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== dependencies: is-what "^3.14.1" copy-to-clipboard@^3.3.1: version "3.3.3" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz" integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" -copy-webpack-plugin@10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz#115a41f913070ac236a1b576066204cbf35341a1" - integrity sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^12.0.2" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - copy-webpack-plugin@^6.4.1: version "6.4.1" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz#138cd9b436dbca0a6d071720d5414848992ec47e" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz" integrity sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA== dependencies: cacache "^15.0.5" @@ -4051,41 +4084,53 @@ copy-webpack-plugin@^6.4.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.1.tgz#0e710b09ebf689d719545ac36e49041850f943df" - integrity sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A== +copy-webpack-plugin@10.2.1: + version "10.2.1" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz" + integrity sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg== dependencies: - browserslist "^4.21.4" + fast-glob "^3.2.7" + glob-parent "^6.0.1" + globby "^12.0.2" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.30.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" + integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== + dependencies: + browserslist "^4.21.5" core-js-pure@^3.25.1: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.1.tgz#653f4d7130c427820dcecd3168b594e8bb095a33" - integrity sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ== + version "3.30.0" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.0.tgz" + integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== + +core-js@^3.7.0, core-js@^3.8.1: + version "3.30.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" + integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== core-js@3.20.3: version "3.20.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.3.tgz#c710d0a676e684522f3db4ee84e5e18a9d11d69a" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz" integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag== -core-js@^3.7.0: - version "3.26.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" - integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + cors@~2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -4093,7 +4138,7 @@ cors@~2.8.5: cosmiconfig@^7.0.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" @@ -4104,12 +4149,12 @@ cosmiconfig@^7.0.0: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== critters@0.0.16: version "0.0.16" - resolved "https://registry.yarnpkg.com/critters/-/critters-0.0.16.tgz#ffa2c5561a65b43c53b940036237ce72dcebfe93" + resolved "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz" integrity sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A== dependencies: chalk "^4.1.0" @@ -4121,14 +4166,14 @@ critters@0.0.16: cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -4137,33 +4182,33 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: crypt@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== css-blank-pseudo@^3.0.2, css-blank-pseudo@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz#36523b01c12a25d812df343a32c322d2a2324561" + resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz" integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== dependencies: postcss-selector-parser "^6.0.9" css-box-model@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" + resolved "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz" integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== dependencies: tiny-invariant "^1.0.6" css-has-pseudo@^3.0.3, css-has-pseudo@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz#57f6be91ca242d5c9020ee3e51bbb5b89fc7af73" + resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz" integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== dependencies: postcss-selector-parser "^6.0.9" css-loader@6.5.1: version "6.5.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.5.1.tgz#0c43d4fbe0d97f699c91e9818cb585759091d1b1" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz" integrity sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ== dependencies: icss-utils "^5.1.0" @@ -4177,12 +4222,12 @@ css-loader@6.5.1: css-prefers-color-scheme@^6.0.2, css-prefers-color-scheme@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" + resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== css-select@^4.2.0, css-select@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -4193,7 +4238,7 @@ css-select@^4.2.0, css-select@^4.3.0: css-vendor@^2.0.8: version "2.0.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" + resolved "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz" integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== dependencies: "@babel/runtime" "^7.8.3" @@ -4201,12 +4246,12 @@ css-vendor@^2.0.8: css-what@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== css@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + resolved "https://registry.npmjs.org/css/-/css-3.0.0.tgz" integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== dependencies: inherits "^2.0.4" @@ -4215,64 +4260,64 @@ css@^3.0.0: cssdb@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-5.1.0.tgz#ec728d5f5c0811debd0820cbebda505d43003400" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz" integrity sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw== cssdb@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.0.tgz#f44bd4abc430f0ff7f4c64b8a1fb857a753f77a8" - integrity sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg== + version "7.5.4" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" + integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssom@^0.4.4: version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== cssom@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz" integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" csstype@^2.5.2: version "2.6.21" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz" integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + version "3.1.2" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== custom-event@~1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + resolved "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz" integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== cypress-axe@^1.1.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.4.0.tgz#e67482bfe9e740796bf77c7823f19781a8a2faff" + resolved "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.4.0.tgz" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -cypress@12.9.0: +"cypress@^10 || ^11 || ^12", cypress@12.9.0: version "12.9.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.9.0.tgz#e6ab43cf329fd7c821ef7645517649d72ccf0a12" + resolved "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz" integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== dependencies: "@cypress/request" "^2.88.10" @@ -4320,14 +4365,14 @@ cypress@12.9.0: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" data-urls@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== dependencies: abab "^2.0.3" @@ -4336,7 +4381,7 @@ data-urls@^2.0.0: data-urls@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: abab "^2.0.6" @@ -4344,73 +4389,94 @@ data-urls@^3.0.1: whatwg-url "^11.0.0" date-fns-tz@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.7.tgz#e8e9d2aaceba5f1cc0e677631563081fdcb0e69a" - integrity sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g== + version "1.3.8" + resolved "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz" + integrity sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ== -date-fns@^2.29.3: +date-fns@^2.29.3, date-fns@>=2.0.0: version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== date-format@^4.0.14: version "4.0.14" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + resolved "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz" integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== dayjs@^1.10.4: version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -debug@2.6.9, debug@^2.2.0, debug@^2.6.9: +debug@^2.2.0: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" debug@4.3.3: version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decimal.js@^10.2.1, decimal.js@^10.3.1: version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== deep-equal@^1.0.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" @@ -4422,62 +4488,49 @@ deep-equal@^1.0.1: deep-freeze@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" + resolved "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz" integrity sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-gateway@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: execa "^5.0.0" defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + version "1.2.0" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -del@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - integrity sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ== - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - del@^6.0.0: version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== dependencies: globby "^11.0.1" @@ -4491,129 +4544,124 @@ del@^6.0.0: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@2.0.0, depd@~2.0.0: +depd@^2.0.0, depd@~2.0.0, depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@^1.1.2, depd@~1.1.2: +depd@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== dependency-graph@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" + resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - destroy@~1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-node@^2.0.4: version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== dev-ip@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" + resolved "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz" integrity sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A== di@^0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + resolved "https://registry.npmjs.org/di/-/di-0.0.1.tgz" integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - dnd-core@^10.0.2: version "10.0.2" - resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-10.0.2.tgz#051dc119682ea1185622f954667670d3d5f6a574" + resolved "https://registry.npmjs.org/dnd-core/-/dnd-core-10.0.2.tgz" integrity sha512-PrxEjxF0+6Y1n1n1Z9hSWZ1tvnDXv9syL+BccV1r1RC08uWNsyetf8AnWmUF3NgYPwy0HKQJwTqGkZK+1NlaFA== dependencies: "@react-dnd/asap" "^4.0.0" "@react-dnd/invariant" "^2.0.0" redux "^4.0.4" -dnd-multi-backend@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/dnd-multi-backend/-/dnd-multi-backend-5.1.1.tgz#0032761795c3df6a479989f002d8a7d92ad58094" - integrity sha512-+bdMsGAC1wlne4+AwTvr6eQ6Bp3St6hn0wp0BcpUMOMVTNM0S+n0Ha8S/qbpYK7XY+i0j439v+yaKO9g9aFvQg== +dnd-multi-backend@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/dnd-multi-backend/-/dnd-multi-backend-5.0.1.tgz" + integrity sha512-BAOj6fIeGfZPA1LreehaV8mUD7Ww0EpaKqSDRrZ5mZXLWLIxFPPT3bIvpJhHUCt0+lTrOqkXu11Hudh+gHXNUA== dns-equal@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^1.3.1: version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + version "5.5.0" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz" + integrity sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" dns-txt@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== dependencies: buffer-indexof "^1.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dom-helpers@^5.0.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" @@ -4621,7 +4669,7 @@ dom-helpers@^5.0.1: dom-serialize@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + resolved "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz" integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== dependencies: custom-event "~1.0.0" @@ -4631,92 +4679,117 @@ dom-serialize@^2.2.1: dom-serializer@^1.0.1, dom-serializer@^1.3.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" entities "^2.0.0" -domelementtype@^2.0.1, domelementtype@^2.2.0: +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domexception@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: webidl-conversions "^5.0.0" domexception@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: webidl-conversions "^7.0.0" domhandler@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== dependencies: domelementtype "^2.0.1" domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domino@^2.1.2: version "2.1.6" - resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" + resolved "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz" integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== dompurify@^2.0.11: - version "2.4.1" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.1.tgz#f9cb1a275fde9af6f2d0a2644ef648dd6847b631" - integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA== + version "2.4.5" + resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.4.5.tgz" + integrity sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA== domutils@^2.4.2, domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dotenv@~10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== duplexer@^0.1.1, duplexer@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== easy-extender@^2.3.4: version "2.3.4" - resolved "https://registry.yarnpkg.com/easy-extender/-/easy-extender-2.3.4.tgz#298789b64f9aaba62169c77a2b3b64b4c9589b8f" + resolved "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz" integrity sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q== dependencies: lodash "^4.17.10" -eazy-logger@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.1.0.tgz#b169eb56df714608fa114f164c8a2956bec9f0f3" - integrity sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ== +eazy-logger@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz" + integrity sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw== dependencies: - tfunk "^4.0.0" + chalk "4.1.2" ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -4724,77 +4797,77 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.5, ejs@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + version "3.1.9" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +electron-to-chromium@^1.4.284: + version "1.4.357" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.357.tgz" + integrity sha512-UTkCbNTAcGXABmEnQrGcW4m3cG6fcyBfD4KDF0iyEAlbrGZiY9dmslyDAGOD1Kr5biN2F743Y30aRCOtau35Vw== element-resize-detector@^1.2.1: version "1.2.4" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz#3e6c5982dd77508b5fa7e6d5c02170e26325c9b1" + resolved "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz" integrity sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg== dependencies: batch-processor "1.0.0" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojis-list@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.12, encoding@^0.1.13: +encoding@^0.1.0, encoding@^0.1.12, encoding@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -engine.io-client@~6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.2.3.tgz#a8cbdab003162529db85e9de31575097f6d29458" - integrity sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw== +engine.io-client@~6.4.0: + version "6.4.0" + resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz" + integrity sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" engine.io-parser "~5.0.3" - ws "~8.2.3" + ws "~8.11.0" xmlhttprequest-ssl "~2.0.0" engine.io-parser@~5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.4.tgz#0b13f704fa9271b3ec4f33112410d8f3f41d0fc0" - integrity sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg== + version "5.0.6" + resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz" + integrity sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw== -engine.io@~6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.2.1.tgz#e3f7826ebc4140db9bbaa9021ad6b1efb175878f" - integrity sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA== +engine.io@~6.4.1: + version "6.4.1" + resolved "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz" + integrity sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -4805,119 +4878,143 @@ engine.io@~6.2.1: cors "~2.8.5" debug "~4.3.1" engine.io-parser "~5.0.3" - ws "~8.2.3" + ws "~8.11.0" -enhanced-resolve@^5.10.0, enhanced-resolve@^5.9.2: +enhanced-resolve@^5.10.0: version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz" integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6, enquirer@~2.3.6: +enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3", enquirer@~2.3.6: version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" ent@~2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + resolved "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz" integrity sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA== entities@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0, entities@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + entities@~3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.7.3: version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== errno@^0.1.1: version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-stack-parser@^2.0.1: version "2.1.4" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: stackframe "^1.3.4" es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + version "1.21.2" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.0" get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" + has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" + is-typed-array "^1.1.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" es-module-lexer@^0.9.0: version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4926,112 +5023,22 @@ es-to-primitive@^1.2.1: es6-promisify@^6.0.0: version "6.1.1" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-6.1.1.tgz#46837651b7b06bf6fff893d03f29393668d01621" + resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz" integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== -esbuild-android-arm64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz#fb051169a63307d958aec85ad596cfc7d7770303" - integrity sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ== - esbuild-darwin-64@0.14.22: version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz#615ea0a9de67b57a293a7128d7ac83ee307a856d" + resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz" integrity sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw== -esbuild-darwin-arm64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz#82054dcfcecb15ccfd237093b8008e7745a99ad9" - integrity sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw== - -esbuild-freebsd-64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz#778a818c5b078d5cdd6bb6c0e0797217d196999b" - integrity sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A== - -esbuild-freebsd-arm64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz#18da93b9f3db2e036f72383bfe73b28b73bb332c" - integrity sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ== - -esbuild-linux-32@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz#d0d5d9f5bb3536e17ac097e9512019c65b7c0234" - integrity sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg== - -esbuild-linux-64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz#2773d540971999ea7f38107ef92fca753f6a8c30" - integrity sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg== - -esbuild-linux-arm64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz#5d4480ce6d6bffab1dd76a23158f5a5ab33e7ba4" - integrity sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A== - -esbuild-linux-arm@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz#c6391b3f7c8fa6d3b99a7e893ce0f45f3a921eef" - integrity sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g== - -esbuild-linux-mips64le@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz#2c8dabac355c502e86c38f9f292b3517d8e181f3" - integrity sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ== - -esbuild-linux-ppc64le@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz#69d71b2820d5c94306072dac6094bae38e77d1c0" - integrity sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng== - -esbuild-linux-riscv64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz#c0ec0fc3a23624deebf657781550d2329cec4213" - integrity sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ== - -esbuild-linux-s390x@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz#ec2af4572d63336cfb27f5a5c851fb1b6617dd91" - integrity sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw== - -esbuild-netbsd-64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz#0e283278e9fdbaa7f0930f93ee113d7759cd865e" - integrity sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA== - -esbuild-openbsd-64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz#2a73bba04e16d8ef278fbe2be85248e12a2f2cc2" - integrity sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA== - -esbuild-sunos-64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz#8fe03513b8b2e682a6d79d5e3ca5849651a3c1d8" - integrity sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g== - esbuild-wasm@0.14.22: version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz#9671d1355473b6688d00fe8ef6fa50274eff5465" + resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz" integrity sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw== -esbuild-windows-32@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz#a75df61e3e49df292a1842be8e877a3153ee644f" - integrity sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg== - -esbuild-windows-64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz#d06cf8bbe4945b8bf95a730d871e54a22f635941" - integrity sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw== - -esbuild-windows-arm64@0.14.22: - version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz#f8b1b05c548073be8413a5ecb12d7c2f6e717227" - integrity sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg== - esbuild@0.14.22: version "0.14.22" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.22.tgz#2b55fde89d7aa5aaaad791816d58ff9dfc5ed085" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz" integrity sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA== optionalDependencies: esbuild-android-arm64 "0.14.22" @@ -5056,32 +5063,32 @@ esbuild@0.14.22: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-goat@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-3.0.0.tgz#e8b5fb658553fe8a3c4959c316c6ebb8c842b19c" + resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz" integrity sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" @@ -5091,53 +5098,56 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" -eslint-module-utils@^2.7.3: +eslint-module-utils@^2.7.4: version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" eslint-plugin-deprecation@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.3.3.tgz#065b5d36ff220afe139f2b19af57454a13464731" - integrity sha512-Bbkv6ZN2cCthVXz/oZKPwsSY5S/CbgTLRG4Q2s2gpPpgNsT0uJ0dB5oLNiWzFYY8AgKX4ULxXFG1l/rDav9QFA== + version "1.4.1" + resolved "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.4.1.tgz" + integrity sha512-4vxTghWzxsBukPJVQupi6xlTuDc8Pyi1QlRCrFiLgwLPMJQW3cJCNaehJUKQqQFvuue5m4W27e179Y3Qjzeghg== dependencies: - "@typescript-eslint/experimental-utils" "^5.0.0" + "@typescript-eslint/utils" "^5.57.0" tslib "^2.3.1" tsutils "^3.21.0" eslint-plugin-import@^2.25.4: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + version "2.27.5" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" eslint-plugin-jsdoc@^39.6.4: - version "39.6.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.6.4.tgz#b940aebd3eea26884a0d341785d2dc3aba6a38a7" - integrity sha512-fskvdLCfwmPjHb6e+xNGDtGgbF8X7cDwMtVLAP2WwSf9Htrx68OAx31BESBM1FAwsN2HTQyYQq7m4aW4Q4Nlag== + version "39.9.1" + resolved "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-39.9.1.tgz" + integrity sha512-Rq2QY6BZP2meNIs48aZ3GlIlJgBqFCmR55+UBvaDkA3ZNQ0SvQXOs2QKkubakEijV8UbIVbVZKsOVN8G3MuqZw== dependencies: "@es-joy/jsdoccomment" "~0.36.1" comment-parser "1.3.1" @@ -5149,26 +5159,26 @@ eslint-plugin-jsdoc@^39.6.4: eslint-plugin-lodash@^7.4.0: version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz#14a761547f126c92ff56789662a20a44f8bb6290" + resolved "https://registry.npmjs.org/eslint-plugin-lodash/-/eslint-plugin-lodash-7.4.0.tgz" integrity sha512-Tl83UwVXqe1OVeBRKUeWcfg6/pCW1GTRObbdnbEJgYwjxp5Q92MEWQaH9+dmzbRt6kvYU1Mp893E79nJiCSM8A== dependencies: lodash "^4.17.21" eslint-plugin-unused-imports@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz#d8db8c4d0cfa0637a8b51ce3fd7d1b6bc3f08520" + resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz" integrity sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A== dependencies: eslint-rule-composer "^0.3.0" eslint-rule-composer@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@5.1.1, eslint-scope@^5.1.0, eslint-scope@^5.1.1: +eslint-scope@^5.1.0, eslint-scope@^5.1.1, eslint-scope@5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -5176,7 +5186,7 @@ eslint-scope@5.1.1, eslint-scope@^5.1.0, eslint-scope@^5.1.1: eslint-scope@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" @@ -5184,28 +5194,31 @@ eslint-scope@^7.1.1: eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@^8.2.0: - version "8.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" - integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.2.0, eslint@>=2, eslint@>=5: + version "8.38.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz" + integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== dependencies: - "@eslint/eslintrc" "^1.3.3" - "@humanwhocodes/config-array" "^0.11.6" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.38.0" + "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" @@ -5215,16 +5228,15 @@ eslint@^8.2.0: doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.15.0" + globals "^13.19.0" grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" @@ -5239,102 +5251,86 @@ eslint@^8.2.0: minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" esm@^3.2.25: version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== +espree@^9.5.1: + version "9.5.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== dependencies: acorn "^8.8.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.0, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@1.8.1, etag@^1.8.1, etag@~1.8.1: +etag@^1.8.1, etag@~1.8.1, etag@1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter-asyncresource@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz#734ff2e44bf448e627f7748f905d6bdd57bdb65b" + resolved "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz" integrity sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ== eventemitter2@6.4.7: version "6.4.7" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + resolved "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz" integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== eventemitter3@^4.0.0: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -5347,28 +5343,43 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + executable@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== dependencies: pify "^2.2.0" express-rate-limit@^5.1.3: version "5.5.1" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-5.5.1.tgz#110c23f6a65dfa96ab468eda95e71697bc6987a2" + resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz" integrity sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg== express-static-gzip@^2.1.5: version "2.1.7" - resolved "https://registry.yarnpkg.com/express-static-gzip/-/express-static-gzip-2.1.7.tgz#5904824a07950ba741ec3a23a21839dd04c63506" + resolved "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.1.7.tgz" integrity sha512-QOCZUC+lhPPCjIJKpQGu1Oa61Axg9Mq09Qvit8Of7kzpMuwDeMSqjjQteQS3OVw/GkENBoSBheuQDWPlngImvw== dependencies: serve-static "^1.14.1" -express@^4.17.1, express@^4.17.3: +express@^4.15.2, express@^4.17.1, express@^4.17.3: version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" @@ -5405,12 +5416,12 @@ express@^4.17.1, express@^4.17.3: extend@^3.0.0, extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -5419,7 +5430,7 @@ external-editor@^3.0.3: extract-zip@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: debug "^4.1.1" @@ -5428,25 +5439,20 @@ extract-zip@2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: +extsprintf@^1.2.0, extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@^3.2.4, fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5454,10 +5460,10 @@ fast-glob@3.2.7: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.4, fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5467,86 +5473,86 @@ fast-glob@^3.2.4, fast-glob@^3.2.7, fast-glob@^3.2.9: fast-json-patch@^3.0.0-1: version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" + resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz" integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== -fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-memoize@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + resolved "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz" integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== fastest-levenshtein@^1.0.12: version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" - integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" faye-websocket@^0.11.3: version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" -figures@3.2.0, figures@^3.0.0, figures@^3.2.0: +figures@^3.0.0, figures@^3.2.0, figures@3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" filelist@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" filesize@^6.1.0: version "6.4.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" + resolved "https://registry.npmjs.org/filesize/-/filesize-6.4.0.tgz" integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz" integrity sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw== dependencies: debug "2.6.9" @@ -5559,7 +5565,7 @@ finalhandler@1.1.0: finalhandler@1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" @@ -5572,7 +5578,7 @@ finalhandler@1.1.2: finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -5585,7 +5591,7 @@ finalhandler@1.2.0: find-cache-dir@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" @@ -5594,7 +5600,7 @@ find-cache-dir@^3.3.1: find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -5602,7 +5608,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -5610,7 +5616,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -5618,27 +5624,34 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0, flatted@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9, follow-redirects@^1.15.0: version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" @@ -5647,7 +5660,7 @@ form-data@^3.0.0: form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -5656,7 +5669,7 @@ form-data@^4.0.0: form-data@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -5665,37 +5678,28 @@ form-data@~2.3.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fraction.js@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== -fresh@0.5.2, fresh@^0.5.2: +fresh@^0.5.2, fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== +fs-extra@^11.1.0: + version "11.1.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5703,7 +5707,7 @@ fs-extra@^10.1.0: fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -5712,7 +5716,7 @@ fs-extra@^8.1.0: fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -5720,41 +5724,50 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" + integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-monkey@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fscreen@^1.0.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/fscreen/-/fscreen-1.2.0.tgz#1a8c88e06bc16a07b473ad96196fb06d6657f59e" + resolved "https://registry.npmjs.org/fscreen/-/fscreen-1.2.0.tgz" integrity sha512-hlq4+BU0hlPmwsFjwGGzZ+OZ9N/wq9Ljg/sq3pX+2CD7hrJsX9tJgWWK/wiNTFM212CLHWhicOoqwXyZGGetJg== fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== dependencies: call-bind "^1.0.2" @@ -5764,17 +5777,17 @@ function.prototype.name@^1.1.5: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -5788,18 +5801,18 @@ gauge@^4.0.3: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -5807,24 +5820,31 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@ get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -5832,52 +5852,54 @@ get-symbol-description@^1.0.0: getos@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + resolved "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz" integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== dependencies: async "^3.2.0" getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1, glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0, glob@7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -5887,21 +5909,32 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^5.0.1" + once "^1.3.0" + +glob@7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: +glob@8.0.3: version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: fs.realpath "^1.0.0" @@ -5912,26 +5945,57 @@ glob@^8.0.1: global-dirs@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== dependencies: ini "2.0.0" globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.15.0: - version "13.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" - integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^11.0.4: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -5943,7 +6007,7 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: globby@^12.0.2: version "12.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22" + resolved "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz" integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== dependencies: array-union "^3.0.1" @@ -5953,116 +6017,96 @@ globby@^12.0.2: merge2 "^1.4.1" slash "^4.0.0" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - integrity sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + get-intrinsic "^1.1.3" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== guess-parser@^0.4.12: version "0.4.22" - resolved "https://registry.yarnpkg.com/guess-parser/-/guess-parser-0.4.22.tgz#c26ab9e21b69bbc761960c5a1511476ae85428eb" + resolved "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz" integrity sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg== dependencies: "@wessberg/ts-evaluator" "0.0.27" gzip-size@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: duplexer "^0.1.2" handle-thing@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hdr-histogram-js@^2.0.1: version "2.0.3" - resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz#0b860534655722b6e3f3e7dca7b78867cf43dcb5" + resolved "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz" integrity sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g== dependencies: "@assemblyscript/loader" "^0.10.1" @@ -6071,26 +6115,26 @@ hdr-histogram-js@^2.0.1: hdr-histogram-percentiles-obj@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c" + resolved "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz" integrity sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw== hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" hpack.js@^2.1.6: version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" @@ -6100,38 +6144,38 @@ hpack.js@^2.1.6: html-encoding-sniffer@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: whatwg-encoding "^1.0.5" html-encoding-sniffer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: whatwg-encoding "^2.0.0" html-entities@^2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-parse-stringify@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + resolved "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== dependencies: void-elements "3.1.0" htmlparser2@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz" integrity sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ== dependencies: domelementtype "^2.0.1" @@ -6139,9 +6183,9 @@ htmlparser2@^5.0.0: domutils "^2.4.2" entities "^2.0.0" -htmlparser2@^6.0.0, htmlparser2@^6.1.0: +htmlparser2@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -6149,19 +6193,39 @@ htmlparser2@^6.0.0, htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +htmlparser2@^8.0.0: + version "8.0.2" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + http-cache-semantics@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -6170,24 +6234,14 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -6196,7 +6250,7 @@ http-proxy-agent@^4.0.1: http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -6205,7 +6259,7 @@ http-proxy-agent@^5.0.0: http-proxy-middleware@^1.0.5: version "1.3.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz#43700d6d9eecb7419bf086a128d0f7205d9eb665" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz" integrity sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg== dependencies: "@types/http-proxy" "^1.17.5" @@ -6214,9 +6268,20 @@ http-proxy-middleware@^1.0.5: is-plain-obj "^3.0.0" micromatch "^4.0.2" -http-proxy-middleware@^2.0.0, http-proxy-middleware@^2.0.3: +http-proxy-middleware@^2.0.0: version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== dependencies: "@types/http-proxy" "^1.17.8" @@ -6227,152 +6292,157 @@ http-proxy-middleware@^2.0.0, http-proxy-middleware@^2.0.3: http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.3.6: version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== dependencies: assert-plus "^1.0.0" jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +https-proxy-agent@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: agent-base "6" debug "4" human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" hyphenate-style-name@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -i18next@^19.5.0: +i18next@^19.5.0, "i18next@>= 19.0.0": version "19.9.2" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" + resolved "https://registry.npmjs.org/i18next/-/i18next-19.9.2.tgz" integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== dependencies: "@babel/runtime" "^7.12.0" icomcom-react@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/icomcom-react/-/icomcom-react-1.0.1.tgz#6c513655bc576621930e31d19ddb718c3b7439f4" + resolved "https://registry.npmjs.org/icomcom-react/-/icomcom-react-1.0.1.tgz" integrity sha512-Xbz81qZ+er8RYZ6DFMmXxCl9YjxNWngNfPANTSOvzYNrQDieYvBZi+nv1MspI/ze+PAzfHUrmDcUii5RGCUifg== dependencies: prop-types "^15.6.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore-walk@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz" integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== dependencies: minimatch "^3.0.4" +ignore@^5.0.4, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + ignore@5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -ignore@^5.0.4, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" - integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== - image-size@~0.5.0: version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== immutability-helper@^3.0.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-3.1.1.tgz#2b86b2286ed3b1241c9e23b7b21e0444f52f77b7" + resolved "https://registry.npmjs.org/immutability-helper/-/immutability-helper-3.1.1.tgz" integrity sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ== immutable@^3: version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + resolved "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz" integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== immutable@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + version "4.3.0" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz" + integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -6380,7 +6450,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-local@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -6388,50 +6458,45 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inquirer@8.2.0: version "8.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz" integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== dependencies: ansi-escapes "^4.2.1" @@ -6449,82 +6514,91 @@ inquirer@8.2.0: strip-ansi "^6.0.0" through "^2.3.6" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" interpret@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== intersection-observer@^0.10.0: version "0.10.0" - resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.10.0.tgz#4d11d63c1ff67e21e62987be24d55218da1a1a69" + resolved "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.10.0.tgz" integrity sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ== invariant@^2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" ip@^1.1.0: version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-arguments@^1.0.4: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -6532,65 +6606,65 @@ is-boolean-object@^1.1.0: is-buffer@~1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" -is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0, is-core-module@^2.8.1: + version "2.12.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + resolved "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz" integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== is-installed-globally@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: global-dirs "^3.0.0" @@ -6598,92 +6672,73 @@ is-installed-globally@~0.4.0: is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-like@^1.0.3: version "1.0.8" - resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" + resolved "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz" integrity sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA== dependencies: lodash.isfinite "^3.3.2" is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== - is-path-cwd@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.0.4, is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -6691,92 +6746,103 @@ is-regex@^1.0.4, is-regex@^1.1.4: is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-what@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + resolved "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz" integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== is-wsl@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isbinaryfile@^4.0.8: version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== isbot@^3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.5.tgz#a749980d9dfba9ebcc03ee7b548d1f24dd8c9f1e" - integrity sha512-BchONELXt6yMad++BwGpa0oQxo/uD0keL7N15cYVf0A1oMIoNQ79OqeYdPMFWDrNhCqCbRuw9Y9F3QBjvAxZ5g== + version "3.6.8" + resolved "https://registry.npmjs.org/isbot/-/isbot-3.6.8.tgz" + integrity sha512-V8XUXN0/UYxfgrui4o38pmOve2eO/1KjluxR1G8Qnu5gqlUiNrvtX06t1W5n8vFtrtKfHj96iFYuPL39jXUe8g== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isomorphic-unfetch@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + resolved "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz" integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== dependencies: node-fetch "^2.6.1" @@ -6784,22 +6850,22 @@ isomorphic-unfetch@^3.0.0: isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz" integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4: version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -6810,7 +6876,7 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -6819,7 +6885,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^3.0.6: version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz" integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== dependencies: debug "^4.1.1" @@ -6830,7 +6896,7 @@ istanbul-lib-source-maps@^3.0.6: istanbul-reports@^3.0.2: version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" @@ -6838,7 +6904,7 @@ istanbul-reports@^3.0.2: jake@^10.8.5: version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== dependencies: async "^3.2.3" @@ -6846,21 +6912,21 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jasmine-core@^3.6.0, jasmine-core@^3.8.0: +jasmine-core@^3.6.0, jasmine-core@^3.8.0, jasmine-core@>=3.8: version "3.99.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.99.1.tgz#5bfa4b2d76618868bfac4c8ff08bb26fffa4120d" + resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz" integrity sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg== jasmine-marbles@0.9.2: version "0.9.2" - resolved "https://registry.yarnpkg.com/jasmine-marbles/-/jasmine-marbles-0.9.2.tgz#5adfee5f72c7f24270687fa64a6e8a8613ffa841" + resolved "https://registry.npmjs.org/jasmine-marbles/-/jasmine-marbles-0.9.2.tgz" integrity sha512-T7RjG4fRsdiGGzbQZ6Kj39qYt6O1/KIcR4FkUNsD3DUGkd/AzpwzN+xtk0DXlLWEz5BaVdK1SzMgQDVw879c4Q== dependencies: lodash "^4.17.20" jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -6869,80 +6935,55 @@ jest-worker@^27.4.5: js-cookie@2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== + version "4.4.0" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.13.1: +js-yaml@^3.10.0: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0, js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsdoc-type-pratt-parser@~3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz#a4a56bdc6e82e5865ffd9febc5b1a227ff28e67e" + resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz" integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== -jsdom@19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-19.0.0.tgz#93e67c149fe26816d38a849ea30ac93677e16b6a" - integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== - dependencies: - abab "^2.0.5" - acorn "^8.5.0" - acorn-globals "^6.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.1" - decimal.js "^10.3.1" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - ws "^8.2.3" - xml-name-validator "^4.0.0" - jsdom@^16.4.0: version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== dependencies: abab "^2.0.5" @@ -6973,90 +7014,118 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" +jsdom@19.0.0: + version "19.0.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz" + integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== + dependencies: + abab "^2.0.5" + acorn "^8.5.0" + acorn-globals "^6.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.1" + decimal.js "^10.3.1" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^10.0.0" + ws "^8.2.3" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab" - integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ== + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@3.0.0: +jsonc-parser@^3.0.0, jsonc-parser@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== -jsonc-parser@3.2.0, jsonc-parser@^3.0.0: +jsonc-parser@3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" integrity sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -7065,27 +7134,17 @@ jsonfile@^6.0.1: jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsonschema@1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - jsprim@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== dependencies: assert-plus "1.0.0" @@ -7094,76 +7153,76 @@ jsprim@^2.0.2: verror "1.10.0" jss-plugin-camel-case@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz#76dddfa32f9e62d17daa4e3504991fd0933b89e1" - integrity sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz" + integrity sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.9.2" + jss "10.10.0" jss-plugin-default-unit@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz#3e7f4a1506b18d8fe231554fd982439feb2a9c53" - integrity sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz" + integrity sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" jss-plugin-global@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz#e7f2ad4a5e8e674fb703b04b57a570b8c3e5c2c2" - integrity sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz" + integrity sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" jss-plugin-nested@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz#3aa2502816089ecf3981e1a07c49b276d67dca63" - integrity sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz" + integrity sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" tiny-warning "^1.0.2" jss-plugin-props-sort@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz#645f6c8f179309667b3e6212f66b59a32fb3f01f" - integrity sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz" + integrity sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" jss-plugin-rule-value-function@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz#9afe07596e477123cbf11120776be6a64494541f" - integrity sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz" + integrity sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.2" + jss "10.10.0" tiny-warning "^1.0.2" jss-plugin-vendor-prefixer@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz#410a0f3b9f8dbbfba58f4d329134df4849aa1237" - integrity sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA== + version "10.10.0" + resolved "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz" + integrity sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.9.2" + jss "10.10.0" jss-rtl@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/jss-rtl/-/jss-rtl-0.3.0.tgz#386961615956f9655bd5e9ec7e9d08bef223e4af" + resolved "https://registry.npmjs.org/jss-rtl/-/jss-rtl-0.3.0.tgz" integrity sha512-rg9jJmP1bAyhNOAp+BDZgOP/lMm4+oQ76qGueupDQ68Wq+G+6SGvCZvhIEg8OHSONRWOwFT6skCI+APGi8DgmA== dependencies: rtl-css-js "^1.13.1" -jss@10.9.2, jss@^10.3.0, jss@^10.5.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.2.tgz#9379be1f195ef98011dfd31f9448251bd61b95a9" - integrity sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg== +jss@^10.0.0, jss@^10.3.0, jss@^10.5.1, jss@10.10.0: + version "10.10.0" + resolved "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz" + integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== dependencies: "@babel/runtime" "^7.3.1" csstype "^3.0.2" @@ -7172,7 +7231,7 @@ jss@10.9.2, jss@^10.3.0, jss@^10.5.1: juice@^8.0.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/juice/-/juice-8.1.0.tgz#4ea23362522fe06418229943237ee3751a4fca70" + resolved "https://registry.npmjs.org/juice/-/juice-8.1.0.tgz" integrity sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA== dependencies: cheerio "1.0.0-rc.10" @@ -7183,19 +7242,19 @@ juice@^8.0.0: jwt-decode@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + resolved "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz" integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== karma-chrome-launcher@~3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz#baca9cc071b1562a1db241827257bfe5cab597ea" + resolved "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz" integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== dependencies: which "^1.2.1" karma-coverage-istanbul-reporter@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz#f3b5303553aadc8e681d40d360dfdc19bc7e9fe9" + resolved "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz" integrity sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -7206,19 +7265,19 @@ karma-coverage-istanbul-reporter@~3.0.2: karma-jasmine-html-reporter@^1.5.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz#52c489a74d760934a1089bfa5ea4a8fcb84cc28b" + resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz" integrity sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ== -karma-jasmine@~4.0.0: +karma-jasmine@>=1.1, karma-jasmine@~4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-4.0.2.tgz#386db2a3e1acc0af5265c711f673f78f1e4938de" + resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz" integrity sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g== dependencies: jasmine-core "^3.6.0" karma-mocha-reporter@2.2.5: version "2.2.5" - resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560" + resolved "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz" integrity sha512-Hr6nhkIp0GIJJrvzY8JFeHpQZNseuIakGac4bpw8K1+5F0tLb6l7uvXRa8mt2Z+NVwYgCct4QAfp2R2QP6o00w== dependencies: chalk "^2.1.0" @@ -7227,14 +7286,14 @@ karma-mocha-reporter@2.2.5: karma-source-map-support@1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz#58526ceccf7e8730e56effd97a4de8d712ac0d6b" + resolved "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz" integrity sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A== dependencies: source-map-support "^0.5.5" -karma@^6.3.14: +karma@*, karma@^6.3.0, karma@^6.3.14, karma@>=0.13, karma@>=0.9: version "6.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.1.tgz#f2253716dd3a41aaa813fa9f54b6ee047e1127d9" + resolved "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz" integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== dependencies: "@colors/colors" "1.5.0" @@ -7264,39 +7323,47 @@ karma@^6.3.14: kind-of@^6.0.2: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klaro@^0.7.18: version "0.7.18" - resolved "https://registry.yarnpkg.com/klaro/-/klaro-0.7.18.tgz#fef3a05fcd656451b941e11459f37d6c336e84c0" + resolved "https://registry.npmjs.org/klaro/-/klaro-0.7.18.tgz" integrity sha512-Q5nehkGeZuFerisW4oeeB1ax6dHDszWckR70EcxKvhFiJQ61CM0WBSo20yLbdvz8N9MFsOFu4RNCO9JsbkCxgQ== kleur@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== klona@^2.0.4, klona@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + version "2.0.6" + resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" lazy-ass@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== less-loader@10.2.0: version "10.2.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-10.2.0.tgz#97286d8797dc3dc05b1d16b0ecec5f968bdd4e32" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz" integrity sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg== dependencies: klona "^2.0.4" -less@4.1.2: +"less@^3.5.0 || ^4.0.0", less@4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/less/-/less-4.1.2.tgz#6099ee584999750c2624b65f80145f8674e4b4b0" + resolved "https://registry.npmjs.org/less/-/less-4.1.2.tgz" integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA== dependencies: copy-anything "^2.0.1" @@ -7313,7 +7380,7 @@ less@4.1.2: levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -7321,7 +7388,7 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" @@ -7329,31 +7396,36 @@ levn@~0.3.0: license-webpack-plugin@4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz#1e18442ed20b754b82f1adeff42249b81d11aec6" + resolved "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz" integrity sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw== dependencies: webpack-sources "^3.0.0" limiter@^1.0.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + resolved "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz" integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +lines-and-columns@~2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + linkify-it@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz" integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== dependencies: uc.micro "^1.0.1" listr2@^3.8.3: version "3.14.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + resolved "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz" integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== dependencies: cli-truncate "^2.1.0" @@ -7367,26 +7439,26 @@ listr2@^3.8.3: loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - loader-utils@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" +loader-utils@3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + localtunnel@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-2.0.2.tgz#528d50087151c4790f89c2db374fe7b0a48501f0" + resolved "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz" integrity sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug== dependencies: axios "0.21.4" @@ -7396,53 +7468,53 @@ localtunnel@^2.0.1: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.isfinite@^3.3.2: version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" + resolved "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz" integrity sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.once@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz" integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -7450,7 +7522,7 @@ log-symbols@^4.0.0, log-symbols@^4.1.0: log-update@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" @@ -7459,52 +7531,59 @@ log-update@^4.0.0: wrap-ansi "^6.2.0" log4js@^6.4.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.7.1.tgz#06e12b1ac915dd1067146ffad8215f666f7d2c51" - integrity sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ== + version "6.9.1" + resolved "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== dependencies: date-format "^4.0.14" debug "^4.3.4" flatted "^3.2.7" rfdc "^1.3.0" - streamroller "^3.1.3" + streamroller "^3.1.5" loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.14.1, lru-cache@^7.7.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - -magic-string@0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" + version "7.18.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== magic-string@^0.26.0: version "0.26.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz" integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== dependencies: sourcemap-codec "^1.4.8" +magic-string@0.25.7: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" @@ -7512,19 +7591,19 @@ make-dir@^2.1.0: make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^10.0.1: version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== dependencies: agentkeepalive "^4.2.1" @@ -7546,7 +7625,7 @@ make-fetch-happen@^10.0.1: make-fetch-happen@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== dependencies: agentkeepalive "^4.1.3" @@ -7567,9 +7646,9 @@ make-fetch-happen@^9.1.0: ssri "^8.0.0" manifesto.js@^4.2.0: - version "4.2.16" - resolved "https://registry.yarnpkg.com/manifesto.js/-/manifesto.js-4.2.16.tgz#084adf6662ac2b4df41a44c29939442acc6b08ae" - integrity sha512-eDwA1nv2rF0VlsHgXV+/La8XunOl0rYxBiLWDUhvNLHpqFctmjJ2PAMpwnq+SptzEL4HKHXsqcKl4KVBljFZhA== + version "4.2.17" + resolved "https://registry.npmjs.org/manifesto.js/-/manifesto.js-4.2.17.tgz" + integrity sha512-UjctsJ2PkgwGDUQ/ZzvyObXJO/yiFYwiz49xrzkayi9fhrwUVC3Vc0aQyGm723BZTl5nKYJQ8YdEhJRp08xOtA== dependencies: "@edsilv/http-status-codes" "^1.0.3" "@iiif/vocabulary" "^1.0.26" @@ -7578,7 +7657,7 @@ manifesto.js@^4.2.0: markdown-it-mathjax3@^4.3.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz#1e34aa86f8560b283fd283008334adc2d6b05a37" + resolved "https://registry.npmjs.org/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz" integrity sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w== dependencies: juice "^8.0.0" @@ -7586,7 +7665,7 @@ markdown-it-mathjax3@^4.3.1: markdown-it@^13.0.1: version "13.0.1" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz" integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== dependencies: argparse "^2.0.1" @@ -7597,7 +7676,7 @@ markdown-it@^13.0.1: mathjax-full@^3.2.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.2.tgz#43f02e55219db393030985d2b6537ceae82f1fa7" + resolved "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz" integrity sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w== dependencies: esm "^3.2.25" @@ -7607,7 +7686,7 @@ mathjax-full@^3.2.0: md5@^2.2.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: charenc "0.0.2" @@ -7616,144 +7695,149 @@ md5@^2.2.1: mdurl@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.2.2, memfs@^3.4.3: - version "3.4.12" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.12.tgz#d00f8ad8dab132dc277c659dc85bfd14b07d03bd" - integrity sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw== + version "3.5.0" + resolved "https://registry.npmjs.org/memfs/-/memfs-3.5.0.tgz" + integrity sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA== dependencies: fs-monkey "^1.0.3" -"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: +memoize-one@^5.1.1, "memoize-one@>=3.1.1 <6": version "5.2.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== mensch@^0.3.4: version "0.3.4" - resolved "https://registry.yarnpkg.com/mensch/-/mensch-0.3.4.tgz#770f91b46cb16ea5b204ee735768c3f0c491fecd" + resolved "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz" integrity sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== mhchemparser@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.1.1.tgz#a2142fdab37a02ec8d1b48a445059287790becd5" + resolved "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.1.1.tgz" integrity sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA== micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== - -mime@1.6.0, mime@^1.4.1: +mime@^1.4.1, mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.6, mime@^2.5.2: +mime@^2.4.6: version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mini-css-extract-plugin@2.5.3: version "2.5.3" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz#c5c79f9b22ce9b4f164e9492267358dbe35376d9" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz" integrity sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw== dependencies: schema-utils "^4.0.0" minimalistic-assert@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" - integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== dependencies: minipass "^3.1.0" @@ -7764,7 +7848,7 @@ minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: minipass-fetch@^2.0.3: version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== dependencies: minipass "^3.1.6" @@ -7775,14 +7859,14 @@ minipass-fetch@^2.0.3: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-json-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: jsonparse "^1.3.1" @@ -7790,28 +7874,33 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" +minipass@^4.0.0: + version "4.2.7" + resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.7.tgz" + integrity sha512-ScVIgqHcXRMyfflqHmEW0bm8z8rb5McHyOY3ewX9JBgZaR77G7nxq9L/mtV96/QbAAwtbCAHVVLzD1kkyfFQEw== + minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -7819,17 +7908,17 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: mirador-dl-plugin@^0.13.0: version "0.13.0" - resolved "https://registry.yarnpkg.com/mirador-dl-plugin/-/mirador-dl-plugin-0.13.0.tgz#9a6cb0fa3c566a2a1ebe1ad9caa1ff590ff22689" + resolved "https://registry.npmjs.org/mirador-dl-plugin/-/mirador-dl-plugin-0.13.0.tgz" integrity sha512-I/6etIvpTtO1zgjxx2uEUFoyB9NxQ43JWg8CMkKmZqblW7AAeFqRn1/zUlQH7N8KFZft9Rah6D8qxtuNAo9jmA== mirador-share-plugin@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/mirador-share-plugin/-/mirador-share-plugin-0.11.0.tgz#13e2f654e38839044382acad42d9329e91a8cd5e" + resolved "https://registry.npmjs.org/mirador-share-plugin/-/mirador-share-plugin-0.11.0.tgz" integrity sha512-fHcdDXyrtfy5pn1zdQNX9BvE5Tjup66eQwyNippE5PMaP8ImUcrFaSL+mStdn+v6agsHcsdRqLhseZ0XWgEuAw== -mirador@^3.3.0: +mirador@^3.0.0-beta.0, mirador@^3.0.0-rc.7, mirador@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/mirador/-/mirador-3.3.0.tgz#7a957a1db1a5388b2b8cafab00db4eb9f97557b9" + resolved "https://registry.npmjs.org/mirador/-/mirador-3.3.0.tgz" integrity sha512-BmGfRnWJ45B+vtiAwcFT7n9nKialfejE9UvuUK0NorO37ShArpsKr3yVSD4jQASwSR4DRRpPEG21jOk4WN7H3w== dependencies: "@material-ui/core" "^4.11.0" @@ -7878,29 +7967,36 @@ mirador@^3.3.0: mitt@^1.1.3: version "1.2.0" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" + resolved "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz" integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== mj-context-menu@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69" + resolved "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz" integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA== -mkdirp@^0.5.5, mkdirp@^0.5.6: +mkdirp@^0.5.5: version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^0.5.6: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== morgan@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: basic-auth "~2.0.1" @@ -7911,32 +8007,32 @@ morgan@^1.10.0: mrmime@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +ms@^2.0.0, ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns-service-types@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== multicast-dns@^6.0.1: version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== dependencies: dns-packet "^1.3.1" @@ -7944,7 +8040,7 @@ multicast-dns@^6.0.1: multicast-dns@^7.2.5: version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" @@ -7952,92 +8048,92 @@ multicast-dns@^7.2.5: mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nanoid@^3.1.30, nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + version "3.3.6" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== needle@^2.5.2: version "2.9.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + resolved "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz" integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: +negotiator@^0.6.2, negotiator@^0.6.3, negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== ng-mocks@^13.1.1: version "13.5.2" - resolved "https://registry.yarnpkg.com/ng-mocks/-/ng-mocks-13.5.2.tgz#e0d16c4810623b4b096ede31209966e628620d28" + resolved "https://registry.npmjs.org/ng-mocks/-/ng-mocks-13.5.2.tgz" integrity sha512-mn9qkef166cKmg5k1/jY4AlXEGEPx/cdWXKDdSrs/Fett+nLEAx70uD1LJrpQ35PY6k0v6AUd4fbZX5OaoFNRg== ng2-file-upload@1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/ng2-file-upload/-/ng2-file-upload-1.4.0.tgz#8dea28d573234c52af474ad2a4001b335271e5c4" + resolved "https://registry.npmjs.org/ng2-file-upload/-/ng2-file-upload-1.4.0.tgz" integrity sha512-3J/KPU/tyh/ad6TFeUbrxX+SihUj0iOEt2Zsg4EX7mB3GFiQscXOfcUOxCkBtPWWWaqt3azrYbVGzsYa3/7NzQ== dependencies: tslib "^1.9.0" ng2-nouislider@^1.8.3: version "1.8.3" - resolved "https://registry.yarnpkg.com/ng2-nouislider/-/ng2-nouislider-1.8.3.tgz#c9c1ec77b6b5a909f87368ba799914208baa13a6" + resolved "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-1.8.3.tgz" integrity sha512-Vl8tHCcJ/ioJLAs2t6FBC35sZq1P/O5ZdqdFwYxOCOMVbILGWNg+2gWZIjFstvv9pqb/mVvVUYe6qGG/mA/RBQ== ngx-infinite-scroll@^10.0.1: version "10.0.1" - resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz#6f51f2f8775a7c50d1dd8bad125d4e748abbe880" + resolved "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz" integrity sha512-7is0eJZ9kJPsaHohRmMhJ/QFHAW9jp9twO5HcHRvFM/Yl/R8QCiokgjwmH0/CR3MuxUanxfHZMfO3PbYTwlBEg== dependencies: "@scarf/scarf" "^1.1.0" opencollective-postinstall "^2.0.2" -ngx-mask@^13.1.7: +ngx-mask@^13.0.0, ngx-mask@^13.1.7: version "13.1.15" - resolved "https://registry.yarnpkg.com/ngx-mask/-/ngx-mask-13.1.15.tgz#1bfd96772f72eabd70ae186335b5e6804789ee23" + resolved "https://registry.npmjs.org/ngx-mask/-/ngx-mask-13.1.15.tgz" integrity sha512-fplyzkFa6lFTzPo/AHaI3TBQxTMdcqQClR9BLLAWTvCyDZkV28fLqWkpIpy0VvPc9ADogFpJJj7R1356mszjag== dependencies: tslib "^2.3.0" ngx-pagination@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/ngx-pagination/-/ngx-pagination-5.0.0.tgz#a4b4c150a70aef17ccd825e4543e174a974bbd14" + resolved "https://registry.npmjs.org/ngx-pagination/-/ngx-pagination-5.0.0.tgz" integrity sha512-Ur0pTWRe2ZXoJ8impEzo0IZKxY5aEcQfSmL5uBqW1rHI2J6nfzgZAHsSLagKHFGchXq0PkRlDVVMcIaNxYJwvQ== ngx-sortablejs@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/ngx-sortablejs/-/ngx-sortablejs-11.1.0.tgz#14e50c48db908c1cb4b37722b28c2d3867c6140a" + resolved "https://registry.npmjs.org/ngx-sortablejs/-/ngx-sortablejs-11.1.0.tgz" integrity sha512-eM4dHwWSmXDcvF5gUmyMMQ0qqcqBXWCSZ9IRpqx4UkBKfo4N7pk/QuYh5io2fXVHWVFDaxW1yhn2FNpqxV6Jqw== dependencies: tslib "^2.0.0" ngx-ui-switch@^13.0.2: version "13.0.2" - resolved "https://registry.yarnpkg.com/ngx-ui-switch/-/ngx-ui-switch-13.0.2.tgz#67aa548c06d0bbaa23f57a8d4bce2b88789aeeb5" + resolved "https://registry.npmjs.org/ngx-ui-switch/-/ngx-ui-switch-13.0.2.tgz" integrity sha512-dhRAQZmrSH8l8VVtce/jD0PIwQjagSYPSln9I6A6gda1HIhvU/M6bqOVJLComWX32aVIBewdJP625wp/S3FdTA== dependencies: tslib "^2.3.0" nice-napi@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/nice-napi/-/nice-napi-1.0.2.tgz#dc0ab5a1eac20ce548802fc5686eaa6bc654927b" + resolved "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz" integrity sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA== dependencies: node-addon-api "^3.0.0" @@ -8045,29 +8141,29 @@ nice-napi@^1.0.2: node-addon-api@^3.0.0, node-addon-api@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.6.9" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: whatwg-url "^5.0.0" node-forge@^1: version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + version "4.6.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== node-gyp@^8.2.0: version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" @@ -8081,15 +8177,15 @@ node-gyp@^8.2.0: tar "^6.1.2" which "^2.0.2" -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== nodemon@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" - integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== + version "2.0.22" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" debug "^3.2.7" @@ -8104,60 +8200,60 @@ nodemon@^2.0.20: nopt@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" nopt@~1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^4.5.0: version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -nouislider@^14.6.3: +nouislider@^14.6.3, nouislider@>=9.x: version "14.7.0" - resolved "https://registry.yarnpkg.com/nouislider/-/nouislider-14.7.0.tgz#a71db0587c92567b6da1df57d251d3696d942362" + resolved "https://registry.npmjs.org/nouislider/-/nouislider-14.7.0.tgz" integrity sha512-4RtQ1+LHJKesDCNJrXkQcwXAWCrC2aggdLYMstS/G5fEWL+fXZbUA9pwVNHFghMGuFGRATlDLNInRaPeRKzpFQ== npm-bundled@^1.1.1: version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" npm-install-checks@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz" integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: semver "^7.1.1" npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@8.1.5, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5, npm-package-arg@8.1.5: version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== dependencies: hosted-git-info "^4.0.1" @@ -8166,7 +8262,7 @@ npm-package-arg@8.1.5, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-packa npm-packlist@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz" integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== dependencies: glob "^7.1.6" @@ -8174,9 +8270,9 @@ npm-packlist@^3.0.0: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@6.1.1, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1, npm-pick-manifest@6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== dependencies: npm-install-checks "^4.0.0" @@ -8186,7 +8282,7 @@ npm-pick-manifest@6.1.1, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: npm-registry-fetch@^12.0.0: version "12.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz#ae583bb3c902a60dae43675b5e33b5b1f6159f1e" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz" integrity sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA== dependencies: make-fetch-happen "^10.0.1" @@ -8198,14 +8294,14 @@ npm-registry-fetch@^12.0.0: npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -8215,37 +8311,36 @@ npmlog@^6.0.0: nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" nwsapi@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== + version "2.2.3" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.3.tgz" + integrity sha512-jscxIO4/VKScHlbmFBdV1Z6LXnLO+ZR4VMtypudUdfwtKxUN3TQcNFIHLwKtrUbDyHN4/GycY9+oRGZ2XMXYPw== nx@13.1.3: version "13.1.3" - resolved "https://registry.yarnpkg.com/nx/-/nx-13.1.3.tgz#0b2db9b5bc87a47fb3a90014d2b2abb44f568851" + resolved "https://registry.npmjs.org/nx/-/nx-13.1.3.tgz" integrity sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw== dependencies: "@nrwl/cli" "*" -nx@15.3.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/nx/-/nx-15.3.0.tgz#50916064145cf33ba68fb8bd03ff8ffc2b9ebc7b" - integrity sha512-5tBrEF2zDkGBDfe8wThazJqBDhsVkRrxc6OttzfBmkXP4VPp8w5MMtUEOry181AXKfjDGkw//UnCSkUNynTDlw== +nx@15.9.2: + version "15.9.2" + resolved "https://registry.npmjs.org/nx/-/nx-15.9.2.tgz" + integrity sha512-wtcs+wsuplSckvgk+bV+/XuGlo+sVWzSG0RpgWBjQYeqA3QsVFEAPVY66Z5cSoukDbTV77ddcAjEw+Rz8oOR1A== dependencies: - "@nrwl/cli" "15.3.0" - "@nrwl/tao" "15.3.0" + "@nrwl/cli" "15.9.2" + "@nrwl/tao" "15.9.2" "@parcel/watcher" "2.0.4" "@yarnpkg/lockfile" "^1.1.0" "@yarnpkg/parsers" "^3.0.0-rc.18" "@zkochan/js-yaml" "0.0.6" axios "^1.0.0" - chalk "4.1.0" - chokidar "^3.5.1" + chalk "^4.1.0" cli-cursor "3.1.0" cli-spinners "2.6.1" cliui "^7.0.2" @@ -8254,11 +8349,12 @@ nx@15.3.0: fast-glob "3.2.7" figures "3.2.0" flat "^5.0.2" - fs-extra "^10.1.0" + fs-extra "^11.1.0" glob "7.1.4" ignore "^5.0.4" js-yaml "4.1.0" jsonc-parser "3.2.0" + lines-and-columns "~2.0.3" minimatch "3.0.5" npm-run-path "^4.0.1" open "^8.4.0" @@ -8267,30 +8363,35 @@ nx@15.3.0: strong-log-transformer "^2.1.0" tar-stream "~2.2.0" tmp "~0.2.1" - tsconfig-paths "^3.9.0" + tsconfig-paths "^4.1.2" tslib "^2.3.0" v8-compile-cache "2.3.0" yargs "^17.6.2" yargs-parser "21.1.1" + optionalDependencies: + "@nrwl/nx-darwin-arm64" "15.9.2" + "@nrwl/nx-darwin-x64" "15.9.2" + "@nrwl/nx-linux-arm-gnueabihf" "15.9.2" + "@nrwl/nx-linux-arm64-gnu" "15.9.2" + "@nrwl/nx-linux-arm64-musl" "15.9.2" + "@nrwl/nx-linux-x64-gnu" "15.9.2" + "@nrwl/nx-linux-x64-musl" "15.9.2" + "@nrwl/nx-win32-arm64-msvc" "15.9.2" + "@nrwl/nx-win32-x64-msvc" "15.9.2" -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.0.1: version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: call-bind "^1.0.2" @@ -8298,17 +8399,17 @@ object-is@^1.0.1: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-path@^0.11.5: version "0.11.8" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" + resolved "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz" integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -8316,9 +8417,9 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.values@^1.1.5: +object.values@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" @@ -8327,45 +8428,45 @@ object.values@^1.1.5: obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - on-finished@~2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@8.4.0, open@^8.0.9, open@^8.4.0: +open@^8.0.9, open@^8.4.0, open@8.4.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: define-lazy-prop "^2.0.0" @@ -8374,34 +8475,34 @@ open@8.4.0, open@^8.0.9, open@^8.4.0: opencollective-postinstall@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== opener@^1.5.2: version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== openseadragon@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/openseadragon/-/openseadragon-2.4.2.tgz#f25d833d0ab9941599d65a3e2b44bec546c9f15c" + resolved "https://registry.npmjs.org/openseadragon/-/openseadragon-2.4.2.tgz" integrity sha512-398KbZwRtOYA6OmeWRY4Q0737NTacQ9Q6whmr9Lp1MNQO3p0eBz5LIASRne+4gwequcSM1vcHcjfy3dIndQziw== openurl@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" + resolved "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz" integrity sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA== opn@5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + resolved "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz" integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g== dependencies: is-wsl "^1.1.0" optionator@^0.8.1: version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -8413,7 +8514,7 @@ optionator@^0.8.1: optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -8423,9 +8524,9 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@5.4.1, ora@^5.1.0, ora@^5.4.1: +ora@^5.1.0, ora@^5.4.1, ora@5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -8440,52 +8541,52 @@ ora@5.4.1, ora@^5.1.0, ora@^5.4.1: os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== ospath@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + resolved "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz" integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-retry@^4.5.0: version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -8493,12 +8594,12 @@ p-retry@^4.5.0: p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pacote@12.0.3: version "12.0.3" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.3.tgz#b6f25868deb810e7e0ddf001be88da2bcaca57c7" + resolved "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz" integrity sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow== dependencies: "@npmcli/git" "^2.1.0" @@ -8523,19 +8624,19 @@ pacote@12.0.3: pako@^1.0.3: version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -8545,17 +8646,17 @@ parse-json@^5.0.0: parse-node-version@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== parse-srcset@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + resolved "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz" integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== parse5-html-rewriting-stream@6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz#de1820559317ab4e451ea72dba05fddfd914480b" + resolved "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz" integrity sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg== dependencies: parse5 "^6.0.1" @@ -8563,71 +8664,71 @@ parse5-html-rewriting-stream@6.0.1: parse5-htmlparser2-tree-adapter@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== dependencies: parse5 "^6.0.1" parse5-sax-parser@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz#98b4d366b5b266a7cd90b4b58906667af882daba" + resolved "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz" integrity sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg== dependencies: parse5 "^6.0.1" -parse5@6.0.1, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pem@1.14.4: version "1.14.4" - resolved "https://registry.yarnpkg.com/pem/-/pem-1.14.4.tgz#a68c70c6e751ccc5b3b5bcd7af78b0aec1177ff9" + resolved "https://registry.npmjs.org/pem/-/pem-1.14.4.tgz" integrity sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g== dependencies: es6-promisify "^6.0.0" @@ -8637,55 +8738,48 @@ pem@1.14.4: pend@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: +pify@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -piscina@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/piscina/-/piscina-3.2.0.tgz#f5a1dde0c05567775690cccefe59d9223924d154" - integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== +piscina@~3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz" + integrity sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg== dependencies: eventemitter-asyncresource "^1.0.0" hdr-histogram-js "^2.0.1" @@ -8693,10 +8787,10 @@ piscina@3.2.0: optionalDependencies: nice-napi "^1.0.2" -piscina@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/piscina/-/piscina-3.1.0.tgz#2333636865b6cb69c5a370bbc499a98cabcf3e04" - integrity sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg== +piscina@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz" + integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== dependencies: eventemitter-asyncresource "^1.0.0" hdr-histogram-js "^2.0.1" @@ -8706,19 +8800,19 @@ piscina@~3.1.0: pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -popper.js@1.16.1-lts: +popper.js@^1.16.1, popper.js@1.16.1-lts: version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" + resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== portfinder@^1.0.28: version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== dependencies: async "^2.6.4" @@ -8727,7 +8821,7 @@ portfinder@^1.0.28: portscanner@2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" + resolved "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz" integrity sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw== dependencies: async "^2.6.0" @@ -8735,7 +8829,7 @@ portscanner@2.2.0: postcss-apply@0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/postcss-apply/-/postcss-apply-0.12.0.tgz#11a47b271b14d81db97ed7f51a6c409d025a9c34" + resolved "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.12.0.tgz" integrity sha512-u8qZLyA9P86cD08IhqjSVV8tf1eGiKQ4fPvjcG3Ic/eOU65EAkDQClp8We7d15TG+RIWRVPSy9v7cJ2D9OReqw== dependencies: balanced-match "^1.0.0" @@ -8743,70 +8837,70 @@ postcss-apply@0.12.0: postcss-attribute-case-insensitive@^5.0.0, postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" + resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz" integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== dependencies: postcss-selector-parser "^6.0.10" postcss-clamp@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + resolved "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz" integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== dependencies: postcss-value-parser "^4.2.0" postcss-color-functional-notation@^4.2.1, postcss-color-functional-notation@^4.2.4: version "4.2.4" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz#21a909e8d7454d3612d1659e471ce4696f28caec" + resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz" integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== dependencies: postcss-value-parser "^4.2.0" postcss-color-hex-alpha@^8.0.2, postcss-color-hex-alpha@^8.0.4: version "8.0.4" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz#c66e2980f2fbc1a63f5b079663340ce8b55f25a5" + resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz" integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== dependencies: postcss-value-parser "^4.2.0" postcss-color-rebeccapurple@^7.0.2, postcss-color-rebeccapurple@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz#63fdab91d878ebc4dd4b7c02619a0c3d6a56ced0" + resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz" integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== dependencies: postcss-value-parser "^4.2.0" postcss-custom-media@^8.0.0, postcss-custom-media@^8.0.2: version "8.0.2" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz#c8f9637edf45fef761b014c024cee013f80529ea" + resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz" integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== dependencies: postcss-value-parser "^4.2.0" postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.2: version "12.1.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" + resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz" integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== dependencies: postcss-value-parser "^4.2.0" postcss-custom-selectors@^6.0.0, postcss-custom-selectors@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz#1ab4684d65f30fed175520f82d223db0337239d9" + resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz" integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== dependencies: postcss-selector-parser "^6.0.4" postcss-dir-pseudo-class@^6.0.3, postcss-dir-pseudo-class@^6.0.5: version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz#2bf31de5de76added44e0a25ecf60ae9f7c7c26c" + resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz" integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== dependencies: postcss-selector-parser "^6.0.10" postcss-double-position-gradients@^3.0.4, postcss-double-position-gradients@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz#b96318fdb477be95997e86edd29c6e3557a49b91" + resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz" integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" @@ -8814,55 +8908,55 @@ postcss-double-position-gradients@^3.0.4, postcss-double-position-gradients@^3.1 postcss-env-function@^4.0.4, postcss-env-function@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-4.0.6.tgz#7b2d24c812f540ed6eda4c81f6090416722a8e7a" + resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz" integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== dependencies: postcss-value-parser "^4.2.0" postcss-focus-visible@^6.0.3, postcss-focus-visible@^6.0.4: version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz#50c9ea9afa0ee657fb75635fabad25e18d76bf9e" + resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz" integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== dependencies: postcss-selector-parser "^6.0.9" postcss-focus-within@^5.0.3, postcss-focus-within@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz#5b1d2ec603195f3344b716c0b75f61e44e8d2e20" + resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz" integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== dependencies: postcss-selector-parser "^6.0.9" postcss-font-variant@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== postcss-gap-properties@^3.0.2, postcss-gap-properties@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz#f7e3cddcf73ee19e94ccf7cb77773f9560aa2fff" + resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz" integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== postcss-image-set-function@^4.0.4, postcss-image-set-function@^4.0.7: version "4.0.7" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz#08353bd756f1cbfb3b6e93182c7829879114481f" + resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz" integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== dependencies: postcss-value-parser "^4.2.0" -postcss-import@14.0.2: - version "14.0.2" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.0.2.tgz#60eff77e6be92e7b67fe469ec797d9424cae1aa1" - integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== +postcss-import@^14.0.0: + version "14.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== dependencies: postcss-value-parser "^4.0.0" read-cache "^1.0.0" resolve "^1.1.7" -postcss-import@^14.0.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== +postcss-import@14.0.2: + version "14.0.2" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz" + integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== dependencies: postcss-value-parser "^4.0.0" read-cache "^1.0.0" @@ -8870,29 +8964,20 @@ postcss-import@^14.0.0: postcss-initial@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== postcss-lab-function@^4.0.3, postcss-lab-function@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz#6fe4c015102ff7cd27d1bd5385582f67ebdbdc98" + resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz" integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== dependencies: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-loader@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - postcss-loader@^4.0.3: version "4.3.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz" integrity sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q== dependencies: cosmiconfig "^7.0.0" @@ -8901,24 +8986,33 @@ postcss-loader@^4.0.3: schema-utils "^3.0.0" semver "^7.3.4" +postcss-loader@6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz" + integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.5" + postcss-logical@^5.0.3, postcss-logical@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-5.0.4.tgz#ec75b1ee54421acc04d5921576b7d8db6b0e6f73" + resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== postcss-media-minmax@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz#7140bddec173e2d6d657edbd8554a55794e2a5b5" + resolved "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz" integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== postcss-modules-extract-imports@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== postcss-modules-local-by-default@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz" integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== dependencies: icss-utils "^5.0.0" @@ -8927,92 +9021,53 @@ postcss-modules-local-by-default@^4.0.0: postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: postcss-selector-parser "^6.0.4" postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-nesting@^10.1.2, postcss-nesting@^10.2.0: version "10.2.0" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-10.2.0.tgz#0b12ce0db8edfd2d8ae0aaf86427370b898890be" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz" integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== dependencies: "@csstools/selector-specificity" "^2.0.0" postcss-selector-parser "^6.0.10" postcss-opacity-percentage@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz#bd698bb3670a0a27f6d657cc16744b3ebf3b1145" - integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== + version "1.1.3" + resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz" + integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== postcss-overflow-shorthand@^3.0.2, postcss-overflow-shorthand@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz#7ed6486fec44b76f0eab15aa4866cda5d55d893e" + resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz" integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== dependencies: postcss-value-parser "^4.2.0" postcss-page-break@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== postcss-place@^7.0.3, postcss-place@^7.0.5: version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-7.0.5.tgz#95dbf85fd9656a3a6e60e832b5809914236986c4" + resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz" integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== dependencies: postcss-value-parser "^4.2.0" -postcss-preset-env@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz#01b9b6eea0ff16c27a3d514f10105d56363428a6" - integrity sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA== - dependencies: - autoprefixer "^10.4.2" - browserslist "^4.19.1" - caniuse-lite "^1.0.30001299" - css-blank-pseudo "^3.0.2" - css-has-pseudo "^3.0.3" - css-prefers-color-scheme "^6.0.2" - cssdb "^5.0.0" - postcss-attribute-case-insensitive "^5.0.0" - postcss-color-functional-notation "^4.2.1" - postcss-color-hex-alpha "^8.0.2" - postcss-color-rebeccapurple "^7.0.2" - postcss-custom-media "^8.0.0" - postcss-custom-properties "^12.1.2" - postcss-custom-selectors "^6.0.0" - postcss-dir-pseudo-class "^6.0.3" - postcss-double-position-gradients "^3.0.4" - postcss-env-function "^4.0.4" - postcss-focus-visible "^6.0.3" - postcss-focus-within "^5.0.3" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.2" - postcss-image-set-function "^4.0.4" - postcss-initial "^4.0.1" - postcss-lab-function "^4.0.3" - postcss-logical "^5.0.3" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.1.2" - postcss-overflow-shorthand "^3.0.2" - postcss-page-break "^3.0.4" - postcss-place "^7.0.3" - postcss-pseudo-class-any-link "^7.0.2" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^5.0.0" - postcss-preset-env@^7.4.2: version "7.8.3" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz#2a50f5e612c3149cc7af75634e202a5b2ad4f1e2" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz" integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== dependencies: "@csstools/postcss-cascade-layers" "^1.1.1" @@ -9065,42 +9120,81 @@ postcss-preset-env@^7.4.2: postcss-selector-not "^6.0.1" postcss-value-parser "^4.2.0" +postcss-preset-env@7.2.3: + version "7.2.3" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz" + integrity sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA== + dependencies: + autoprefixer "^10.4.2" + browserslist "^4.19.1" + caniuse-lite "^1.0.30001299" + css-blank-pseudo "^3.0.2" + css-has-pseudo "^3.0.3" + css-prefers-color-scheme "^6.0.2" + cssdb "^5.0.0" + postcss-attribute-case-insensitive "^5.0.0" + postcss-color-functional-notation "^4.2.1" + postcss-color-hex-alpha "^8.0.2" + postcss-color-rebeccapurple "^7.0.2" + postcss-custom-media "^8.0.0" + postcss-custom-properties "^12.1.2" + postcss-custom-selectors "^6.0.0" + postcss-dir-pseudo-class "^6.0.3" + postcss-double-position-gradients "^3.0.4" + postcss-env-function "^4.0.4" + postcss-focus-visible "^6.0.3" + postcss-focus-within "^5.0.3" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.2" + postcss-image-set-function "^4.0.4" + postcss-initial "^4.0.1" + postcss-lab-function "^4.0.3" + postcss-logical "^5.0.3" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.1.2" + postcss-overflow-shorthand "^3.0.2" + postcss-page-break "^3.0.4" + postcss-place "^7.0.3" + postcss-pseudo-class-any-link "^7.0.2" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^5.0.0" + postcss-pseudo-class-any-link@^7.0.2, postcss-pseudo-class-any-link@^7.1.6: version "7.1.6" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz#2693b221902da772c278def85a4d9a64b6e617ab" + resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz" integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== dependencies: postcss-selector-parser "^6.0.10" postcss-replace-overflow-wrap@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz" integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== postcss-responsive-type@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-responsive-type/-/postcss-responsive-type-1.0.0.tgz#bb2d57d830beb9586ec4fda7994f07e37953aad8" + resolved "https://registry.npmjs.org/postcss-responsive-type/-/postcss-responsive-type-1.0.0.tgz" integrity sha512-O4kAKbc4RLnSkzcguJ6ojW67uOfeILaj+8xjsO0quLU94d8BKCqYwwFEUVRNbj0YcXA6d3uF/byhbaEATMRVig== dependencies: postcss "^6.0.6" postcss-selector-not@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz#ac5fc506f7565dd872f82f5314c0f81a05630dc7" + resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz" integrity sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ== dependencies: balanced-match "^1.0.0" postcss-selector-not@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz#8f0a709bf7d4b45222793fc34409be407537556d" + resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz" integrity sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ== dependencies: postcss-selector-parser "^6.0.10" postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.9: version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" @@ -9108,72 +9202,72 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selecto postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.5: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== - dependencies: - nanoid "^3.1.30" - picocolors "^1.0.0" - source-map-js "^1.0.1" - postcss@^6.0.6: version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.14: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.1, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.3.11, postcss@^8.3.7: - version "8.4.19" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" - integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.6: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^7.0.14: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +postcss@8.4.5: + version "8.4.5" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz" + integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== + dependencies: + nanoid "^3.1.30" + picocolors "^1.0.0" + source-map-js "^1.0.1" + prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -9181,15 +9275,15 @@ promise-retry@^2.0.1: prompts@~2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -9198,119 +9292,99 @@ prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== - proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + prr@~1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== psl@^1.1.28, psl@^1.1.33: version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -punycode@^2.1.1: +punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -q@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qjobs@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + resolved "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.11.0: +qs@^6.11.0, qs@6.11.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" -qs@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - integrity sha512-AY4g8t3LMboim0t6XWFdz6J5OuJ1ZNYu54SXihS/OMpgyCqYmcAJnWqkNSOjSjWmq3xxy+GF9uWQI2lI/7tKIA== - qs@~6.10.3: - version "6.10.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" - integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== + version "6.10.4" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz" + integrity sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g== dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== raf-schd@^4.0.2: version "4.0.3" - resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" + resolved "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz" integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1, raw-body@^2.3.2: +raw-body@^2.3.2, raw-body@2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -9320,26 +9394,26 @@ raw-body@2.5.1, raw-body@^2.3.2: re-reselect@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/re-reselect/-/re-reselect-4.0.1.tgz#21a2306d11bbf377ac78687aa46e1a8848974194" + resolved "https://registry.npmjs.org/re-reselect/-/re-reselect-4.0.1.tgz" integrity sha512-xVTNGQy/dAxOolunBLmVMGZ49VUUR1s8jZUiJQb+g1sI63GAv9+a5Jas9yHvdxeUgiZkU9r3gDExDorxHzOgRA== re-resizable@6.9.6: version "6.9.6" - resolved "https://registry.yarnpkg.com/re-resizable/-/re-resizable-6.9.6.tgz#b95d37e3821481b56ddfb1e12862940a791e827d" + resolved "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.6.tgz" integrity sha512-0xYKS5+Z0zk+vICQlcZW+g54CcJTTmHluA7JUUgvERDxnKAnytylcyPsA+BSFi759s5hPlHmBRegFrwXs2FuBQ== dependencies: fast-memoize "^2.5.1" react-aria-live@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/react-aria-live/-/react-aria-live-2.0.5.tgz#333480cb898d6963421bd86fe3cbd0ce54e37f08" + resolved "https://registry.npmjs.org/react-aria-live/-/react-aria-live-2.0.5.tgz" integrity sha512-rXiH1HNKJrr/UfVeGwA2aKY43r5WbjLs+AYB6/kJF1qny2hwxzQc1qewQmUpdQ5h8HAOTD8O/XlGcEHjqlCl0g== dependencies: uuid "^3.2.1" react-beautiful-dnd@^13.0.0: version "13.1.1" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" + resolved "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz" integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== dependencies: "@babel/runtime" "^7.9.2" @@ -9352,7 +9426,7 @@ react-beautiful-dnd@^13.0.0: react-copy-to-clipboard@^5.0.1: version "5.1.0" - resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz#09aae5ec4c62750ccb2e6421a58725eabc41255c" + resolved "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz" integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== dependencies: copy-to-clipboard "^3.3.1" @@ -9360,30 +9434,30 @@ react-copy-to-clipboard@^5.0.1: react-dnd-html5-backend@^10.0.2: version "10.0.2" - resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-10.0.2.tgz#15cb9d2b923f43576a136df854e288cb5969784c" + resolved "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-10.0.2.tgz" integrity sha512-ny17gUdInZ6PIGXdzfwPhoztRdNVVvjoJMdG80hkDBamJBeUPuNF2Wv4D3uoQJLjXssX1+i9PhBqc7EpogClwQ== dependencies: dnd-core "^10.0.2" react-dnd-multi-backend@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-dnd-multi-backend/-/react-dnd-multi-backend-5.1.1.tgz#1ddb243cea74e41efa3932e6403bb84d0a8cd11b" - integrity sha512-u085U6tIAfkFzaBhe0AhZZIhs9Ta1sRcp+S/A7JR81B1TjtPVLYIoTyqCO91wG1Iz5+MEVL88aYuRPayMY4HXQ== + version "5.0.1" + resolved "https://registry.npmjs.org/react-dnd-multi-backend/-/react-dnd-multi-backend-5.0.1.tgz" + integrity sha512-E45T5xVl4CLt9QFV9ZMjWCGLyF16+B6B6FgbeZE9J5o0rvLHaCqyAJTelRDXtbSiSBPaDlN1STO86jkiD31AHA== dependencies: - dnd-multi-backend "^5.1.1" + dnd-multi-backend "^5.0.1" prop-types "^15.7.2" - react-dnd-preview "^5.1.1" + react-dnd-preview "^5.0.1" -react-dnd-preview@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-dnd-preview/-/react-dnd-preview-5.1.1.tgz#90c4ad49e90d9abe39728b762d72132b8589b784" - integrity sha512-RryrwRRfF22kL8CQcYqDHt4WLbytRbVNXYnjPkyZKfGsXfQnY0j8OtxokTee4Ba3OkcSiSYQbLhDRFw9wiJj5g== +react-dnd-preview@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/react-dnd-preview/-/react-dnd-preview-5.0.1.tgz" + integrity sha512-wwUgk8jWuO4WMOoa+GviHoZyYAiXer6vsSW2aEhpz0gsde08O+4cI+j7DG7q9vYlBnljNutdQ1WjDV0VskZ4jQ== dependencies: prop-types "^15.7.2" react-dnd-touch-backend@^10.0.2: version "10.0.2" - resolved "https://registry.yarnpkg.com/react-dnd-touch-backend/-/react-dnd-touch-backend-10.0.2.tgz#90cb916655539b838d49b8895e1813f8b874b3b4" + resolved "https://registry.npmjs.org/react-dnd-touch-backend/-/react-dnd-touch-backend-10.0.2.tgz" integrity sha512-+lW/Ern0dKyHToD0oP+Wc/ZD6l7qJazosLqbjzL7OnPlig6WxdlrHkJylOLkeAdZj41fIJJ551Lb57pIL0CcPw== dependencies: "@react-dnd/invariant" "^2.0.0" @@ -9391,7 +9465,7 @@ react-dnd-touch-backend@^10.0.2: react-dnd@^10.0.2: version "10.0.2" - resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-10.0.2.tgz#a6ad8eb3d9f2c573031f7ce05012e5c767a0b1fc" + resolved "https://registry.npmjs.org/react-dnd/-/react-dnd-10.0.2.tgz" integrity sha512-SC2Ymvntynhoqtf5zaFhZscm9xenCoMofilxPdlwUlaelAzmbl9fw82C4ZJ//+lNm3kWAKXjGDZg2/aWjKEAtg== dependencies: "@react-dnd/shallowequal" "^2.0.0" @@ -9399,9 +9473,9 @@ react-dnd@^10.0.2: dnd-core "^10.0.2" hoist-non-react-statics "^3.3.0" -react-dom@^16.14.0: +"react-dom@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react-dom@^16.13.1 || ^17.0.0 || ^18.0.0", react-dom@^16.14.0, react-dom@^16.3.2, "react-dom@^16.8.0 || ^17.0.0", react-dom@^16.8.3, "react-dom@^16.8.5 || ^17.0.0 || ^18.0.0", "react-dom@>= 16.3.0", "react-dom@>= 16.8", react-dom@>=16.3.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@16.x: version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz" integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== dependencies: loose-envify "^1.1.0" @@ -9409,17 +9483,17 @@ react-dom@^16.14.0: prop-types "^15.6.2" scheduler "^0.19.1" -react-draggable@4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.4.tgz#5b26d9996be63d32d285a426f41055de87e59b2f" - integrity sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA== +react-draggable@4.4.5: + version "4.4.5" + resolved "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz" + integrity sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g== dependencies: clsx "^1.1.1" - prop-types "^15.6.0" + prop-types "^15.8.1" react-full-screen@^0.2.4: version "0.2.5" - resolved "https://registry.yarnpkg.com/react-full-screen/-/react-full-screen-0.2.5.tgz#bc79a5cdb9640d8b9b09e11a17fa54f6e6fa5789" + resolved "https://registry.npmjs.org/react-full-screen/-/react-full-screen-0.2.5.tgz" integrity sha512-LNkxjLWmiR+AwemSVdn/miUcBy8tHA6mDVS1qz1AM/DHNEtQbzkh5ok9A6g99502OqutQq1zBvCBGLV8rsB2tw== dependencies: "@types/react" "*" @@ -9427,30 +9501,35 @@ react-full-screen@^0.2.4: react-i18next@^11.7.0: version "11.18.6" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" + resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz" integrity sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA== dependencies: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" react-image@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-image/-/react-image-4.0.3.tgz#6fa722877660b67295298a914bff1ed87ad2cf83" - integrity sha512-19MUK9u1qaw9xys8XEsVkSpVhHctEBUeYFvrLTe1PN+4w5Co13AN2WA7xtBshPM6SthsOj77SlDrEAeOaJpf7g== + version "4.1.0" + resolved "https://registry.npmjs.org/react-image/-/react-image-4.1.0.tgz" + integrity sha512-qwPNlelQe9Zy14K2pGWSwoL+vHsAwmJKS6gkotekDgRpcnRuzXNap00GfibD3eEPYu3WCPlyIUUNzcyHOrLHjw== -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== "react-is@^16.8.0 || ^17.0.0", react-is@^17.0.2: version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-mosaic-component@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/react-mosaic-component/-/react-mosaic-component-4.1.1.tgz#48a34e5e5c16654075212666c2aebeb488bab9f2" + resolved "https://registry.npmjs.org/react-mosaic-component/-/react-mosaic-component-4.1.1.tgz" integrity sha512-HVlLvfYQ/AKmoKvw95Orx3Qyc7SNuS/QlAy+SkAVit1g9ipzXBGYoBg7RMXP5sF5w47CgYxA+1gT+fYRVf73jA== dependencies: classnames "^2.2.6" @@ -9465,7 +9544,7 @@ react-mosaic-component@^4.0.1: react-redux@^7.1.0, react-redux@^7.2.0: version "7.2.9" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" + resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz" integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== dependencies: "@babel/runtime" "^7.15.4" @@ -9477,21 +9556,21 @@ react-redux@^7.1.0, react-redux@^7.2.0: react-resize-observer@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/react-resize-observer/-/react-resize-observer-1.1.1.tgz#641dfa2e0f4bd2549a8ab4bbbaf43b68f3dcaf76" + resolved "https://registry.npmjs.org/react-resize-observer/-/react-resize-observer-1.1.1.tgz" integrity sha512-3R+90Hou90Mr3wJYc+unsySC8Pn91V4nmjO32NKvUvjphRUbq9HisyLg7bDyGBE7xlMrrM6Fax7iNQaFdc/FYA== react-rnd@^10.1: - version "10.3.7" - resolved "https://registry.yarnpkg.com/react-rnd/-/react-rnd-10.3.7.tgz#037ce277e6c5e682989b51278e44a6ba299990af" - integrity sha512-fYifqMI6xWzzajoRbxNNH2xpKagJT5o1zAY3a4eh4gKk+Eyy/9LGoBKA3eVX0yNOeD7JB+wznps4YmnU38v6Yw== + version "10.4.1" + resolved "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz" + integrity sha512-0m887AjQZr6p2ADLNnipquqsDq4XJu/uqVqI3zuoGD19tRm6uB83HmZWydtkilNp5EWsOHbLGF4IjWMdd5du8Q== dependencies: re-resizable "6.9.6" - react-draggable "4.4.4" + react-draggable "4.4.5" tslib "2.3.1" react-sizeme@^2.6.7: version "2.6.12" - resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.12.tgz#ed207be5476f4a85bf364e92042520499455453e" + resolved "https://registry.npmjs.org/react-sizeme/-/react-sizeme-2.6.12.tgz" integrity sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw== dependencies: element-resize-detector "^1.2.1" @@ -9501,7 +9580,7 @@ react-sizeme@^2.6.7: react-transition-group@^4.4.0: version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" @@ -9510,21 +9589,21 @@ react-transition-group@^4.4.0: prop-types "^15.6.2" react-virtualized-auto-sizer@^1.0.2: - version "1.0.7" - resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.7.tgz#bfb8414698ad1597912473de3e2e5f82180c1195" - integrity sha512-Mxi6lwOmjwIjC1X4gABXMJcKHsOo0xWl3E3ugOgufB8GJU+MqrtY35aBuvCYv/razQ1Vbp7h1gWJjGjoNN5pmA== + version "1.0.13" + resolved "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.13.tgz" + integrity sha512-iazB2jnZz93jgjo66/rMlrshQ0M67Y7CRSGJRu/BkWH5H63OcC0YL6dBxJZ+etHDjZT6qnUm4PKRjOJx9yF51w== react-window@^1.8.5: version "1.8.8" - resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.8.tgz#1b52919f009ddf91970cbdb2050a6c7be44df243" + resolved "https://registry.npmjs.org/react-window/-/react-window-1.8.8.tgz" integrity sha512-D4IiBeRtGXziZ1n0XklnFGu7h9gU684zepqyKzgPNzrsrk7xOCxni+TCckjg2Nr/DiaEEGVVmnhYSlT2rB47dQ== dependencies: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^16.14.0: +"react@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react@^15.3.0 || 16 || 17 || 18", "react@^15.6 || ^16", react@^16.0.0, react@^16.13, react@^16.13.1, "react@^16.13.1 || ^17.0.0 || ^18.0.0", react@^16.14.0, react@^16.3.0, react@^16.3.2, react@^16.3.x, "react@^16.8.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^16.8.3, "react@^16.8.3 || ^17 || ^18", "react@^16.8.5 || ^17.0.0 || ^18.0.0", "react@>= 16.3.0", "react@>= 16.8", "react@>= 16.8.0", react@>=0.14, react@>=16.3.0, react@>=16.6.0, react@>=16.8, react@16.x: version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz" integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: loose-envify "^1.1.0" @@ -9533,23 +9612,23 @@ react@^16.14.0: read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" read-package-json-fast@^2.0.1: version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== dependencies: json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9560,9 +9639,9 @@ readable-stream@^2.0.1: util-deprecate "~1.0.1" readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -9570,84 +9649,84 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" rechoir@^0.7.0: version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz" integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: resolve "^1.9.0" redux-devtools-extension@^2.13.2: version "2.13.9" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz#6b764e8028b507adcb75a1cae790f71e6be08ae7" + resolved "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz" integrity sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A== redux-saga@^1.1.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.2.1.tgz#3d730563c8d980525fa5e333ea1ee6e143452275" - integrity sha512-fVCicLlf4hLP+KB6H7RHfZlZ8LdYckhaemXBB3wh//a2ESyz/z/l8ygxlm0OqPjS/PARdsQ2hIdAltxEB+NgvA== + version "1.2.3" + resolved "https://registry.npmjs.org/redux-saga/-/redux-saga-1.2.3.tgz" + integrity sha512-HDe0wTR5nhd8Xr5xjGzoyTbdAw6rjy1GDplFt3JKtKN8/MnkQSRqK/n6aQQhpw5NI4ekDVOaW+w4sdxPBaCoTQ== dependencies: - "@redux-saga/core" "^1.2.1" + "@redux-saga/core" "^1.2.3" redux-thunk@^2.3.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz" integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" - integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== +"redux@^3.1.0 || ^4.0.0", redux@^4, redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: + version "4.2.1" + resolved "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== dependencies: "@babel/runtime" "^7.9.2" reflect-metadata@^0.1.13, reflect-metadata@^0.1.2: version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== regenerate-unicode-properties@^10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.9: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@0.13.9: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regenerator-transform@^0.15.1: version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz" integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" regex-parser@^2.2.11: version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: call-bind "^1.0.2" @@ -9656,106 +9735,75 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: regexpp@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" - integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" regenerate-unicode-properties "^10.1.0" - regjsgen "^0.7.1" regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsgen@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" - integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== - regjsparser@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" request-progress@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + resolved "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz" integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== dependencies: throttleit "^1.0.0" -request@^2.87.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.0.0: +reselect@^4.0.0, reselect@>1.0.0: version "4.1.7" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" + resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz" integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-url-loader@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz#ee3142fb1f1e0d9db9524d539cfa166e9314f795" + resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz" integrity sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg== dependencies: adjust-sourcemap-loader "^4.0.0" @@ -9764,27 +9812,27 @@ resolve-url-loader@5.0.0: postcss "^8.2.14" source-map "0.6.1" +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@1.22.0: version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: is-core-module "^2.8.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resp-modifier@6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/resp-modifier/-/resp-modifier-6.0.2.tgz#b124de5c4fbafcba541f48ffa73970f4aa456b4f" + resolved "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz" integrity sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw== dependencies: debug "^2.2.0" @@ -9792,7 +9840,7 @@ resp-modifier@6.0.2: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -9800,70 +9848,70 @@ restore-cursor@^3.1.0: retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== retry@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rtl-css-js@^1.13.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.16.0.tgz#e8d682982441aadb63cabcb2f7385f3fb78ff26e" - integrity sha512-Oc7PnzwIEU4M0K1J4h/7qUUaljXhQ0kCObRsZjxs2HjkpKsnoTMvSmvJ4sqgJZd0zBoEfAyTdnK/jMIYvrjySQ== + version "1.16.1" + resolved "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz" + integrity sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg== dependencies: "@babel/runtime" "^7.1.2" run-async@^2.4.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rx@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + resolved "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" integrity sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug== rxjs-for-await@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz#26598a1d6167147cc192172970e7eed4e620384b" + resolved "https://registry.npmjs.org/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz" integrity sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw== rxjs-report-usage@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/rxjs-report-usage/-/rxjs-report-usage-1.0.6.tgz#6e06034d9e1592e8a45bee877631638e4bac2576" + resolved "https://registry.npmjs.org/rxjs-report-usage/-/rxjs-report-usage-1.0.6.tgz" integrity sha512-omv1DIv5z1kV+zDAEjaDjWSkx8w5TbFp5NZoPwUipwzYVcor/4So9ZU3bUyQ1c8lxY5Q0Es/ztWW7PGjY7to0Q== dependencies: "@babel/parser" "^7.10.3" @@ -9876,7 +9924,7 @@ rxjs-report-usage@^1.0.4: rxjs-spy@^8.0.2: version "8.0.2" - resolved "https://registry.yarnpkg.com/rxjs-spy/-/rxjs-spy-8.0.2.tgz#dd510bdb58d798e0bc23121ab67714dd6fd95f88" + resolved "https://registry.npmjs.org/rxjs-spy/-/rxjs-spy-8.0.2.tgz" integrity sha512-w2yc+EiwYA8J97hxqMD+pxGZkNbRCQwxR660r4nw4Soa8kCvatsdSRc0THndYk9uk6SvZy2RNyiVcxfX39pWpw== dependencies: "@types/circular-json" "^0.4.0" @@ -9886,89 +9934,94 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -rxjs@6.6.7, rxjs@^6.5.4, rxjs@^6.5.5, rxjs@~6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^5.5.6: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== - dependencies: - symbol-observable "1.0.1" - -rxjs@^7.2.0, rxjs@^7.5.5: - version "7.6.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.6.0.tgz#361da5362b6ddaa691a2de0b4f2d32028f1eb5a2" - integrity sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ== - dependencies: - tslib "^2.1.0" - -rxjs@^7.5.1: +rxjs@^6.0.0, "rxjs@^6.5.3 || ^7.4.0", rxjs@^7.0.0, rxjs@^7.2.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +rxjs@^6.5.4: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^6.5.5: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@~6.6.0, rxjs@6.6.7: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-html@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.7.3.tgz#166c868444ee4f9fd7352ac8c63fa86c343fc2bd" - integrity sha512-jMaHG29ak4miiJ8wgqA1849iInqORgNv7SLfSw9LtfOhEUQ1C0YHKH73R+hgyufBW9ZFeJrb057k9hjlfBCVlw== + version "2.10.0" + resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.10.0.tgz" + integrity sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ== dependencies: deepmerge "^4.2.2" escape-string-regexp "^4.0.0" - htmlparser2 "^6.0.0" + htmlparser2 "^8.0.0" is-plain-object "^5.0.0" parse-srcset "^1.0.2" postcss "^8.3.11" -sass-loader@12.4.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.4.0.tgz#260b0d51a8a373bb8e88efc11f6ba5583fea0bcf" - integrity sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg== +sass-loader@^12.6.0: + version "12.6.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: klona "^2.0.4" neo-async "^2.6.2" -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== +sass-loader@12.4.0: + version "12.4.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz" + integrity sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg== dependencies: klona "^2.0.4" neo-async "^2.6.2" sass-resources-loader@^2.1.1: version "2.2.5" - resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz#75131cdb26bae51fcffc007d8155d57b5e825ca7" + resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" integrity sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ== dependencies: async "^3.2.3" @@ -9976,37 +10029,37 @@ sass-resources-loader@^2.1.1: glob "^7.1.6" loader-utils "^2.0.0" +sass@^1.3.0, sass@~1.33.0: + version "1.33.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" + integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== + dependencies: + chokidar ">=3.0.0 <4.0.0" + sass@1.49.9: version "1.49.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.49.9.tgz#b15a189ecb0ca9e24634bae5d1ebc191809712f9" + resolved "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz" integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sass@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.33.0.tgz#a26186902ee56585b9db6751fd151237f561dbc2" - integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: +sax@^1.2.4, sax@~1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" scheduler@^0.19.1: version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz" integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: loose-envify "^1.1.0" @@ -10014,16 +10067,34 @@ scheduler@^0.19.1: schema-utils@^2.6.5: version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: "@types/json-schema" "^7.0.5" ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.0.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: "@types/json-schema" "^7.0.8" @@ -10032,7 +10103,7 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: schema-utils@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== dependencies: "@types/json-schema" "^7.0.9" @@ -10042,55 +10113,95 @@ schema-utils@^4.0.0: select-hose@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.0.0, selfsigned@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== dependencies: node-forge "^1" -semver@7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^5.3.0, semver@^5.6.0, semver@^5.7.1: +semver@^5.6.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@^7.0.0: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.1.1: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.2: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5, semver@7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.7: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.8: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== dependencies: lru-cache "^6.0.0" semver@~7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@7.3.4: + version "7.3.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + send@0.16.2: version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz" integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== dependencies: debug "2.6.9" @@ -10109,7 +10220,7 @@ send@0.16.2: send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -10128,21 +10239,21 @@ send@0.18.0: serialize-javascript@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz" integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" -serve-index@1.9.1, serve-index@^1.9.1: +serve-index@^1.9.1, serve-index@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" @@ -10153,19 +10264,9 @@ serve-index@1.9.1, serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -serve-static@1.15.0, serve-static@^1.14.1: +serve-static@^1.14.1, serve-static@1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -10173,53 +10274,68 @@ serve-static@1.15.0, serve-static@^1.14.1: parseurl "~1.3.3" send "0.18.0" +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + server-destroy@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" + resolved "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz" integrity sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ== set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shallowequal@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -10228,19 +10344,19 @@ side-channel@^1.0.4: signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== simple-update-notifier@^1.0.7: version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== dependencies: semver "~7.0.0" sirv@^1.0.7: version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + resolved "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz" integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== dependencies: "@polka/url" "^1.0.0-next.20" @@ -10249,22 +10365,22 @@ sirv@^1.0.7: sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== slice-ansi@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" @@ -10273,7 +10389,7 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -10282,52 +10398,54 @@ slice-ansi@^4.0.0: slick@^1.12.2: version "1.12.2" - resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7" + resolved "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz" integrity sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A== smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -socket.io-adapter@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz#b50a4a9ecdd00c34d4c8c808224daa1a786152a6" - integrity sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg== +socket.io-adapter@~2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz" + integrity sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA== + dependencies: + ws "~8.11.0" socket.io-client@^4.4.1: - version "4.5.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.5.4.tgz#d3cde8a06a6250041ba7390f08d2468ccebc5ac9" - integrity sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g== + version "4.6.1" + resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz" + integrity sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.2" - engine.io-client "~6.2.3" + engine.io-client "~6.4.0" socket.io-parser "~4.2.1" socket.io-parser@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.1.tgz#01c96efa11ded938dcb21cbe590c26af5eff65e5" - integrity sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g== + version "4.2.2" + resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz" + integrity sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" socket.io@^4.4.1: - version "4.5.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.5.4.tgz#a4513f06e87451c17013b8d13fdfaf8da5a86a90" - integrity sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ== + version "4.6.1" + resolved "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz" + integrity sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA== dependencies: accepts "~1.3.4" base64id "~2.0.0" debug "~4.3.2" - engine.io "~6.2.1" - socket.io-adapter "~2.4.0" + engine.io "~6.4.1" + socket.io-adapter "~2.5.2" socket.io-parser "~4.2.1" sockjs@^0.3.21, sockjs@^0.3.24: version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" @@ -10336,7 +10454,7 @@ sockjs@^0.3.21, sockjs@^0.3.24: socks-proxy-agent@^6.0.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== dependencies: agent-base "^6.0.2" @@ -10345,7 +10463,7 @@ socks-proxy-agent@^6.0.0: socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -10354,30 +10472,30 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" smart-buffer "^4.2.0" -sortablejs@1.13.0: +sortablejs@>=1.7.0, sortablejs@1.13.0: version "1.13.0" - resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.13.0.tgz#3ab2473f8c69ca63569e80b1cd1b5669b51269e9" + resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz" integrity sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg== source-list-map@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: +source-map-js@^1.0.1, source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-loader@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" + resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz" integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== dependencies: abab "^2.0.5" @@ -10386,71 +10504,71 @@ source-map-loader@3.0.1: source-map-resolve@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz" integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== dependencies: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20: +source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - source-map@^0.5.0: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@^0.7.3: version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== + +source-map@0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.13" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" @@ -10462,7 +10580,7 @@ spdy-transport@^3.0.0: spdy@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" @@ -10473,7 +10591,7 @@ spdy@^4.0.2: speech-rule-engine@^4.0.6: version "4.0.7" - resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz#b655dacbad3dae04acc0f7665e26ef258397dd09" + resolved "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz" integrity sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g== dependencies: commander "9.2.0" @@ -10482,12 +10600,12 @@ speech-rule-engine@^4.0.6: sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.14.1, sshpk@^1.7.0: +sshpk@^1.14.1: version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" @@ -10502,155 +10620,157 @@ sshpk@^1.14.1, sshpk@^1.7.0: ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" ssri@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== dependencies: minipass "^3.1.1" stackframe@^1.3.4: version "1.3.4" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== stacktrace-gps@^3.0.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz#0c40b24a9b119b20da4525c398795338966a2fb0" + resolved "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz" integrity sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ== dependencies: source-map "0.5.6" stackframe "^1.3.4" -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +"statuses@>= 1.4.0 < 2", statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== statuses@~1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" integrity sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg== -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== stream-throttle@^0.1.3: version "0.1.3" - resolved "https://registry.yarnpkg.com/stream-throttle/-/stream-throttle-0.1.3.tgz#add57c8d7cc73a81630d31cd55d3961cfafba9c3" + resolved "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz" integrity sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ== dependencies: commander "^2.2.0" limiter "^1.0.5" -streamroller@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.3.tgz#d95689a8c29b30d093525d0baffe6616fd62ca7e" - integrity sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w== +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== dependencies: date-format "^4.0.14" debug "^4.3.4" fs-extra "^8.1.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trimend@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - ansi-regex "^2.0.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" strip-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strong-log-transformer@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== dependencies: duplexer "^0.1.1" @@ -10659,16 +10779,16 @@ strong-log-transformer@^2.1.0: stylus-loader@6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-6.2.0.tgz#0ba499e744e7fb9d9b3977784c8639728a7ced8c" + resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz" integrity sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg== dependencies: fast-glob "^3.2.7" klona "^2.0.4" normalize-path "^3.0.0" -stylus@0.56.0: +stylus@>=0.52.4, stylus@0.56.0: version "0.56.0" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.56.0.tgz#13fc85c48082db483c90d2530942fe8b0be988eb" + resolved "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz" integrity sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA== dependencies: css "^3.0.0" @@ -10678,60 +10798,57 @@ stylus@0.56.0: sax "~1.2.4" source-map "^0.7.3" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: +supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - integrity sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw== - symbol-observable@4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== symbol-tree@^3.2.4: version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar-stream@~2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -10741,42 +10858,42 @@ tar-stream@~2.2.0: readable-stream "^3.1.1" tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.12" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" - integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== + version "6.1.13" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^4.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" terser-webpack-plugin@^5.1.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== + version "5.3.7" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz" + integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== dependencies: - "@jridgewell/trace-mapping" "^0.3.14" + "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" + serialize-javascript "^6.0.1" + terser "^5.16.5" -terser@5.14.2: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== +terser@^5.16.5: + version "5.16.9" + resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" + integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" commander "^2.20.0" source-map-support "~0.5.20" -terser@^5.14.1: - version "5.16.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" - integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== +terser@5.14.2: + version "5.14.2" + resolved "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -10785,107 +10902,113 @@ terser@^5.14.1: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" glob "^7.1.4" minimatch "^3.0.4" -text-table@0.2.0, text-table@^0.2.0: +text-table@^0.2.0, text-table@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tfunk@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-4.0.0.tgz#de9399feaf2060901d590b7faad80fcd5443077e" - integrity sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ== - dependencies: - chalk "^1.1.3" - dlv "^1.1.3" - throttle-debounce@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" + resolved "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz" integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== throttleit@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + resolved "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz" integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== through@^2.3.4, through@^2.3.6, through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== thunky@^1.0.2: version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== tiny-invariant@^1.0.6: version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== tiny-warning@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tmp@0.2.1, tmp@^0.2.1, tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toggle-selection@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== totalist@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + resolved "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== touch@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tough-cookie@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: psl "^1.1.33" @@ -10895,7 +11018,7 @@ tough-cookie@^4.0.0: tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" @@ -10903,34 +11026,34 @@ tough-cookie@~2.5.0: tr46@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== dependencies: punycode "^2.1.1" tr46@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-kill@1.2.2, tree-kill@^1.2.2: +tree-kill@^1.2.2, tree-kill@1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -ts-node@10.2.1, ts-node@^10.0.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" - integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw== +ts-node@^10.0.0: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.6.1" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -10941,11 +11064,12 @@ ts-node@10.2.1, ts-node@^10.0.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-node@^8.10.2: version "8.10.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz" integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== dependencies: arg "^4.1.0" @@ -10955,143 +11079,156 @@ ts-node@^8.10.2: yn "3.1.1" tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + version "3.14.2" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-check@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typed-assert@^1.0.8: version "1.0.9" - resolved "https://registry.yarnpkg.com/typed-assert/-/typed-assert-1.0.9.tgz#8af9d4f93432c4970ec717e3006f33f135b06213" + resolved "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz" integrity sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg== typescript-compare@^0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" + resolved "https://registry.npmjs.org/typescript-compare/-/typescript-compare-0.0.2.tgz" integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== dependencies: typescript-logic "^0.0.0" typescript-logic@^0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" + resolved "https://registry.npmjs.org/typescript-logic/-/typescript-logic-0.0.0.tgz" integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== typescript-tuple@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" + resolved "https://registry.npmjs.org/typescript-tuple/-/typescript-tuple-2.2.1.tgz" integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== dependencies: typescript-compare "^0.0.2" +typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.4.3 <4.7", "typescript@>=4.6.2 <4.9", typescript@~4.8.4: + version "4.8.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + typescript@^2.5.0: version "2.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" + resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== -typescript@^4.6.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" - integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== - -typescript@~4.5.5: - version "4.5.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" - integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== - -ua-parser-js@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775" - integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg== - ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== + version "0.7.35" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== + +ua-parser-js@^1.0.33: + version "1.0.35" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz" + integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -11101,22 +11238,22 @@ unbox-primitive@^1.0.2: undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== unfetch@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + resolved "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz" integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -11124,70 +11261,70 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-filename@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== dependencies: unique-slug "^3.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unique-slug@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== dependencies: imurmurhash "^0.1.4" universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== untildify@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.9: +update-browserslist-db@^1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" @@ -11195,14 +11332,14 @@ update-browserslist-db@^1.0.9: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -11210,94 +11347,104 @@ url-parse@^1.5.3: use-memo-one@^1.1.1: version "1.1.3" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" + resolved "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz" integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@8.3.2, uuid@^8.1.0, uuid@^8.3.2: +uuid@^3.2.1: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.1.0, uuid@^8.3.2, uuid@8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^3.2.1, uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== valid-data-url@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/valid-data-url/-/valid-data-url-3.0.1.tgz#826c1744e71b5632e847dd15dbd45b9fb38aa34f" + resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA== validate-npm-package-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== dependencies: builtins "^1.0.3" vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - void-elements@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + w3c-hr-time@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== dependencies: xml-name-validator "^3.0.0" w3c-xmlserializer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz" integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== dependencies: xml-name-validator "^4.0.0" -watchpack@^2.3.1, watchpack@^2.4.0: +watchpack@^2.4.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" @@ -11305,21 +11452,21 @@ watchpack@^2.3.1, watchpack@^2.4.0: wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" web-resource-inliner@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz#df0822f0a12028805fe80719ed52ab6526886e02" + resolved "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz" integrity sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A== dependencies: ansi-colors "^4.1.1" @@ -11329,53 +11476,37 @@ web-resource-inliner@^6.0.1: node-fetch "^2.6.0" valid-data-url "^3.0.0" -webdriver-manager@^12.1.8: - version "12.1.8" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.8.tgz#5e70e73eaaf53a0767d5745270addafbc5905fd4" - integrity sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg== - dependencies: - adm-zip "^0.4.9" - chalk "^1.1.1" - del "^2.2.0" - glob "^7.0.3" - ini "^1.3.4" - minimist "^1.2.0" - q "^1.4.1" - request "^2.87.0" - rimraf "^2.5.2" - semver "^5.3.0" - xml2js "^0.4.17" - webfontloader@1.6.28: version "1.6.28" - resolved "https://registry.yarnpkg.com/webfontloader/-/webfontloader-1.6.28.tgz#db786129253cb6e8eae54c2fb05f870af6675bae" + resolved "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz" integrity sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== webidl-conversions@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-bundle-analyzer@^4.4.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" - integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg== + version "4.8.0" + resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz" + integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" chalk "^4.1.0" @@ -11386,9 +11517,9 @@ webpack-bundle-analyzer@^4.4.0: sirv "^1.0.7" ws "^7.3.1" -webpack-cli@^4.2.0: +webpack-cli@^4.2.0, webpack-cli@4.x.x: version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== dependencies: "@discoveryjs/json-ext" "^0.5.0" @@ -11404,9 +11535,9 @@ webpack-cli@^4.2.0: rechoir "^0.7.0" webpack-merge "^5.7.3" -webpack-dev-middleware@5.3.0: +webpack-dev-middleware@^5.3.0, webpack-dev-middleware@5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz#8fc02dba6e72e1d373eca361623d84610f27be7c" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz" integrity sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg== dependencies: colorette "^2.0.10" @@ -11415,9 +11546,9 @@ webpack-dev-middleware@5.3.0: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-middleware@^5.3.0, webpack-dev-middleware@^5.3.1: +webpack-dev-middleware@^5.3.1: version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: colorette "^2.0.10" @@ -11426,9 +11557,45 @@ webpack-dev-middleware@^5.3.0, webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" +webpack-dev-server@^4.0.0, webpack-dev-server@^4.5.0: + version "4.13.2" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" + integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + webpack-dev-server@4.7.3: version "4.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz#4e995b141ff51fa499906eebc7906f6925d0beaa" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz" integrity sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q== dependencies: "@types/bonjour" "^3.5.9" @@ -11461,44 +11628,9 @@ webpack-dev-server@4.7.3: webpack-dev-middleware "^5.3.0" ws "^8.1.0" -webpack-dev-server@^4.5.0: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" - -webpack-merge@5.8.0, webpack-merge@^5.7.3: +webpack-merge@^5.7.3, webpack-merge@5.8.0: version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== dependencies: clone-deep "^4.0.1" @@ -11506,7 +11638,7 @@ webpack-merge@5.8.0, webpack-merge@^5.7.3: webpack-sources@^1.4.3: version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" @@ -11514,50 +11646,20 @@ webpack-sources@^1.4.3: webpack-sources@^3.0.0, webpack-sources@^3.2.3: version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack-subresource-integrity@5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz#8b7606b033c6ccac14e684267cb7fb1f5c2a132a" + resolved "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz" integrity sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q== dependencies: typed-assert "^1.0.8" -webpack@5.70.0: - version "5.70.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.70.0.tgz#3461e6287a72b5e6e2f4872700bc8de0d7500e6d" - integrity sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.2" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" - webpack-sources "^3.2.3" - -webpack@^5.76.0: - version "5.76.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.0.tgz#f9fb9fb8c4a7dbdcd0d56a98e56b8a942ee2692c" - integrity sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA== +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.76.0, webpack@>=2, webpack@>=4.0.1, "webpack@4.x.x || 5.x.x": + version "5.78.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" + integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" @@ -11584,9 +11686,39 @@ webpack@^5.76.0: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +webpack@5.76.1: + version "5.76.1" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" + integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -11595,36 +11727,36 @@ websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-encoding@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" whatwg-encoding@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: iconv-lite "0.6.3" whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-mimetype@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== whatwg-url@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-10.0.0.tgz#37264f720b575b4a311bd4094ed8c760caaa05da" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz" integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== dependencies: tr46 "^3.0.0" @@ -11632,7 +11764,7 @@ whatwg-url@^10.0.0: whatwg-url@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== dependencies: tr46 "^3.0.0" @@ -11640,7 +11772,7 @@ whatwg-url@^11.0.0: whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -11648,7 +11780,7 @@ whatwg-url@^5.0.0: whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== dependencies: lodash "^4.7.0" @@ -11657,7 +11789,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -11666,45 +11798,57 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + which@^1.2.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wicked-good-xpath@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz#81b0e95e8650e49c94b22298fff8686b5553cf6c" + resolved "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz" integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw== wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" wildcard@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -11713,7 +11857,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -11722,113 +11866,97 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.3.1, ws@^7.4.6: +ws@^7.3.1: version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.1.0, ws@^8.2.3, ws@^8.4.2: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@~8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +ws@^8.1.0, ws@^8.13.0, ws@^8.2.3: + version "8.13.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== xhr2@^0.2.0: version "0.2.1" - resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93" + resolved "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz" integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw== xml-name-validator@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xml-name-validator@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xml2js@^0.4.17: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - xmlchars@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xmldom-sre@0.1.31: version "0.1.31" - resolved "https://registry.yarnpkg.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz#10860d5bab2c603144597d04bf2c4980e98067f4" + resolved "https://registry.npmjs.org/xmldom-sre/-/xmldom-sre-0.1.31.tgz" integrity sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw== xmlhttprequest-ssl@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" + resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz" integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.0.0.tgz#c65a1daaa977ad63cebdd52159147b789a4e19a9" - integrity sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA== - -yargs-parser@21.1.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@17.1.1: - version "17.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba" - integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" +yargs-parser@^21.1.1, yargs-parser@21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@20.0.0: + version "20.0.0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz" + integrity sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA== yargs@^16.1.1: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -11840,9 +11968,9 @@ yargs@^16.1.1: yargs-parser "^20.2.2" yargs@^17.2.1, yargs@^17.3.1, yargs@^17.6.2: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + version "17.7.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== dependencies: cliui "^8.0.1" escalade "^3.1.1" @@ -11852,9 +11980,22 @@ yargs@^17.2.1, yargs@^17.3.1, yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@17.1.1: + version "17.1.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz" + integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yauzl@^2.10.0: version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" @@ -11862,17 +12003,17 @@ yauzl@^2.10.0: yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zone.js@~0.11.5: +zone.js@~0.11.4, "zone.js@~0.11.4 || ~0.12.0", zone.js@~0.11.5: version "0.11.8" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.11.8.tgz#40dea9adc1ad007b5effb2bfed17f350f1f46a21" + resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" integrity sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA== dependencies: tslib "^2.3.0" From 859ffb5cdc7a643e0b0096dd973b3295715eb39f Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 11 Apr 2023 16:23:18 +0200 Subject: [PATCH 474/833] 101108: Automatic ng update @angular-devkit/build-angular@14 --- package.json | 2 +- yarn.lock | 988 +++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 839 insertions(+), 151 deletions(-) diff --git a/package.json b/package.json index 4360d49bf3..d6566515a7 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ }, "devDependencies": { "@angular-builders/custom-webpack": "~13.1.0", - "@angular-devkit/build-angular": "~13.3.10", + "@angular-devkit/build-angular": "~14.2.11", "@angular-eslint/builder": "13.1.0", "@angular-eslint/eslint-plugin": "13.1.0", "@angular-eslint/eslint-plugin-template": "13.1.0", diff --git a/yarn.lock b/yarn.lock index 00dafb2c9c..a67eeed190 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,19 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.2.0" + resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz" + integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== + +"@ampproject/remapping@^2.0.0", "@ampproject/remapping@2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@ampproject/remapping@^2.1.0": version "2.2.1" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" @@ -10,14 +23,6 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@ampproject/remapping@2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@angular-builders/custom-webpack@~13.1.0": version "13.1.0" resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-13.1.0.tgz" @@ -47,7 +52,15 @@ "@angular-devkit/core" "13.3.11" rxjs "6.6.7" -"@angular-devkit/build-angular@^13.0.0", "@angular-devkit/build-angular@^13.3.4", "@angular-devkit/build-angular@~13.3.10": +"@angular-devkit/architect@0.1402.11": + version "0.1402.11" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" + integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== + dependencies: + "@angular-devkit/core" "14.2.11" + rxjs "6.6.7" + +"@angular-devkit/build-angular@^13.0.0": version "13.3.11" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.11.tgz" integrity sha512-H4tpdmRu+6HSjsL+swV/8qj8v0YSDq6lpb31EYajlBB6fDj+YJQvHgaWvexSWl6eIqgDKXcujhNUjNi1enjwHw== @@ -119,6 +132,76 @@ optionalDependencies: esbuild "0.14.22" +"@angular-devkit/build-angular@^13.3.4", "@angular-devkit/build-angular@~14.2.11": + version "14.2.11" + resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.11.tgz" + integrity sha512-O3X7GXcCBCGceVSHT+GIJ2JrRCg2YcO7HtNavpmPrraNr1o+aCdTkmT5WTS2cqWkZBm/z0wqKR8PsX/ZoD2r1A== + dependencies: + "@ampproject/remapping" "2.2.0" + "@angular-devkit/architect" "0.1402.11" + "@angular-devkit/build-webpack" "0.1402.11" + "@angular-devkit/core" "14.2.11" + "@babel/core" "7.18.10" + "@babel/generator" "7.18.12" + "@babel/helper-annotate-as-pure" "7.18.6" + "@babel/plugin-proposal-async-generator-functions" "7.18.10" + "@babel/plugin-transform-async-to-generator" "7.18.6" + "@babel/plugin-transform-runtime" "7.18.10" + "@babel/preset-env" "7.18.10" + "@babel/runtime" "7.18.9" + "@babel/template" "7.18.10" + "@discoveryjs/json-ext" "0.5.7" + "@ngtools/webpack" "14.2.11" + ansi-colors "4.1.3" + babel-loader "8.2.5" + babel-plugin-istanbul "6.1.1" + browserslist "^4.9.1" + cacache "16.1.2" + copy-webpack-plugin "11.0.0" + critters "0.0.16" + css-loader "6.7.1" + esbuild-wasm "0.15.5" + glob "8.0.3" + https-proxy-agent "5.0.1" + inquirer "8.2.4" + jsonc-parser "3.1.0" + karma-source-map-support "1.4.0" + less "4.1.3" + less-loader "11.0.0" + license-webpack-plugin "4.0.2" + loader-utils "3.2.1" + mini-css-extract-plugin "2.6.1" + minimatch "5.1.0" + open "8.4.0" + ora "5.4.1" + parse5-html-rewriting-stream "6.0.1" + piscina "3.2.0" + postcss "8.4.16" + postcss-import "15.0.0" + postcss-loader "7.0.1" + postcss-preset-env "7.8.0" + regenerator-runtime "0.13.9" + resolve-url-loader "5.0.0" + rxjs "6.6.7" + sass "1.54.4" + sass-loader "13.0.2" + semver "7.3.7" + source-map-loader "4.0.0" + source-map-support "0.5.21" + stylus "0.59.0" + stylus-loader "7.0.0" + terser "5.14.2" + text-table "0.2.0" + tree-kill "1.2.2" + tslib "2.4.0" + webpack "5.76.1" + webpack-dev-middleware "5.3.3" + webpack-dev-server "4.11.0" + webpack-merge "5.8.0" + webpack-subresource-integrity "5.1.0" + optionalDependencies: + esbuild "0.15.5" + "@angular-devkit/build-webpack@0.1303.11": version "0.1303.11" resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.11.tgz" @@ -127,6 +210,14 @@ "@angular-devkit/architect" "0.1303.11" rxjs "6.6.7" +"@angular-devkit/build-webpack@0.1402.11": + version "0.1402.11" + resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.11.tgz" + integrity sha512-Ajyg1O6B6JSHsDlPdh165uy3glW4IiUlRXu8VVAOSA88WIT1Dl17f4Oun0/t27ip0/CNceiVY9MzOqIwGL1E6g== + dependencies: + "@angular-devkit/architect" "0.1402.11" + rxjs "6.6.7" + "@angular-devkit/core@^12.2.17", "@angular-devkit/core@12.2.18": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" @@ -151,6 +242,17 @@ rxjs "6.6.7" source-map "0.7.3" +"@angular-devkit/core@14.2.11": + version "14.2.11" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz" + integrity sha512-cBIGs6y9rykOQqnuAQOB1DgIRyBFYtvKRJb7QNUfIJ0qUfARKkuV/yikv3lrb95ePGkmoRzmjkFqcFZiYU+r7A== + dependencies: + ajv "8.11.0" + ajv-formats "2.1.1" + jsonc-parser "3.1.0" + rxjs "6.6.7" + source-map "0.7.4" + "@angular-devkit/schematics@^12.2.17", "@angular-devkit/schematics@12.2.18": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" @@ -276,7 +378,23 @@ dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^13.0.0 || ^13.3.0-rc.0", "@angular/compiler-cli@~14.3.0", "@angular/compiler-cli@14.3.0": +"@angular/compiler-cli@^13.0.0 || ^13.3.0-rc.0", "@angular/compiler-cli@13.4.0": + version "13.4.0" + resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.4.0.tgz" + integrity sha512-OQD0w9aZXbpcyWDEaozoHH/n3eYDLhBsmJcIBVqUN8Awx8m17v2u2R6m7DIEpVRbBzYtTscAMTKONNVwsTolHA== + dependencies: + "@babel/core" "^7.17.2" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.11.0" + magic-string "^0.26.0" + reflect-metadata "^0.1.2" + semver "^7.0.0" + sourcemap-codec "^1.4.8" + tslib "^2.3.0" + yargs "^17.2.1" + +"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@~14.3.0", "@angular/compiler-cli@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz" integrity sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ== @@ -299,6 +417,13 @@ dependencies: tslib "^2.3.0" +"@angular/compiler@13.4.0": + version "13.4.0" + resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-13.4.0.tgz" + integrity sha512-tPWoq2RC/VIrJtynEnMRWQZemBIC/ypuVfuUf3p8IIXCZHjuGnibdlZTtFYkexc4/sR1ug9xk1cJWvbOPwilng== + dependencies: + tslib "^2.3.0" + "@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@~14.3.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" @@ -325,7 +450,16 @@ resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-14.3.0.tgz" integrity sha512-Sij3OQzj1UGs1O8H9PxVAY/o27+oqZwQRnib66rsWvtbIBTjHp4FV3dTs5iVcr62GGv4V4Mff/2I82NP10GPQg== -"@angular/localize@^13.0.0", "@angular/localize@^13.0.0 || ^13.3.0-rc.0", "@angular/localize@14.3.0": +"@angular/localize@^13.0.0 || ^13.3.0-rc.0": + version "13.4.0" + resolved "https://registry.npmjs.org/@angular/localize/-/localize-13.4.0.tgz" + integrity sha512-du98xPMGNexwqc1Tbg1lR3tihUlW9IBn7OaTDVdzhFuIUkt30mLK4ri2LSpLZrwT5q3nLHi0e7O3ublY7ubGzQ== + dependencies: + "@babel/core" "7.17.2" + glob "7.2.0" + yargs "^17.2.1" + +"@angular/localize@^13.0.0", "@angular/localize@^14.0.0", "@angular/localize@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/localize/-/localize-14.3.0.tgz" integrity sha512-YmwlOEGnFonfDrIcWqlxXVFFjd0Q6yXeHGZCBFBfwbtjIseiJJ4UBmkTUgFeq7qlWevSFQzHdQnraFRGZpnMig== @@ -376,7 +510,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": +"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== @@ -423,6 +557,48 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@7.17.2": + version "7.17.2" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz" + integrity sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw== + dependencies: + "@ampproject/remapping" "^2.0.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.17.0" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.17.2" + "@babel/parser" "^7.17.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.17.0" + "@babel/types" "^7.17.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + +"@babel/core@7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.10" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + "@babel/generator@^7.16.8", "@babel/generator@7.16.8": version "7.16.8" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz" @@ -432,6 +608,25 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.17.0": + version "7.21.4" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/generator@^7.18.10", "@babel/generator@7.18.12": + version "7.18.12" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== + dependencies: + "@babel/types" "^7.18.10" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/generator@^7.18.9", "@babel/generator@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" @@ -442,7 +637,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== @@ -571,12 +766,12 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.20.2" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-remap-async-to-generator@^7.16.8": +"@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== @@ -629,7 +824,7 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.21.0": +"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== @@ -644,7 +839,7 @@ "@babel/traverse" "^7.20.5" "@babel/types" "^7.20.5" -"@babel/helpers@^7.16.7", "@babel/helpers@^7.18.9": +"@babel/helpers@^7.16.7", "@babel/helpers@^7.17.2", "@babel/helpers@^7.18.9": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz" integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== @@ -662,19 +857,19 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": +"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0", "@babel/parser@^7.18.10", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz" integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== @@ -692,7 +887,17 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.7": +"@babel/plugin-proposal-async-generator-functions@^7.18.10", "@babel/plugin-proposal-async-generator-functions@7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -700,7 +905,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.16.7": +"@babel/plugin-proposal-class-static-block@^7.16.7", "@babel/plugin-proposal-class-static-block@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz" integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== @@ -709,7 +914,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.16.7": +"@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== @@ -717,7 +922,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": +"@babel/plugin-proposal-export-namespace-from@^7.16.7", "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== @@ -725,7 +930,7 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7": +"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== @@ -733,7 +938,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7", "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz" integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== @@ -741,7 +946,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -749,7 +954,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.7": +"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== @@ -757,7 +962,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.7": +"@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== @@ -768,7 +973,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.20.7" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": +"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== @@ -776,7 +981,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.20.7": +"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -785,7 +990,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.11": +"@babel/plugin-proposal-private-methods@^7.16.11", "@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== @@ -793,7 +998,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": +"@babel/plugin-proposal-private-property-in-object@^7.16.7", "@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz" integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== @@ -803,7 +1008,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -846,6 +1051,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.20.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" @@ -909,7 +1121,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.7": +"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.18.6": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz" integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== @@ -925,21 +1137,30 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": +"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.16.7": +"@babel/plugin-transform-block-scoping@^7.16.7", "@babel/plugin-transform-block-scoping@^7.18.9": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.16.7": +"@babel/plugin-transform-classes@^7.16.7", "@babel/plugin-transform-classes@^7.18.9": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== @@ -954,7 +1175,7 @@ "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": +"@babel/plugin-transform-computed-properties@^7.16.7", "@babel/plugin-transform-computed-properties@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz" integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== @@ -962,14 +1183,14 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.16.7": +"@babel/plugin-transform-destructuring@^7.16.7", "@babel/plugin-transform-destructuring@^7.18.9": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz" integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== @@ -977,14 +1198,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.16.7": +"@babel/plugin-transform-duplicate-keys@^7.16.7", "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": +"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== @@ -992,14 +1213,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.16.7": +"@babel/plugin-transform-for-of@^7.16.7", "@babel/plugin-transform-for-of@^7.18.8": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz" integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-function-name@^7.16.7": +"@babel/plugin-transform-function-name@^7.16.7", "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== @@ -1008,21 +1229,21 @@ "@babel/helper-function-name" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.16.7": +"@babel/plugin-transform-literals@^7.16.7", "@babel/plugin-transform-literals@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.16.7": +"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.16.7": +"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.18.6": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== @@ -1030,7 +1251,7 @@ "@babel/helper-module-transforms" "^7.20.11" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.16.8": +"@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.18.6": version "7.21.2" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz" integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== @@ -1039,7 +1260,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-simple-access" "^7.20.2" -"@babel/plugin-transform-modules-systemjs@^7.16.7": +"@babel/plugin-transform-modules-systemjs@^7.16.7", "@babel/plugin-transform-modules-systemjs@^7.18.9": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== @@ -1049,7 +1270,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-validator-identifier" "^7.19.1" -"@babel/plugin-transform-modules-umd@^7.16.7": +"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== @@ -1057,7 +1278,7 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8", "@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== @@ -1065,14 +1286,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.20.5" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-new-target@^7.16.7": +"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7": +"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== @@ -1080,21 +1301,21 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.20.7": +"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.7": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz" integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-property-literals@^7.16.7": +"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.16.7": +"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.18.6": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== @@ -1102,7 +1323,7 @@ "@babel/helper-plugin-utils" "^7.20.2" regenerator-transform "^0.15.1" -"@babel/plugin-transform-reserved-words@^7.16.7": +"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== @@ -1121,14 +1342,26 @@ babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7": +"@babel/plugin-transform-runtime@7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz" + integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.16.7": +"@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== @@ -1136,35 +1369,35 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" -"@babel/plugin-transform-sticky-regex@^7.16.7": +"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.16.7": +"@babel/plugin-transform-template-literals@^7.16.7", "@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.16.7": +"@babel/plugin-transform-typeof-symbol@^7.16.7", "@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.16.7": +"@babel/plugin-transform-unicode-escapes@^7.16.7", "@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-regex@^7.16.7": +"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== @@ -1252,6 +1485,87 @@ core-js-compat "^3.20.2" semver "^6.3.0" +"@babel/preset-env@7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" @@ -1290,6 +1604,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.16.7", "@babel/template@7.16.7": version "7.16.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" @@ -1308,7 +1629,16 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.10.3", "@babel/traverse@^7.16.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": +"@babel/template@7.18.10": + version "7.18.10" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" + +"@babel/traverse@^7.10.3", "@babel/traverse@^7.16.10", "@babel/traverse@^7.17.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": version "7.21.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz" integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== @@ -1324,7 +1654,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.10.3", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": +"@babel/types@^7.10.3", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz" integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== @@ -1345,7 +1675,7 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@csstools/postcss-cascade-layers@^1.1.1": +"@csstools/postcss-cascade-layers@^1.0.5", "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz" integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== @@ -1815,6 +2145,11 @@ resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.11.tgz" integrity sha512-gB33hTbc/RJmHyIgSUYj8ErPazhYYm7yfapOnvwHdYhCjrj1TKkR1ierOlhJtpfBYUQg6FChdl2YpyIQNPjWMA== +"@ngtools/webpack@14.2.11": + version "14.2.11" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.11.tgz" + integrity sha512-4enbLFAp98uTgWYF6OFceQqLcfv2/0brIrNN4iWT9xe/Mh3zdCt+eH42zvNRsqo9WXNWRSLvnx8I924p83LNlw== + "@nguniversal/builders@^13.1.1": version "13.1.1" resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-13.1.1.tgz" @@ -2333,9 +2668,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^16.8.6 || ^17.0.0": - version "18.0.34" - resolved "https://registry.npmjs.org/@types/react/-/react-18.0.34.tgz" - integrity sha512-NO1UO8941541CJl1BeOXi8a9dNKFK09Gnru5ZJqkm4Q3/WoQJtHvmwt0VX0SB9YCEwe7TfSSxDuaNmx6H2BAIQ== + version "17.0.57" + resolved "https://registry.npmjs.org/@types/react/-/react-17.0.57.tgz" + integrity sha512-e4msYpu5QDxzNrXDHunU/VPyv2M1XemGG/p7kfCjUiPtlLDCWLGQfgAMng6YyisWYxZ09mYdQlmMnyS0NfZdEg== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2846,7 +3181,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0: +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2856,40 +3191,40 @@ ajv@^6.10.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.9.1, ajv@^8.0.0, ajv@^8.8.0, ajv@^8.8.2, ajv@8.9.0: - version "8.9.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz" - integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== +ajv@^8.0.0, ajv@8.6.2: + version "8.6.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@8.6.2: - version "8.6.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== +ajv@^8.8.0, ajv@^8.8.2: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@8.11.0: + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@8.9.0: + version "8.9.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2908,7 +3243,7 @@ angulartics2@^12.0.0: dependencies: tslib "^2.3.0" -ansi-colors@^4.1.1: +ansi-colors@^4.1.1, ansi-colors@4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== @@ -3137,7 +3472,7 @@ atob@^2.1.2: resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.4.13, autoprefixer@^10.4.2: +autoprefixer@^10.4.13, autoprefixer@^10.4.2, autoprefixer@^10.4.8: version "10.4.14" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== @@ -3219,7 +3554,7 @@ babel-plugin-istanbul@6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-polyfill-corejs2@^0.3.0: +babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== @@ -3228,7 +3563,7 @@ babel-plugin-polyfill-corejs2@^0.3.0: "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: +babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz" integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== @@ -3243,6 +3578,13 @@ babel-plugin-polyfill-regenerator@^0.3.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -3567,6 +3909,30 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" +cacache@16.1.2: + version "16.1.2" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz" + integrity sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^1.1.1" + cachedir@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" @@ -4096,7 +4462,19 @@ copy-webpack-plugin@10.2.1: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: +copy-webpack-plugin@11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.20.2, core-js-compat@^3.21.0, core-js-compat@^3.22.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== @@ -4220,6 +4598,20 @@ css-loader@6.5.1: postcss-value-parser "^4.1.0" semver "^7.3.5" +css-loader@6.7.1: + version "6.7.1" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.7" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.5" + css-prefers-color-scheme@^6.0.2, css-prefers-color-scheme@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" @@ -4263,6 +4655,11 @@ cssdb@^5.0.0: resolved "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz" integrity sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw== +cssdb@^7.0.0: + version "7.5.4" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" + integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== + cssdb@^7.1.0: version "7.5.4" resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" @@ -5031,11 +5428,21 @@ esbuild-darwin-64@0.14.22: resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz" integrity sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw== +esbuild-darwin-64@0.15.5: + version "0.15.5" + resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz" + integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== + esbuild-wasm@0.14.22: version "0.14.22" resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz" integrity sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw== +esbuild-wasm@0.15.5: + version "0.15.5" + resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz" + integrity sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A== + esbuild@0.14.22: version "0.14.22" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz" @@ -5061,6 +5468,33 @@ esbuild@0.14.22: esbuild-windows-64 "0.14.22" esbuild-windows-arm64 "0.14.22" +esbuild@0.15.5: + version "0.15.5" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz" + integrity sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg== + optionalDependencies: + "@esbuild/linux-loong64" "0.15.5" + esbuild-android-64 "0.15.5" + esbuild-android-arm64 "0.15.5" + esbuild-darwin-64 "0.15.5" + esbuild-darwin-arm64 "0.15.5" + esbuild-freebsd-64 "0.15.5" + esbuild-freebsd-arm64 "0.15.5" + esbuild-linux-32 "0.15.5" + esbuild-linux-64 "0.15.5" + esbuild-linux-arm "0.15.5" + esbuild-linux-arm64 "0.15.5" + esbuild-linux-mips64le "0.15.5" + esbuild-linux-ppc64le "0.15.5" + esbuild-linux-riscv64 "0.15.5" + esbuild-linux-s390x "0.15.5" + esbuild-netbsd-64 "0.15.5" + esbuild-openbsd-64 "0.15.5" + esbuild-sunos-64 "0.15.5" + esbuild-windows-32 "0.15.5" + esbuild-windows-64 "0.15.5" + esbuild-windows-arm64 "0.15.5" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -5449,7 +5883,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.4, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -5909,10 +6343,10 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0, glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== +glob@^8.0.1, glob@8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5932,17 +6366,6 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@8.0.3: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" @@ -6017,6 +6440,17 @@ globby@^12.0.2: merge2 "^1.4.1" slash "^4.0.0" +globby@^13.1.1: + version "13.1.4" + resolved "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" @@ -6308,7 +6742,7 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.0, https-proxy-agent@5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6514,6 +6948,27 @@ inquirer@8.2.0: strip-ansi "^6.0.0" through "^2.3.6" +inquirer@8.2.4: + version "8.2.4" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" @@ -6933,6 +7388,11 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +"jquery@1.9.1 - 3": + version "3.6.4" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz" + integrity sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ== + js-cookie@2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" @@ -7104,6 +7564,11 @@ jsonc-parser@^3.0.0, jsonc-parser@3.0.0: resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== +jsonc-parser@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz" + integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== + jsonc-parser@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" @@ -7361,7 +7826,31 @@ less-loader@10.2.0: dependencies: klona "^2.0.4" -"less@^3.5.0 || ^4.0.0", less@4.1.2: +less-loader@11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz" + integrity sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw== + dependencies: + klona "^2.0.4" + +"less@^3.5.0 || ^4.0.0", less@4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/less/-/less-4.1.3.tgz" + integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^2.3.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^3.1.0" + source-map "~0.6.0" + +less@4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/less/-/less-4.1.2.tgz" integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA== @@ -7797,6 +8286,13 @@ mini-css-extract-plugin@2.5.3: dependencies: schema-utils "^4.0.0" +mini-css-extract-plugin@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== + dependencies: + schema-utils "^4.0.0" + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" @@ -7809,10 +8305,10 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== +minimatch@^5.0.1, minimatch@5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" @@ -8070,6 +8566,15 @@ needle@^2.5.2: iconv-lite "^0.4.4" sax "^1.2.4" +needle@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz" + integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.6.3" + sax "^1.2.4" + negotiator@^0.6.2, negotiator@^0.6.3, negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" @@ -8805,7 +9310,12 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -popper.js@^1.16.1, popper.js@1.16.1-lts: +popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +popper.js@1.16.1-lts: version "1.16.1-lts" resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== @@ -8877,7 +9387,7 @@ postcss-custom-media@^8.0.0, postcss-custom-media@^8.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.2: +postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.2, postcss-custom-properties@^12.1.8: version "12.1.11" resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz" integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== @@ -8962,6 +9472,15 @@ postcss-import@14.0.2: read-cache "^1.0.0" resolve "^1.1.7" +postcss-import@15.0.0: + version "15.0.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz" + integrity sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + postcss-initial@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz" @@ -8995,6 +9514,15 @@ postcss-loader@6.2.1: klona "^2.0.5" semver "^7.3.5" +postcss-loader@7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz" + integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.7" + postcss-logical@^5.0.3, postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" @@ -9033,7 +9561,7 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^10.1.2, postcss-nesting@^10.2.0: +postcss-nesting@^10.1.10, postcss-nesting@^10.1.2, postcss-nesting@^10.2.0: version "10.2.0" resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz" integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== @@ -9159,6 +9687,61 @@ postcss-preset-env@7.2.3: postcss-replace-overflow-wrap "^4.0.0" postcss-selector-not "^5.0.0" +postcss-preset-env@7.8.0: + version "7.8.0" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz" + integrity sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA== + dependencies: + "@csstools/postcss-cascade-layers" "^1.0.5" + "@csstools/postcss-color-function" "^1.1.1" + "@csstools/postcss-font-format-keywords" "^1.0.1" + "@csstools/postcss-hwb-function" "^1.0.2" + "@csstools/postcss-ic-unit" "^1.0.1" + "@csstools/postcss-is-pseudo-class" "^2.0.7" + "@csstools/postcss-nested-calc" "^1.0.0" + "@csstools/postcss-normalize-display-values" "^1.0.1" + "@csstools/postcss-oklab-function" "^1.1.1" + "@csstools/postcss-progressive-custom-properties" "^1.3.0" + "@csstools/postcss-stepped-value-functions" "^1.0.1" + "@csstools/postcss-text-decoration-shorthand" "^1.0.0" + "@csstools/postcss-trigonometric-functions" "^1.0.2" + "@csstools/postcss-unset-value" "^1.0.2" + autoprefixer "^10.4.8" + browserslist "^4.21.3" + css-blank-pseudo "^3.0.3" + css-has-pseudo "^3.0.4" + css-prefers-color-scheme "^6.0.3" + cssdb "^7.0.0" + postcss-attribute-case-insensitive "^5.0.2" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^4.2.4" + postcss-color-hex-alpha "^8.0.4" + postcss-color-rebeccapurple "^7.1.1" + postcss-custom-media "^8.0.2" + postcss-custom-properties "^12.1.8" + postcss-custom-selectors "^6.0.3" + postcss-dir-pseudo-class "^6.0.5" + postcss-double-position-gradients "^3.1.2" + postcss-env-function "^4.0.6" + postcss-focus-visible "^6.0.4" + postcss-focus-within "^5.0.4" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.5" + postcss-image-set-function "^4.0.7" + postcss-initial "^4.0.1" + postcss-lab-function "^4.2.1" + postcss-logical "^5.0.4" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.1.10" + postcss-opacity-percentage "^1.1.2" + postcss-overflow-shorthand "^3.0.4" + postcss-page-break "^3.0.4" + postcss-place "^7.0.5" + postcss-pseudo-class-any-link "^7.1.6" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^6.0.1" + postcss-value-parser "^4.2.0" + postcss-pseudo-class-any-link@^7.0.2, postcss-pseudo-class-any-link@^7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz" @@ -9214,7 +9797,7 @@ postcss@^6.0.6: source-map "^0.6.1" supports-color "^5.4.0" -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.2.15, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.6: +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.6, postcss@^8.4.7: version "8.4.21" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -9231,7 +9814,7 @@ postcss@^7.0.14: picocolors "^0.2.1" source-map "^0.6.1" -postcss@8.4.5: +postcss@^8.2.15, postcss@8.4.5: version "8.4.5" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz" integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== @@ -9240,6 +9823,15 @@ postcss@8.4.5: picocolors "^1.0.0" source-map-js "^1.0.1" +postcss@8.4.16: + version "8.4.16" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" + integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -10019,6 +10611,14 @@ sass-loader@12.4.0: klona "^2.0.4" neo-async "^2.6.2" +sass-loader@13.0.2: + version "13.0.2" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz" + integrity sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + sass-resources-loader@^2.1.1: version "2.2.5" resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" @@ -10045,6 +10645,15 @@ sass@1.49.9: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +sass@1.54.4: + version "1.54.4" + resolved "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz" + integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" @@ -10116,7 +10725,7 @@ select-hose@^2.0.0: resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.0.0, selfsigned@^2.1.1: +selfsigned@^2.0.0, selfsigned@^2.0.1, selfsigned@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== @@ -10138,7 +10747,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0: +semver@^7.0.0, semver@^7.3.5: version "7.4.0" resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== @@ -10166,17 +10775,10 @@ semver@^7.3.4: dependencies: lru-cache "^6.0.0" -semver@^7.3.5, semver@7.3.5: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== +semver@^7.3.7, semver@7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" @@ -10199,6 +10801,13 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" +semver@7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.16.2: version "0.16.2" resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz" @@ -10502,6 +11111,15 @@ source-map-loader@3.0.1: iconv-lite "^0.6.3" source-map-js "^1.0.1" +source-map-loader@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz" + integrity sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw== + dependencies: + abab "^2.0.6" + iconv-lite "^0.6.3" + source-map-js "^1.0.2" + source-map-resolve@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz" @@ -10543,6 +11161,11 @@ source-map@0.7.3: resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@0.7.4: + version "0.7.4" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" @@ -10786,7 +11409,27 @@ stylus-loader@6.2.0: klona "^2.0.4" normalize-path "^3.0.0" -stylus@>=0.52.4, stylus@0.56.0: +stylus-loader@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz" + integrity sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A== + dependencies: + fast-glob "^3.2.11" + klona "^2.0.5" + normalize-path "^3.0.0" + +stylus@>=0.52.4, stylus@0.59.0: + version "0.59.0" + resolved "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz" + integrity sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg== + dependencies: + "@adobe/css-tools" "^4.0.1" + debug "^4.3.2" + glob "^7.1.6" + sax "~1.2.4" + source-map "^0.7.3" + +stylus@0.56.0: version "0.56.0" resolved "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz" integrity sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA== @@ -11117,6 +11760,11 @@ tslib@2.3.1: resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -11211,6 +11859,11 @@ typescript@^2.5.0: resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== +"typescript@>=4.4.2 <4.7": + version "4.6.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz" + integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== + ua-parser-js@^0.7.30: version "0.7.35" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" @@ -11546,7 +12199,7 @@ webpack-dev-middleware@^5.3.0, webpack-dev-middleware@5.3.0: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-middleware@^5.3.1: +webpack-dev-middleware@^5.3.1, webpack-dev-middleware@5.3.3: version "5.3.3" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== @@ -11593,6 +12246,41 @@ webpack-dev-server@^4.0.0, webpack-dev-server@^4.5.0: webpack-dev-middleware "^5.3.1" ws "^8.13.0" +webpack-dev-server@4.11.0: + version "4.11.0" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz" + integrity sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + webpack-dev-server@4.7.3: version "4.7.3" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz" @@ -11656,7 +12344,7 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.76.0, webpack@>=2, webpack@>=4.0.1, "webpack@4.x.x || 5.x.x": +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=2, webpack@>=4.0.1, "webpack@4.x.x || 5.x.x": version "5.78.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== @@ -11686,7 +12374,7 @@ webpack-subresource-integrity@5.1.0: watchpack "^2.4.0" webpack-sources "^3.2.3" -webpack@5.76.1: +webpack@^5.54.0, webpack@5.76.1: version "5.76.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== @@ -11879,7 +12567,7 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.1.0, ws@^8.13.0, ws@^8.2.3: +ws@^8.1.0, ws@^8.13.0, ws@^8.2.3, ws@^8.4.2: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== From 5fb237d905eeda1ded2f98c77a2dc8cff4708dc0 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 11 Apr 2023 16:28:29 +0200 Subject: [PATCH 475/833] 101108: Automatic ng update @nguniversal/builders@14 --- package.json | 2 +- yarn.lock | 129 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 85 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index d6566515a7..a0c63ebe5c 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "@fortawesome/fontawesome-free": "^6.2.1", "@ngrx/store-devtools": "^13.0.2", "@ngtools/webpack": "^13.2.6", - "@nguniversal/builders": "^13.1.1", + "@nguniversal/builders": "^14.2.3", "@types/deep-freeze": "0.1.2", "@types/ejs": "^3.1.1", "@types/express": "^4.17.9", diff --git a/yarn.lock b/yarn.lock index a67eeed190..9d08f5bc3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,7 +44,15 @@ "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/architect@^0.1303.0", "@angular-devkit/architect@>=0.1300.0 < 0.1400.0", "@angular-devkit/architect@0.1303.11": +"@angular-devkit/architect@^0.1402.0": + version "0.1402.11" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" + integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== + dependencies: + "@angular-devkit/core" "14.2.11" + rxjs "6.6.7" + +"@angular-devkit/architect@>=0.1300.0 < 0.1400.0", "@angular-devkit/architect@0.1303.11": version "0.1303.11" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.11.tgz" integrity sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg== @@ -132,7 +140,7 @@ optionalDependencies: esbuild "0.14.22" -"@angular-devkit/build-angular@^13.3.4", "@angular-devkit/build-angular@~14.2.11": +"@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@~14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.11.tgz" integrity sha512-O3X7GXcCBCGceVSHT+GIJ2JrRCg2YcO7HtNavpmPrraNr1o+aCdTkmT5WTS2cqWkZBm/z0wqKR8PsX/ZoD2r1A== @@ -230,7 +238,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@^13.0.0", "@angular-devkit/core@^13.3.4", "@angular-devkit/core@13.3.11": +"@angular-devkit/core@^13.0.0", "@angular-devkit/core@13.3.11": version "13.3.11" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz" integrity sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w== @@ -242,7 +250,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@14.2.11": +"@angular-devkit/core@^14.2.0", "@angular-devkit/core@14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz" integrity sha512-cBIGs6y9rykOQqnuAQOB1DgIRyBFYtvKRJb7QNUfIJ0qUfARKkuV/yikv3lrb95ePGkmoRzmjkFqcFZiYU+r7A== @@ -371,7 +379,7 @@ symbol-observable "4.0.0" uuid "8.3.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@~14.3.0", "@angular/common@14.3.0", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^14.2.0", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@~14.3.0", "@angular/common@14.3.0", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz" integrity sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ== @@ -424,20 +432,13 @@ dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@~14.3.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^14.2.0", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@~14.3.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" integrity sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ== dependencies: tslib "^2.3.0" -"@angular/core@13.4.0": - version "13.4.0" - resolved "https://registry.npmjs.org/@angular/core/-/core-13.4.0.tgz" - integrity sha512-RE9KL7pRj+3lkJjdSR2uKmqiG0gqjnoVCMbSLG93pWrmzNIhElmlkiDaK39aMHGl836dc68Usv9CEisyVnRqHQ== - dependencies: - tslib "^2.3.0" - "@angular/forms@^13.0.0", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@~14.3.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz" @@ -2150,20 +2151,20 @@ resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.11.tgz" integrity sha512-4enbLFAp98uTgWYF6OFceQqLcfv2/0brIrNN4iWT9xe/Mh3zdCt+eH42zvNRsqo9WXNWRSLvnx8I924p83LNlw== -"@nguniversal/builders@^13.1.1": - version "13.1.1" - resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-13.1.1.tgz" - integrity sha512-R73GKHr7KeTIBE/kSudhsN0V1gx+TrnM28RHdzw3eHCz2Q3msGpgdt/79+2EjLcvWjoVHOsD+aFIJ9+sx422yQ== +"@nguniversal/builders@^14.2.3": + version "14.2.3" + resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-14.2.3.tgz" + integrity sha512-4WpQ5zMfw4BIH/2ymWchFm2bbN8w0/sC0Rg3IracJ9ESsfTJMaIg8CzVer6NBqC+5As9iLZwau7nrfzt7sQf1A== dependencies: - "@angular-devkit/architect" "^0.1303.0" - "@angular-devkit/core" "^13.3.4" - "@nguniversal/common" "13.1.1" + "@angular-devkit/architect" "^0.1402.0" + "@angular-devkit/core" "^14.2.0" + "@nguniversal/common" "14.2.3" browser-sync "^2.26.7" express "^4.17.1" guess-parser "^0.4.12" http-proxy-middleware "^2.0.0" ora "^5.1.0" - piscina "~3.1.0" + piscina "~3.2.0" rxjs "^6.5.5" tree-kill "^1.2.2" @@ -2176,6 +2177,15 @@ jsdom "19.0.0" tslib "^2.3.0" +"@nguniversal/common@14.2.3": + version "14.2.3" + resolved "https://registry.npmjs.org/@nguniversal/common/-/common-14.2.3.tgz" + integrity sha512-FWoZY+DZCNw24tNnnWkgTpNAlshkfiaxiT7V+fx2WFpY0LNXLWk45+hWhl4+wFEknOXr/DT/oU1m/RjR6FgXZQ== + dependencies: + critters "0.0.16" + jsdom "20.0.0" + tslib "^2.3.0" + "@nguniversal/express-engine@^13.0.2": version "13.1.1" resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-13.1.1.tgz" @@ -4776,7 +4786,7 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -data-urls@^3.0.1: +data-urls@^3.0.1, data-urls@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== @@ -6742,7 +6752,7 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.0, https-proxy-agent@5.0.1: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1, https-proxy-agent@5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -7507,6 +7517,39 @@ jsdom@19.0.0: ws "^8.2.3" xml-name-validator "^4.0.0" +jsdom@20.0.0: + version "20.0.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz" + integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== + dependencies: + abab "^2.0.6" + acorn "^8.7.1" + acorn-globals "^6.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.3.1" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "^7.0.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.8.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -9191,6 +9234,13 @@ parse5@^6.0.1: resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + parse5@6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" @@ -9281,18 +9331,7 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -piscina@~3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/piscina/-/piscina-3.1.0.tgz" - integrity sha512-KTW4sjsCD34MHrUbx9eAAbuUSpVj407hQSgk/6Epkg0pbRBmv4a3UX7Sr8wxm9xYqQLnsN4mFOjqGDzHAdgKQg== - dependencies: - eventemitter-asyncresource "^1.0.0" - hdr-histogram-js "^2.0.1" - hdr-histogram-percentiles-obj "^3.0.0" - optionalDependencies: - nice-napi "^1.0.2" - -piscina@3.2.0: +piscina@~3.2.0, piscina@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz" integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== @@ -10540,14 +10579,7 @@ rxjs@^6.5.4: dependencies: tslib "^1.9.0" -rxjs@^6.5.5: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@~6.6.0, rxjs@6.6.7: +rxjs@^6.5.5, rxjs@~6.6.0, rxjs@6.6.7: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -10666,6 +10698,13 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz" @@ -12567,7 +12606,7 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.1.0, ws@^8.13.0, ws@^8.2.3, ws@^8.4.2: +ws@^8.1.0, ws@^8.13.0, ws@^8.2.3, ws@^8.4.2, ws@^8.8.0: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== @@ -12699,7 +12738,7 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zone.js@~0.11.4, "zone.js@~0.11.4 || ~0.12.0", zone.js@~0.11.5: +"zone.js@~0.11.4 || ~0.12.0", zone.js@~0.11.5: version "0.11.8" resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" integrity sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA== From 4c10721e3ad2cdcfe821b2c40d9b84b09d58d597 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 11 Apr 2023 16:43:04 +0200 Subject: [PATCH 476/833] 101108: Automatic ng update @angular/cli@14 --- angular.json | 5 +- package.json | 26 +-- tsconfig.json | 2 +- yarn.lock | 506 ++++++++++++++++++++++++++++---------------------- 4 files changed, 301 insertions(+), 238 deletions(-) diff --git a/angular.json b/angular.json index b32670ad77..d5227c4f10 100644 --- a/angular.json +++ b/angular.json @@ -273,9 +273,10 @@ } } }, - "defaultProject": "dspace-angular", "cli": { "analytics": false, - "defaultCollection": "@angular-eslint/schematics" + "schematicCollections": [ + "@angular-eslint/schematics" + ] } } diff --git a/package.json b/package.json index a0c63ebe5c..bc54a4057f 100644 --- a/package.json +++ b/package.json @@ -55,17 +55,17 @@ "ts-node": "10.2.1" }, "dependencies": { - "@angular/animations": "~14.3.0", + "@angular/animations": "^14.3.0", "@angular/cdk": "^13.2.6", - "@angular/common": "~14.3.0", - "@angular/compiler": "~14.3.0", - "@angular/core": "~14.3.0", - "@angular/forms": "~14.3.0", + "@angular/common": "^14.3.0", + "@angular/compiler": "^14.3.0", + "@angular/core": "^14.3.0", + "@angular/forms": "^14.3.0", "@angular/localize": "14.3.0", - "@angular/platform-browser": "~14.3.0", - "@angular/platform-browser-dynamic": "~14.3.0", - "@angular/platform-server": "~14.3.0", - "@angular/router": "~14.3.0", + "@angular/platform-browser": "^14.3.0", + "@angular/platform-browser-dynamic": "^14.3.0", + "@angular/platform-server": "^14.3.0", + "@angular/router": "^14.3.0", "@babel/runtime": "7.17.2", "@kolkov/ngx-gallery": "^2.0.1", "@material-ui/core": "^4.11.0", @@ -135,15 +135,15 @@ }, "devDependencies": { "@angular-builders/custom-webpack": "~13.1.0", - "@angular-devkit/build-angular": "~14.2.11", + "@angular-devkit/build-angular": "^14.2.11", "@angular-eslint/builder": "13.1.0", "@angular-eslint/eslint-plugin": "13.1.0", "@angular-eslint/eslint-plugin-template": "13.1.0", "@angular-eslint/schematics": "13.1.0", "@angular-eslint/template-parser": "13.1.0", - "@angular/cli": "~13.3.10", - "@angular/compiler-cli": "~14.3.0", - "@angular/language-service": "~14.3.0", + "@angular/cli": "^14.2.11", + "@angular/compiler-cli": "^14.3.0", + "@angular/language-service": "^14.3.0", "@cypress/schematic": "^1.5.0", "@fortawesome/fontawesome-free": "^6.2.1", "@ngrx/store-devtools": "^13.0.2", diff --git a/tsconfig.json b/tsconfig.json index 7d2e9a69af..46aa25d4a9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,7 +21,7 @@ "skipDefaultLibCheck": true, "pretty": true, "allowSyntheticDefaultImports": true, - "target": "es2015", + "target": "es2020", "typeRoots": [ "node_modules/@types", "src/typings.d.ts" diff --git a/yarn.lock b/yarn.lock index 9d08f5bc3a..84429ae63f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -140,7 +140,7 @@ optionalDependencies: esbuild "0.14.22" -"@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@~14.2.11": +"@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@^14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.11.tgz" integrity sha512-O3X7GXcCBCGceVSHT+GIJ2JrRCg2YcO7HtNavpmPrraNr1o+aCdTkmT5WTS2cqWkZBm/z0wqKR8PsX/ZoD2r1A== @@ -270,14 +270,14 @@ ora "5.4.1" rxjs "6.6.7" -"@angular-devkit/schematics@13.3.11": - version "13.3.11" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz" - integrity sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg== +"@angular-devkit/schematics@14.2.11": + version "14.2.11" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.11.tgz" + integrity sha512-OTEOu4uf3kZDcSGYkuESxf/IOlJSn/GdLt63Sd1QwJu6pJSeFxkANw/WEWICZyJfRLNW6fdLJLEGPM9Zt5ZqAg== dependencies: - "@angular-devkit/core" "13.3.11" - jsonc-parser "3.0.0" - magic-string "0.25.7" + "@angular-devkit/core" "14.2.11" + jsonc-parser "3.1.0" + magic-string "0.26.2" ora "5.4.1" rxjs "6.6.7" @@ -338,7 +338,7 @@ "@angular-eslint/bundled-angular-compiler" "13.1.0" "@typescript-eslint/experimental-utils" "5.11.0" -"@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@~14.3.0", "@angular/animations@14.3.0": +"@angular/animations@^14.3.0", "@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz" integrity sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg== @@ -354,32 +354,33 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@>= 13.0.0 < 14.0.0", "@angular/cli@>=12", "@angular/cli@~13.3.10": - version "13.3.11" - resolved "https://registry.npmjs.org/@angular/cli/-/cli-13.3.11.tgz" - integrity sha512-LTuQ1wC/VJiHqHx8nYJCx0EJv1Ek7R6VvP/5vmr/+M8oVvJ2zSh/aIbcPg6BTL0YEfMI6nX41mUjPBUfF0q2OA== +"@angular/cli@^14.2.11", "@angular/cli@>= 13.0.0 < 14.0.0", "@angular/cli@>=12": + version "14.2.11" + resolved "https://registry.npmjs.org/@angular/cli/-/cli-14.2.11.tgz" + integrity sha512-k4Epob8Xz+9oyC6Ty9SNntTa2wHAvzxfcCi7itefPMcwEU9pqBcAv4XYfyawb5d7n/S5RBNwdsDpjoh2DPtmow== dependencies: - "@angular-devkit/architect" "0.1303.11" - "@angular-devkit/core" "13.3.11" - "@angular-devkit/schematics" "13.3.11" - "@schematics/angular" "13.3.11" + "@angular-devkit/architect" "0.1402.11" + "@angular-devkit/core" "14.2.11" + "@angular-devkit/schematics" "14.2.11" + "@schematics/angular" "14.2.11" "@yarnpkg/lockfile" "1.1.0" - ansi-colors "4.1.1" - debug "4.3.3" - ini "2.0.0" - inquirer "8.2.0" - jsonc-parser "3.0.0" - npm-package-arg "8.1.5" - npm-pick-manifest "6.1.1" + ansi-colors "4.1.3" + debug "4.3.4" + ini "3.0.0" + inquirer "8.2.4" + jsonc-parser "3.1.0" + npm-package-arg "9.1.0" + npm-pick-manifest "7.0.1" open "8.4.0" ora "5.4.1" - pacote "12.0.3" - resolve "1.22.0" - semver "7.3.5" + pacote "13.6.2" + resolve "1.22.1" + semver "7.3.7" symbol-observable "4.0.0" uuid "8.3.2" + yargs "17.5.1" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^14.2.0", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@~14.3.0", "@angular/common@14.3.0", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^14.2.0", "@angular/common@^14.3.0", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@14.3.0", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz" integrity sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ== @@ -402,7 +403,7 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@~14.3.0", "@angular/compiler-cli@14.3.0": +"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^14.3.0", "@angular/compiler-cli@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz" integrity sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ== @@ -418,7 +419,7 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@~14.3.0", "@angular/compiler@14.3.0": +"@angular/compiler@^14.3.0", "@angular/compiler@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz" integrity sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw== @@ -432,21 +433,21 @@ dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^14.2.0", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@~14.3.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^14.2.0", "@angular/core@^14.3.0", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" integrity sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ== dependencies: tslib "^2.3.0" -"@angular/forms@^13.0.0", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@~14.3.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/forms@^13.0.0", "@angular/forms@^14.3.0", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz" integrity sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw== dependencies: tslib "^2.3.0" -"@angular/language-service@~14.3.0": +"@angular/language-service@^14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-14.3.0.tgz" integrity sha512-Sij3OQzj1UGs1O8H9PxVAY/o27+oqZwQRnib66rsWvtbIBTjHp4FV3dTs5iVcr62GGv4V4Mff/2I82NP10GPQg== @@ -469,21 +470,21 @@ glob "8.0.3" yargs "^17.2.1" -"@angular/platform-browser-dynamic@~14.3.0", "@angular/platform-browser-dynamic@14.3.0": +"@angular/platform-browser-dynamic@^14.3.0", "@angular/platform-browser-dynamic@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.3.0.tgz" integrity sha512-rneZiMrIiYRhrkQvdL40E2ErKRn4Zdo6EtjBM9pAmWeyoM8oMnOZb9gz5vhrkNWg06kVMVg0yKqluP5How7j3A== dependencies: tslib "^2.3.0" -"@angular/platform-browser@>=5.0.0 <14.0.0", "@angular/platform-browser@~14.3.0", "@angular/platform-browser@14.3.0", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/platform-browser@^14.3.0", "@angular/platform-browser@>=5.0.0 <14.0.0", "@angular/platform-browser@14.3.0", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.3.0.tgz" integrity sha512-w9Y3740UmTz44T0Egvc+4QV9sEbO61L+aRHbpkLTJdlEGzHByZvxJmJyBYmdqeyTPwc/Zpy7c02frlpfAlyB7A== dependencies: tslib "^2.3.0" -"@angular/platform-server@^13.3.4", "@angular/platform-server@~14.3.0": +"@angular/platform-server@^13.3.4", "@angular/platform-server@^14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-14.3.0.tgz" integrity sha512-JGeyS5T2bpG1wiRPFpVFU6L8OeYYe1cVDQRi1B1Wzd3hZklF0BCck0BHpYIifuhQGoUpsG7t3aDiqJW2Oj9Vaw== @@ -492,7 +493,7 @@ tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^13.0.0", "@angular/router@~14.3.0": +"@angular/router@^13.0.0", "@angular/router@^14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/router/-/router-14.3.0.tgz" integrity sha512-uip0V7w7k7xyxxpTPbr7EuMnYLj3FzJrwkLVJSEw3TMMGHt5VU5t4BBa9veGZOta2C205XFrTAHnp8mD+XYY1w== @@ -2245,21 +2246,22 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@npmcli/git@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz" - integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== +"@npmcli/git@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== dependencies: - "@npmcli/promise-spawn" "^1.3.2" - lru-cache "^6.0.0" + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" mkdirp "^1.0.4" - npm-pick-manifest "^6.1.1" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" which "^2.0.2" -"@npmcli/installed-package-contents@^1.0.6": +"@npmcli/installed-package-contents@^1.0.7": version "1.0.7" resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== @@ -2283,27 +2285,28 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/node-gyp@^1.0.2": - version "1.0.3" - resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz" - integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== -"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": - version "1.3.2" - resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz" - integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz" - integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== +"@npmcli/run-script@^4.1.0": + version "4.2.1" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^8.2.0" - read-package-json-fast "^2.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" "@nrwl/cli@*", "@nrwl/cli@15.9.2": version "15.9.2" @@ -2444,14 +2447,14 @@ "@angular-devkit/schematics" "12.2.18" jsonc-parser "3.0.0" -"@schematics/angular@13.3.11": - version "13.3.11" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz" - integrity sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A== +"@schematics/angular@14.2.11": + version "14.2.11" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.11.tgz" + integrity sha512-tejU2BOc25bQO34mZmTwmtAfOiFtDE/io/yHqYgUsTn804kyMQbz2QOOXN0epdzRYrkAHvH4KV8c2LDyO6iijA== dependencies: - "@angular-devkit/core" "13.3.11" - "@angular-devkit/schematics" "13.3.11" - jsonc-parser "3.0.0" + "@angular-devkit/core" "14.2.11" + "@angular-devkit/schematics" "14.2.11" + jsonc-parser "3.1.0" "@socket.io/component-emitter@~3.1.0": version "3.1.0" @@ -3077,7 +3080,7 @@ abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: +abbrev@^1.0.0, abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3148,7 +3151,7 @@ agent-base@^6.0.2, agent-base@6: dependencies: debug "4" -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: +agentkeepalive@^4.2.1: version "4.3.0" resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== @@ -3851,10 +3854,12 @@ buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" bytes@3.0.0: version "3.0.0" @@ -3871,7 +3876,7 @@ bytesish@^0.4.1: resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== -cacache@^15.0.5, cacache@^15.2.0, cacache@15.3.0: +cacache@^15.0.5, cacache@15.3.0: version "15.3.0" resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -3895,6 +3900,30 @@ cacache@^15.0.5, cacache@^15.2.0, cacache@15.3.0: tar "^6.0.2" unique-filename "^1.1.1" +cacache@^16.0.0: + version "16.1.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + cacache@^16.1.0: version "16.1.3" resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" @@ -4843,7 +4872,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4, debug@4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4864,13 +4893,6 @@ debug@4.3.2: dependencies: ms "2.1.2" -debug@4.3.3: - version "4.3.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - decimal.js@^10.2.1, decimal.js@^10.3.1: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" @@ -5241,7 +5263,7 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.0, encoding@^0.1.12, encoding@^0.1.13: +encoding@^0.1.0, encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -6569,12 +6591,12 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== +hosted-git-info@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz" + integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== dependencies: - lru-cache "^6.0.0" + lru-cache "^7.5.1" hpack.js@^2.1.6: version "2.1.6" @@ -6847,12 +6869,12 @@ ignore-by-default@^1.0.1: resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore-walk@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz" - integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== dependencies: - minimatch "^3.0.4" + minimatch "^5.0.1" ignore@^5.0.4, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: version "5.2.4" @@ -6938,6 +6960,11 @@ ini@2.0.0: resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== +ini@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz" + integrity sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw== + inquirer@8.2.0: version "8.2.0" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz" @@ -7086,7 +7113,7 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.8.1: +is-core-module@^2.11.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.12.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz" integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== @@ -8094,7 +8121,7 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1, lru-cache@^7.7.1: +lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== @@ -8113,6 +8140,13 @@ magic-string@0.25.7: dependencies: sourcemap-codec "^1.4.4" +magic-string@0.26.2: + version "0.26.2" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz" + integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== + dependencies: + sourcemap-codec "^1.4.8" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" @@ -8133,7 +8167,7 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.1: +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: version "10.2.1" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== @@ -8155,28 +8189,6 @@ make-fetch-happen@^10.0.1: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - manifesto.js@^4.2.0: version "4.2.17" resolved "https://registry.npmjs.org/manifesto.js/-/manifesto.js-4.2.17.tgz" @@ -8374,17 +8386,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - minipass-fetch@^2.0.3: version "2.1.2" resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" @@ -8425,7 +8426,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== @@ -8437,7 +8438,7 @@ minipass@^4.0.0: resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.7.tgz" integrity sha512-ScVIgqHcXRMyfflqHmEW0bm8z8rb5McHyOY3ewX9JBgZaR77G7nxq9L/mtV96/QbAAwtbCAHVVLzD1kkyfFQEw== -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -8618,7 +8619,7 @@ needle@^3.1.0: iconv-lite "^0.6.3" sax "^1.2.4" -negotiator@^0.6.2, negotiator@^0.6.3, negotiator@0.6.3: +negotiator@^0.6.3, negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -8709,16 +8710,16 @@ node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -node-gyp@^8.2.0: - version "8.4.1" - resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== +node-gyp@^9.0.0: + version "9.3.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== dependencies: env-paths "^2.2.0" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" semver "^7.3.5" @@ -8746,12 +8747,12 @@ nodemon@^2.0.20: touch "^3.1.0" undefsafe "^2.0.5" -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: - abbrev "1" + abbrev "^1.0.0" nopt@~1.0.10: version "1.0.10" @@ -8760,6 +8761,16 @@ nopt@~1.0.10: dependencies: abbrev "1" +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -8787,10 +8798,17 @@ npm-bundled@^1.1.1: dependencies: npm-normalize-package-bin "^1.0.1" -npm-install-checks@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz" - integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== dependencies: semver "^7.1.1" @@ -8799,46 +8817,53 @@ npm-normalize-package-bin@^1.0.1: resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5, npm-package-arg@8.1.5: - version "8.1.5" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== -npm-packlist@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz" - integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz" + integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== dependencies: - glob "^7.1.6" - ignore-walk "^4.0.1" - npm-bundled "^1.1.1" + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^5.1.0: + version "5.1.3" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" + +npm-pick-manifest@^7.0.0, npm-pick-manifest@7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz" + integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== + dependencies: + npm-install-checks "^5.0.0" npm-normalize-package-bin "^1.0.1" + npm-package-arg "^9.0.0" + semver "^7.3.5" -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1, npm-pick-manifest@6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz" - integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== +npm-registry-fetch@^13.0.1: + version "13.3.1" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== dependencies: - npm-install-checks "^4.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^8.1.2" - semver "^7.3.4" - -npm-registry-fetch@^12.0.0: - version "12.0.2" - resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz" - integrity sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA== - dependencies: - make-fetch-happen "^10.0.1" + make-fetch-happen "^10.0.6" minipass "^3.1.6" - minipass-fetch "^1.4.1" + minipass-fetch "^2.0.3" minipass-json-stream "^1.0.1" minizlib "^2.1.2" - npm-package-arg "^8.1.5" + npm-package-arg "^9.0.1" + proc-log "^2.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" @@ -9145,30 +9170,32 @@ p-try@^2.0.0: resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@12.0.3: - version "12.0.3" - resolved "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz" - integrity sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow== +pacote@13.6.2: + version "13.6.2" + resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^2.0.0" - cacache "^15.0.5" + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" chownr "^2.0.0" fs-minipass "^2.1.0" infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^3.0.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^12.0.0" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" + ssri "^9.0.0" + tar "^6.1.11" pako@^1.0.3: version "1.0.11" @@ -9886,6 +9913,11 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" @@ -10248,7 +10280,7 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-package-json-fast@^2.0.1: +read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -10256,6 +10288,16 @@ read-package-json-fast@^2.0.1: json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" +read-package-json@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^2.0.0" + readable-stream@^2.0.1: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" @@ -10452,12 +10494,12 @@ resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@1.22.0: - version "1.22.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@1.22.1: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -11100,15 +11142,6 @@ sockjs@^0.3.21, sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - socks-proxy-agent@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" @@ -11210,12 +11243,20 @@ sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + spdx-exceptions@^2.1.0: version "2.3.0" resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== -spdx-expression-parse@^3.0.1: +spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== @@ -11280,7 +11321,7 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0, ssri@^8.0.1: +ssri@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -11539,7 +11580,7 @@ tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.1.13" resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== @@ -12082,12 +12123,20 @@ valid-data-url@^3.0.0: resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" integrity sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA== -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== +validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - builtins "^1.0.3" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" vary@^1, vary@~1.1.2: version "1.1.2" @@ -12671,7 +12720,7 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1, yargs-parser@21.1.1: +yargs-parser@^21.0.0, yargs-parser@^21.1.1, yargs-parser@21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== @@ -12720,6 +12769,19 @@ yargs@17.1.1: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@17.5.1: + version "17.5.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" From 59681ea54d8b4a0d89df2b85da988555e2f56899 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 11 Apr 2023 17:05:23 +0200 Subject: [PATCH 477/833] 101108: Automatic ng update @angular-devkit/build-angular@14 --- package.json | 2 +- yarn.lock | 1140 ++++++-------------------------------------------- 2 files changed, 139 insertions(+), 1003 deletions(-) diff --git a/package.json b/package.json index bc54a4057f..3f3eff4dfc 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "zone.js": "~0.11.5" }, "devDependencies": { - "@angular-builders/custom-webpack": "~13.1.0", + "@angular-builders/custom-webpack": "~14.1.0", "@angular-devkit/build-angular": "^14.2.11", "@angular-eslint/builder": "13.1.0", "@angular-eslint/eslint-plugin": "13.1.0", diff --git a/yarn.lock b/yarn.lock index 84429ae63f..dce0951924 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,14 +7,6 @@ resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz" integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== -"@ampproject/remapping@^2.0.0", "@ampproject/remapping@2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@ampproject/remapping@^2.1.0": version "2.2.1" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" @@ -23,14 +15,22 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@angular-builders/custom-webpack@~13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-13.1.0.tgz" - integrity sha512-qhtnAv1i7agk14zeKZZfXjrckYt37OZ+3tsTBLhf3ZFbwREK8L1SNi8xhZ1j1JLGsf2Dp0GEcZrSYeFDweo0WA== +"@ampproject/remapping@2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: - "@angular-devkit/architect" ">=0.1300.0 < 0.1400.0" - "@angular-devkit/build-angular" "^13.0.0" - "@angular-devkit/core" "^13.0.0" + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@angular-builders/custom-webpack@~14.1.0": + version "14.1.0" + resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-14.1.0.tgz" + integrity sha512-FLGDrBOg04cYvzCudeb15LWY2v91dtJ5+AfmP0aS/0T0D0AYmY4uM3FxZeh4jJcWETLvnHVFBCjan6y2Ct9J3A== + dependencies: + "@angular-devkit/architect" ">=0.1400.0 < 0.1500.0" + "@angular-devkit/build-angular" "^14.0.0" + "@angular-devkit/core" "^14.0.0" lodash "^4.17.15" ts-node "^10.0.0" tsconfig-paths "^3.9.0" @@ -44,7 +44,7 @@ "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/architect@^0.1402.0": +"@angular-devkit/architect@^0.1402.0", "@angular-devkit/architect@>=0.1400.0 < 0.1500.0", "@angular-devkit/architect@0.1402.11": version "0.1402.11" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== @@ -52,95 +52,7 @@ "@angular-devkit/core" "14.2.11" rxjs "6.6.7" -"@angular-devkit/architect@>=0.1300.0 < 0.1400.0", "@angular-devkit/architect@0.1303.11": - version "0.1303.11" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.11.tgz" - integrity sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg== - dependencies: - "@angular-devkit/core" "13.3.11" - rxjs "6.6.7" - -"@angular-devkit/architect@0.1402.11": - version "0.1402.11" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" - integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== - dependencies: - "@angular-devkit/core" "14.2.11" - rxjs "6.6.7" - -"@angular-devkit/build-angular@^13.0.0": - version "13.3.11" - resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.11.tgz" - integrity sha512-H4tpdmRu+6HSjsL+swV/8qj8v0YSDq6lpb31EYajlBB6fDj+YJQvHgaWvexSWl6eIqgDKXcujhNUjNi1enjwHw== - dependencies: - "@ampproject/remapping" "2.2.0" - "@angular-devkit/architect" "0.1303.11" - "@angular-devkit/build-webpack" "0.1303.11" - "@angular-devkit/core" "13.3.11" - "@babel/core" "7.16.12" - "@babel/generator" "7.16.8" - "@babel/helper-annotate-as-pure" "7.16.7" - "@babel/plugin-proposal-async-generator-functions" "7.16.8" - "@babel/plugin-transform-async-to-generator" "7.16.8" - "@babel/plugin-transform-runtime" "7.16.10" - "@babel/preset-env" "7.16.11" - "@babel/runtime" "7.16.7" - "@babel/template" "7.16.7" - "@discoveryjs/json-ext" "0.5.6" - "@ngtools/webpack" "13.3.11" - ansi-colors "4.1.1" - babel-loader "8.2.5" - babel-plugin-istanbul "6.1.1" - browserslist "^4.9.1" - cacache "15.3.0" - circular-dependency-plugin "5.2.2" - copy-webpack-plugin "10.2.1" - core-js "3.20.3" - critters "0.0.16" - css-loader "6.5.1" - esbuild-wasm "0.14.22" - glob "7.2.0" - https-proxy-agent "5.0.0" - inquirer "8.2.0" - jsonc-parser "3.0.0" - karma-source-map-support "1.4.0" - less "4.1.2" - less-loader "10.2.0" - license-webpack-plugin "4.0.2" - loader-utils "3.2.1" - mini-css-extract-plugin "2.5.3" - minimatch "3.0.5" - open "8.4.0" - ora "5.4.1" - parse5-html-rewriting-stream "6.0.1" - piscina "3.2.0" - postcss "8.4.5" - postcss-import "14.0.2" - postcss-loader "6.2.1" - postcss-preset-env "7.2.3" - regenerator-runtime "0.13.9" - resolve-url-loader "5.0.0" - rxjs "6.6.7" - sass "1.49.9" - sass-loader "12.4.0" - semver "7.3.5" - source-map-loader "3.0.1" - source-map-support "0.5.21" - stylus "0.56.0" - stylus-loader "6.2.0" - terser "5.14.2" - text-table "0.2.0" - tree-kill "1.2.2" - tslib "2.3.1" - webpack "5.76.1" - webpack-dev-middleware "5.3.0" - webpack-dev-server "4.7.3" - webpack-merge "5.8.0" - webpack-subresource-integrity "5.1.0" - optionalDependencies: - esbuild "0.14.22" - -"@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@^14.2.11": +"@angular-devkit/build-angular@^14.0.0", "@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@^14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.11.tgz" integrity sha512-O3X7GXcCBCGceVSHT+GIJ2JrRCg2YcO7HtNavpmPrraNr1o+aCdTkmT5WTS2cqWkZBm/z0wqKR8PsX/ZoD2r1A== @@ -210,14 +122,6 @@ optionalDependencies: esbuild "0.15.5" -"@angular-devkit/build-webpack@0.1303.11": - version "0.1303.11" - resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.11.tgz" - integrity sha512-599pWAQLq7i/fmEZLb7PaNU6nmPC3EZbJk1nU/UBcpx7FWs9e0o2XQE2PCAs0buqtQxVjSgY6kMO8ex5dUmgUQ== - dependencies: - "@angular-devkit/architect" "0.1303.11" - rxjs "6.6.7" - "@angular-devkit/build-webpack@0.1402.11": version "0.1402.11" resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.11.tgz" @@ -238,19 +142,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@^13.0.0", "@angular-devkit/core@13.3.11": - version "13.3.11" - resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz" - integrity sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w== - dependencies: - ajv "8.9.0" - ajv-formats "2.1.1" - fast-json-stable-stringify "2.1.0" - magic-string "0.25.7" - rxjs "6.6.7" - source-map "0.7.3" - -"@angular-devkit/core@^14.2.0", "@angular-devkit/core@14.2.11": +"@angular-devkit/core@^14.0.0", "@angular-devkit/core@^14.2.0", "@angular-devkit/core@14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz" integrity sha512-cBIGs6y9rykOQqnuAQOB1DgIRyBFYtvKRJb7QNUfIJ0qUfARKkuV/yikv3lrb95ePGkmoRzmjkFqcFZiYU+r7A== @@ -387,22 +279,6 @@ dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^13.0.0 || ^13.3.0-rc.0", "@angular/compiler-cli@13.4.0": - version "13.4.0" - resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.4.0.tgz" - integrity sha512-OQD0w9aZXbpcyWDEaozoHH/n3eYDLhBsmJcIBVqUN8Awx8m17v2u2R6m7DIEpVRbBzYtTscAMTKONNVwsTolHA== - dependencies: - "@babel/core" "^7.17.2" - chokidar "^3.0.0" - convert-source-map "^1.5.1" - dependency-graph "^0.11.0" - magic-string "^0.26.0" - reflect-metadata "^0.1.2" - semver "^7.0.0" - sourcemap-codec "^1.4.8" - tslib "^2.3.0" - yargs "^17.2.1" - "@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^14.3.0", "@angular/compiler-cli@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz" @@ -426,13 +302,6 @@ dependencies: tslib "^2.3.0" -"@angular/compiler@13.4.0": - version "13.4.0" - resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-13.4.0.tgz" - integrity sha512-tPWoq2RC/VIrJtynEnMRWQZemBIC/ypuVfuUf3p8IIXCZHjuGnibdlZTtFYkexc4/sR1ug9xk1cJWvbOPwilng== - dependencies: - tslib "^2.3.0" - "@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^14.2.0", "@angular/core@^14.3.0", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "14.3.0" resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" @@ -452,15 +321,6 @@ resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-14.3.0.tgz" integrity sha512-Sij3OQzj1UGs1O8H9PxVAY/o27+oqZwQRnib66rsWvtbIBTjHp4FV3dTs5iVcr62GGv4V4Mff/2I82NP10GPQg== -"@angular/localize@^13.0.0 || ^13.3.0-rc.0": - version "13.4.0" - resolved "https://registry.npmjs.org/@angular/localize/-/localize-13.4.0.tgz" - integrity sha512-du98xPMGNexwqc1Tbg1lR3tihUlW9IBn7OaTDVdzhFuIUkt30mLK4ri2LSpLZrwT5q3nLHi0e7O3ublY7ubGzQ== - dependencies: - "@babel/core" "7.17.2" - glob "7.2.0" - yargs "^17.2.1" - "@angular/localize@^13.0.0", "@angular/localize@^14.0.0", "@angular/localize@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/localize/-/localize-14.3.0.tgz" @@ -505,14 +365,14 @@ resolved "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz" integrity sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz" integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== @@ -538,48 +398,6 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/core@7.16.12": - version "7.16.12" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz" - integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.12" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.10" - "@babel/types" "^7.16.8" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/core@7.17.2": - version "7.17.2" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz" - integrity sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw== - dependencies: - "@ampproject/remapping" "^2.0.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - "@babel/core@7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz" @@ -601,25 +419,6 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.16.8", "@babel/generator@7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== - dependencies: - "@babel/types" "^7.16.8" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.17.0": - version "7.21.4" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== - dependencies: - "@babel/types" "^7.21.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/generator@^7.18.10", "@babel/generator@7.18.12": version "7.18.12" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz" @@ -646,13 +445,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-annotate-as-pure@7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": version "7.18.9" resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" @@ -661,7 +453,7 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7": version "7.21.4" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz" integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== @@ -694,7 +486,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.3.1" -"@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": +"@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== @@ -740,14 +532,14 @@ dependencies: "@babel/types" "^7.21.0" -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.18.6": version "7.21.4" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz" integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": version "7.21.2" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz" integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== @@ -773,7 +565,7 @@ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": +"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== @@ -826,7 +618,7 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== @@ -841,7 +633,7 @@ "@babel/traverse" "^7.20.5" "@babel/types" "^7.20.5" -"@babel/helpers@^7.16.7", "@babel/helpers@^7.17.2", "@babel/helpers@^7.18.9": +"@babel/helpers@^7.18.9": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz" integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== @@ -859,19 +651,19 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.17.0", "@babel/parser@^7.18.10", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": +"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz" integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== @@ -880,15 +672,6 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-async-generator-functions@^7.18.10", "@babel/plugin-proposal-async-generator-functions@7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz" @@ -899,7 +682,7 @@ "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -907,7 +690,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.16.7", "@babel/plugin-proposal-class-static-block@^7.18.6": +"@babel/plugin-proposal-class-static-block@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz" integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== @@ -916,7 +699,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.18.6": +"@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== @@ -924,7 +707,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7", "@babel/plugin-proposal-export-namespace-from@^7.18.9": +"@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== @@ -932,7 +715,7 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.18.6": +"@babel/plugin-proposal-json-strings@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== @@ -940,7 +723,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7", "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz" integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== @@ -948,7 +731,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -956,7 +739,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.18.6": +"@babel/plugin-proposal-numeric-separator@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== @@ -964,7 +747,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@^7.18.9": +"@babel/plugin-proposal-object-rest-spread@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== @@ -975,7 +758,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.20.7" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.18.6": +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== @@ -983,7 +766,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": +"@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -992,7 +775,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.11", "@babel/plugin-proposal-private-methods@^7.18.6": +"@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== @@ -1000,7 +783,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.16.7", "@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz" integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== @@ -1010,7 +793,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -1123,22 +906,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.18.6": +"@babel/plugin-transform-arrow-functions@^7.18.6": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz" integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" @@ -1148,21 +922,21 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.18.6": +"@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.16.7", "@babel/plugin-transform-block-scoping@^7.18.9": +"@babel/plugin-transform-block-scoping@^7.18.9": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.16.7", "@babel/plugin-transform-classes@^7.18.9": +"@babel/plugin-transform-classes@^7.18.9": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== @@ -1177,7 +951,7 @@ "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7", "@babel/plugin-transform-computed-properties@^7.18.9": +"@babel/plugin-transform-computed-properties@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz" integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== @@ -1185,14 +959,14 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.16.7", "@babel/plugin-transform-destructuring@^7.18.9": +"@babel/plugin-transform-destructuring@^7.18.9": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz" integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== @@ -1200,14 +974,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.16.7", "@babel/plugin-transform-duplicate-keys@^7.18.9": +"@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.18.6": +"@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== @@ -1215,14 +989,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.16.7", "@babel/plugin-transform-for-of@^7.18.8": +"@babel/plugin-transform-for-of@^7.18.8": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz" integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-function-name@^7.16.7", "@babel/plugin-transform-function-name@^7.18.9": +"@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== @@ -1231,21 +1005,21 @@ "@babel/helper-function-name" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.16.7", "@babel/plugin-transform-literals@^7.18.9": +"@babel/plugin-transform-literals@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.18.6": +"@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.18.6": +"@babel/plugin-transform-modules-amd@^7.18.6": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== @@ -1253,7 +1027,7 @@ "@babel/helper-module-transforms" "^7.20.11" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.18.6": +"@babel/plugin-transform-modules-commonjs@^7.18.6": version "7.21.2" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz" integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== @@ -1262,7 +1036,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-simple-access" "^7.20.2" -"@babel/plugin-transform-modules-systemjs@^7.16.7", "@babel/plugin-transform-modules-systemjs@^7.18.9": +"@babel/plugin-transform-modules-systemjs@^7.18.9": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== @@ -1272,7 +1046,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-validator-identifier" "^7.19.1" -"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.18.6": +"@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== @@ -1280,7 +1054,7 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8", "@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== @@ -1288,14 +1062,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.20.5" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.18.6": +"@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.18.6": +"@babel/plugin-transform-object-super@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== @@ -1303,21 +1077,21 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.7": +"@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.7": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz" integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.18.6": +"@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.18.6": +"@babel/plugin-transform-regenerator@^7.18.6": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz" integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== @@ -1325,25 +1099,13 @@ "@babel/helper-plugin-utils" "^7.20.2" regenerator-transform "^0.15.1" -"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.18.6": +"@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@7.16.10": - version "7.16.10" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz" - integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" - "@babel/plugin-transform-runtime@7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz" @@ -1356,14 +1118,14 @@ babel-plugin-polyfill-regenerator "^0.4.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.18.6": +"@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.18.9": +"@babel/plugin-transform-spread@^7.18.9": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== @@ -1371,35 +1133,35 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" -"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.18.6": +"@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.16.7", "@babel/plugin-transform-template-literals@^7.18.9": +"@babel/plugin-transform-template-literals@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.16.7", "@babel/plugin-transform-typeof-symbol@^7.18.9": +"@babel/plugin-transform-typeof-symbol@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-escapes@^7.16.7", "@babel/plugin-transform-unicode-escapes@^7.18.10": +"@babel/plugin-transform-unicode-escapes@^7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz" integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.18.6": +"@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== @@ -1407,86 +1169,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@7.16.11": - version "7.16.11" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" - "@babel/preset-env@7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz" @@ -1599,13 +1281,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" @@ -1613,15 +1288,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.7", "@babel/template@7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -1640,7 +1306,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.10.3", "@babel/traverse@^7.16.10", "@babel/traverse@^7.17.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": +"@babel/traverse@^7.10.3", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": version "7.21.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz" integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== @@ -1656,7 +1322,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.10.3", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": +"@babel/types@^7.10.3", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz" integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== @@ -1827,7 +1493,7 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.6": +"@discoveryjs/json-ext@^0.5.0": version "0.5.6" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz" integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== @@ -2142,7 +1808,7 @@ dependencies: tslib "^2.0.0" -"@ngtools/webpack@^13.2.6", "@ngtools/webpack@13.3.11": +"@ngtools/webpack@^13.2.6": version "13.3.11" resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.11.tgz" integrity sha512-gB33hTbc/RJmHyIgSUYj8ErPazhYYm7yfapOnvwHdYhCjrj1TKkR1ierOlhJtpfBYUQg6FChdl2YpyIQNPjWMA== @@ -2748,7 +2414,7 @@ resolved "https://registry.npmjs.org/@types/stacktrace-js/-/stacktrace-js-0.0.33.tgz" integrity sha512-aqJ6QM9QThNL4dHBhwl1f9B0oDqiREkYLn9RldghUKsGeFWWGlCsqsRWxbh+hDvvmptMFqc4aIfFIGz9BBu8Qg== -"@types/ws@^8.2.2", "@types/ws@^8.5.1": +"@types/ws@^8.5.1": version "8.5.4" resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== @@ -3215,9 +2881,9 @@ ajv@^8.0.0, ajv@8.6.2: uri-js "^4.2.2" ajv@^8.8.0, ajv@^8.8.2: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3234,16 +2900,6 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@8.9.0: - version "8.9.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz" - integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - angular-idle-preload@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/angular-idle-preload/-/angular-idle-preload-3.0.0.tgz" @@ -3261,11 +2917,6 @@ ansi-colors@^4.1.1, ansi-colors@4.1.3: resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" @@ -3288,11 +2939,6 @@ ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -3373,11 +3019,6 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" @@ -3404,11 +3045,6 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-union@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz" - integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== - array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" @@ -3458,13 +3094,6 @@ async@^2.6.0: dependencies: lodash "^4.17.14" -async@^2.6.4: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - async@^3.2.0, async@^3.2.3: version "3.2.4" resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" @@ -3480,12 +3109,7 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^10.4.13, autoprefixer@^10.4.2, autoprefixer@^10.4.8: +autoprefixer@^10.4.13, autoprefixer@^10.4.8: version "10.4.14" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== @@ -3567,7 +3191,7 @@ babel-plugin-istanbul@6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.2: +babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== @@ -3576,7 +3200,7 @@ babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.2: "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.3: +babel-plugin-polyfill-corejs3@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz" integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== @@ -3584,13 +3208,6 @@ babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.3: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - babel-plugin-polyfill-regenerator@^0.4.0: version "0.4.1" resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" @@ -3703,18 +3320,6 @@ bonjour-service@^1.0.11: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" - integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - boolbase@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" @@ -3811,7 +3416,7 @@ browser-sync@^2.26.7: ua-parser-js "^1.0.33" yargs "^17.3.1" -browserslist@^4.14.5, browserslist@^4.19.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1, "browserslist@>= 4.21.0": +browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1, "browserslist@>= 4.21.0": version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3841,11 +3446,6 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" @@ -3876,7 +3476,7 @@ bytesish@^0.4.1: resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== -cacache@^15.0.5, cacache@15.3.0: +cacache@^15.0.5: version "15.3.0" resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -3995,7 +3595,7 @@ camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001299, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: +caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: version "1.0.30001477" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz" integrity sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ== @@ -4146,11 +3746,6 @@ ci-info@^3.2.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== -circular-dependency-plugin@5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz" - integrity sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ== - circular-json@^0.5.0: version "0.5.9" resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz" @@ -4378,7 +3973,7 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -connect-history-api-fallback@^1, connect-history-api-fallback@^1.6.0: +connect-history-api-fallback@^1: version "1.6.0" resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== @@ -4489,18 +4084,6 @@ copy-webpack-plugin@^6.4.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" -copy-webpack-plugin@10.2.1: - version "10.2.1" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz" - integrity sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^12.0.2" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - copy-webpack-plugin@11.0.0: version "11.0.0" resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" @@ -4513,7 +4096,7 @@ copy-webpack-plugin@11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.20.2, core-js-compat@^3.21.0, core-js-compat@^3.22.1: +core-js-compat@^3.21.0, core-js-compat@^3.22.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== @@ -4530,11 +4113,6 @@ core-js@^3.7.0, core-js@^3.8.1: resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== -core-js@3.20.3: - version "3.20.3" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz" - integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag== - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" @@ -4602,7 +4180,7 @@ crypt@0.0.2: resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== -css-blank-pseudo@^3.0.2, css-blank-pseudo@^3.0.3: +css-blank-pseudo@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz" integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== @@ -4616,27 +4194,13 @@ css-box-model@^1.2.0: dependencies: tiny-invariant "^1.0.6" -css-has-pseudo@^3.0.3, css-has-pseudo@^3.0.4: +css-has-pseudo@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz" integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== dependencies: postcss-selector-parser "^6.0.9" -css-loader@6.5.1: - version "6.5.1" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz" - integrity sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ== - dependencies: - icss-utils "^5.1.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - semver "^7.3.5" - css-loader@6.7.1: version "6.7.1" resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz" @@ -4651,7 +4215,7 @@ css-loader@6.7.1: postcss-value-parser "^4.2.0" semver "^7.3.5" -css-prefers-color-scheme@^6.0.2, css-prefers-color-scheme@^6.0.3: +css-prefers-color-scheme@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== @@ -4680,20 +4244,6 @@ css-what@^6.0.1: resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -css@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/css/-/css-3.0.0.tgz" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - -cssdb@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz" - integrity sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw== - cssdb@^7.0.0: version "7.5.4" resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" @@ -4898,23 +4448,6 @@ decimal.js@^10.2.1, decimal.js@^10.3.1: resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - deep-freeze@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz" @@ -4957,20 +4490,6 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -del@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -5052,14 +4571,6 @@ dns-equal@^1.0.0: resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - dns-packet@^5.2.2: version "5.5.0" resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz" @@ -5067,13 +4578,6 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" - integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== - dependencies: - buffer-indexof "^1.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" @@ -5455,51 +4959,16 @@ es6-promisify@^6.0.0: resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz" integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== -esbuild-darwin-64@0.14.22: - version "0.14.22" - resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz" - integrity sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw== - esbuild-darwin-64@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz" integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== -esbuild-wasm@0.14.22: - version "0.14.22" - resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz" - integrity sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw== - esbuild-wasm@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz" integrity sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A== -esbuild@0.14.22: - version "0.14.22" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz" - integrity sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA== - optionalDependencies: - esbuild-android-arm64 "0.14.22" - esbuild-darwin-64 "0.14.22" - esbuild-darwin-arm64 "0.14.22" - esbuild-freebsd-64 "0.14.22" - esbuild-freebsd-arm64 "0.14.22" - esbuild-linux-32 "0.14.22" - esbuild-linux-64 "0.14.22" - esbuild-linux-arm "0.14.22" - esbuild-linux-arm64 "0.14.22" - esbuild-linux-mips64le "0.14.22" - esbuild-linux-ppc64le "0.14.22" - esbuild-linux-riscv64 "0.14.22" - esbuild-linux-s390x "0.14.22" - esbuild-netbsd-64 "0.14.22" - esbuild-openbsd-64 "0.14.22" - esbuild-sunos-64 "0.14.22" - esbuild-windows-32 "0.14.22" - esbuild-windows-64 "0.14.22" - esbuild-windows-arm64 "0.14.22" - esbuild@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz" @@ -5915,7 +5384,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -6363,7 +5832,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0, glob@7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -6460,18 +5929,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^12.0.2: - version "12.2.0" - resolved "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz" - integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== - dependencies: - array-union "^3.0.1" - dir-glob "^3.0.1" - fast-glob "^3.2.7" - ignore "^5.1.9" - merge2 "^1.4.1" - slash "^4.0.0" - globby@^13.1.1: version "13.1.4" resolved "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz" @@ -6782,14 +6239,6 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1, https-proxy-agent@5.0.1: agent-base "6" debug "4" -https-proxy-agent@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" @@ -6833,13 +6282,6 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -6876,7 +6318,7 @@ ignore-walk@^5.0.1: dependencies: minimatch "^5.0.1" -ignore@^5.0.4, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: +ignore@^5.0.4, ignore@^5.1.8, ignore@^5.2.0: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -6965,26 +6407,6 @@ ini@3.0.0: resolved "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz" integrity sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw== -inquirer@8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz" - integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.2.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - inquirer@8.2.4: version "8.2.4" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" @@ -7032,11 +6454,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip@^1.1.0: - version "1.1.8" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - ip@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" @@ -7052,14 +6469,6 @@ ipaddr.js@1.9.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" @@ -7196,11 +6605,6 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" @@ -7228,7 +6632,7 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.0.4, is-regex@^1.1.4: +is-regex@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -7889,13 +7293,6 @@ lazy-ass@^1.6.0: resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== -less-loader@10.2.0: - version "10.2.0" - resolved "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz" - integrity sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg== - dependencies: - klona "^2.0.4" - less-loader@11.0.0: version "11.0.0" resolved "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz" @@ -7920,23 +7317,6 @@ less-loader@11.0.0: needle "^3.1.0" source-map "~0.6.0" -less@4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/less/-/less-4.1.2.tgz" - integrity sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA== - dependencies: - copy-anything "^2.0.1" - parse-node-version "^1.0.1" - tslib "^2.3.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - needle "^2.5.2" - source-map "~0.6.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -8247,7 +7627,7 @@ media-typer@0.3.0: resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.2.2, memfs@^3.4.3: +memfs@^3.4.3: version "3.5.0" resolved "https://registry.npmjs.org/memfs/-/memfs-3.5.0.tgz" integrity sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA== @@ -8334,13 +7714,6 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@2.5.3: - version "2.5.3" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz" - integrity sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw== - dependencies: - schema-utils "^4.0.0" - mini-css-extract-plugin@2.6.1: version "2.6.1" resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz" @@ -8522,13 +7895,6 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mkdirp@^0.5.6: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" @@ -8565,19 +7931,6 @@ ms@2.1.3: resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" - integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -8591,7 +7944,7 @@ mute-stream@0.0.8: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@^3.1.30, nanoid@^3.3.4: +nanoid@^3.3.4: version "3.3.6" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -8601,15 +7954,6 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -needle@^2.5.2: - version "2.9.1" - resolved "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz" - integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - needle@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz" @@ -8962,14 +8306,6 @@ object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" @@ -9386,15 +8722,6 @@ popper.js@1.16.1-lts: resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== -portfinder@^1.0.28: - version "1.0.32" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - portscanner@2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz" @@ -9411,7 +8738,7 @@ postcss-apply@0.12.0: balanced-match "^1.0.0" postcss "^7.0.14" -postcss-attribute-case-insensitive@^5.0.0, postcss-attribute-case-insensitive@^5.0.2: +postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz" integrity sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ== @@ -9425,56 +8752,56 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^4.2.1, postcss-color-functional-notation@^4.2.4: +postcss-color-functional-notation@^4.2.4: version "4.2.4" resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz" integrity sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg== dependencies: postcss-value-parser "^4.2.0" -postcss-color-hex-alpha@^8.0.2, postcss-color-hex-alpha@^8.0.4: +postcss-color-hex-alpha@^8.0.4: version "8.0.4" resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz" integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== dependencies: postcss-value-parser "^4.2.0" -postcss-color-rebeccapurple@^7.0.2, postcss-color-rebeccapurple@^7.1.1: +postcss-color-rebeccapurple@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz" integrity sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg== dependencies: postcss-value-parser "^4.2.0" -postcss-custom-media@^8.0.0, postcss-custom-media@^8.0.2: +postcss-custom-media@^8.0.2: version "8.0.2" resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz" integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== dependencies: postcss-value-parser "^4.2.0" -postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.2, postcss-custom-properties@^12.1.8: +postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.8: version "12.1.11" resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz" integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== dependencies: postcss-value-parser "^4.2.0" -postcss-custom-selectors@^6.0.0, postcss-custom-selectors@^6.0.3: +postcss-custom-selectors@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz" integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== dependencies: postcss-selector-parser "^6.0.4" -postcss-dir-pseudo-class@^6.0.3, postcss-dir-pseudo-class@^6.0.5: +postcss-dir-pseudo-class@^6.0.5: version "6.0.5" resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz" integrity sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA== dependencies: postcss-selector-parser "^6.0.10" -postcss-double-position-gradients@^3.0.4, postcss-double-position-gradients@^3.1.2: +postcss-double-position-gradients@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz" integrity sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ== @@ -9482,21 +8809,21 @@ postcss-double-position-gradients@^3.0.4, postcss-double-position-gradients@^3.1 "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-env-function@^4.0.4, postcss-env-function@^4.0.6: +postcss-env-function@^4.0.6: version "4.0.6" resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz" integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== dependencies: postcss-value-parser "^4.2.0" -postcss-focus-visible@^6.0.3, postcss-focus-visible@^6.0.4: +postcss-focus-visible@^6.0.4: version "6.0.4" resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz" integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== dependencies: postcss-selector-parser "^6.0.9" -postcss-focus-within@^5.0.3, postcss-focus-within@^5.0.4: +postcss-focus-within@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz" integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== @@ -9508,12 +8835,12 @@ postcss-font-variant@^5.0.0: resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== -postcss-gap-properties@^3.0.2, postcss-gap-properties@^3.0.5: +postcss-gap-properties@^3.0.5: version "3.0.5" resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz" integrity sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg== -postcss-image-set-function@^4.0.4, postcss-image-set-function@^4.0.7: +postcss-image-set-function@^4.0.7: version "4.0.7" resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz" integrity sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw== @@ -9529,15 +8856,6 @@ postcss-import@^14.0.0: read-cache "^1.0.0" resolve "^1.1.7" -postcss-import@14.0.2: - version "14.0.2" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz" - integrity sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - postcss-import@15.0.0: version "15.0.0" resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz" @@ -9552,7 +8870,7 @@ postcss-initial@^4.0.1: resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-lab-function@^4.0.3, postcss-lab-function@^4.2.1: +postcss-lab-function@^4.2.1: version "4.2.1" resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz" integrity sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w== @@ -9571,15 +8889,6 @@ postcss-loader@^4.0.3: schema-utils "^3.0.0" semver "^7.3.4" -postcss-loader@6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - postcss-loader@7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz" @@ -9589,7 +8898,7 @@ postcss-loader@7.0.1: klona "^2.0.5" semver "^7.3.7" -postcss-logical@^5.0.3, postcss-logical@^5.0.4: +postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== @@ -9627,7 +8936,7 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^10.1.10, postcss-nesting@^10.1.2, postcss-nesting@^10.2.0: +postcss-nesting@^10.1.10, postcss-nesting@^10.2.0: version "10.2.0" resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz" integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== @@ -9640,7 +8949,7 @@ postcss-opacity-percentage@^1.1.2: resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz" integrity sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A== -postcss-overflow-shorthand@^3.0.2, postcss-overflow-shorthand@^3.0.4: +postcss-overflow-shorthand@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz" integrity sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A== @@ -9652,7 +8961,7 @@ postcss-page-break@^3.0.4: resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== -postcss-place@^7.0.3, postcss-place@^7.0.5: +postcss-place@^7.0.5: version "7.0.5" resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz" integrity sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g== @@ -9714,45 +9023,6 @@ postcss-preset-env@^7.4.2: postcss-selector-not "^6.0.1" postcss-value-parser "^4.2.0" -postcss-preset-env@7.2.3: - version "7.2.3" - resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz" - integrity sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA== - dependencies: - autoprefixer "^10.4.2" - browserslist "^4.19.1" - caniuse-lite "^1.0.30001299" - css-blank-pseudo "^3.0.2" - css-has-pseudo "^3.0.3" - css-prefers-color-scheme "^6.0.2" - cssdb "^5.0.0" - postcss-attribute-case-insensitive "^5.0.0" - postcss-color-functional-notation "^4.2.1" - postcss-color-hex-alpha "^8.0.2" - postcss-color-rebeccapurple "^7.0.2" - postcss-custom-media "^8.0.0" - postcss-custom-properties "^12.1.2" - postcss-custom-selectors "^6.0.0" - postcss-dir-pseudo-class "^6.0.3" - postcss-double-position-gradients "^3.0.4" - postcss-env-function "^4.0.4" - postcss-focus-visible "^6.0.3" - postcss-focus-within "^5.0.3" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.2" - postcss-image-set-function "^4.0.4" - postcss-initial "^4.0.1" - postcss-lab-function "^4.0.3" - postcss-logical "^5.0.3" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.1.2" - postcss-overflow-shorthand "^3.0.2" - postcss-page-break "^3.0.4" - postcss-place "^7.0.3" - postcss-pseudo-class-any-link "^7.0.2" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^5.0.0" - postcss-preset-env@7.8.0: version "7.8.0" resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz" @@ -9808,7 +9078,7 @@ postcss-preset-env@7.8.0: postcss-selector-not "^6.0.1" postcss-value-parser "^4.2.0" -postcss-pseudo-class-any-link@^7.0.2, postcss-pseudo-class-any-link@^7.1.6: +postcss-pseudo-class-any-link@^7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz" integrity sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w== @@ -9827,13 +9097,6 @@ postcss-responsive-type@1.0.0: dependencies: postcss "^6.0.6" -postcss-selector-not@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz" - integrity sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ== - dependencies: - balanced-match "^1.0.0" - postcss-selector-not@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz" @@ -9880,15 +9143,6 @@ postcss@^7.0.14: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.2.15, postcss@8.4.5: - version "8.4.5" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== - dependencies: - nanoid "^3.1.30" - picocolors "^1.0.0" - source-map-js "^1.0.1" - postcss@8.4.16: version "8.4.16" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" @@ -10397,7 +9651,7 @@ regex-parser@^2.2.11: resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: +regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -10607,7 +9861,7 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -rxjs@^6.0.0, "rxjs@^6.5.3 || ^7.4.0", rxjs@^7.0.0, rxjs@^7.2.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: +rxjs@^6.0.0, "rxjs@^6.5.3 || ^7.4.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: version "7.8.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== @@ -10621,7 +9875,14 @@ rxjs@^6.5.4: dependencies: tslib "^1.9.0" -rxjs@^6.5.5, rxjs@~6.6.0, rxjs@6.6.7: +rxjs@^6.5.5: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@~6.6.0, rxjs@6.6.7: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -10652,7 +9913,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -10677,14 +9938,6 @@ sass-loader@^12.6.0: klona "^2.0.4" neo-async "^2.6.2" -sass-loader@12.4.0: - version "12.4.0" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz" - integrity sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - sass-loader@13.0.2: version "13.0.2" resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz" @@ -10710,15 +9963,6 @@ sass@^1.3.0, sass@~1.33.0: dependencies: chokidar ">=3.0.0 <4.0.0" -sass@1.49.9: - version "1.49.9" - resolved "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz" - integrity sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - sass@1.54.4: version "1.54.4" resolved "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz" @@ -10806,7 +10050,7 @@ select-hose@^2.0.0: resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.0.0, selfsigned@^2.0.1, selfsigned@^2.1.1: +selfsigned@^2.0.1, selfsigned@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== @@ -10828,7 +10072,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.3.5: +semver@^7.0.0: version "7.4.0" resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== @@ -10856,7 +10100,7 @@ semver@^7.3.4: dependencies: lru-cache "^6.0.0" -semver@^7.3.7, semver@7.3.7: +semver@^7.3.5, semver@^7.3.7, semver@7.3.7: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -10882,13 +10126,6 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" -semver@7.3.5: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - send@0.16.2: version "0.16.2" resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz" @@ -11133,7 +10370,7 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.1" -sockjs@^0.3.21, sockjs@^0.3.24: +sockjs@^0.3.24: version "0.3.24" resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== @@ -11169,20 +10406,11 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.1, source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": +source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz" - integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.3" - source-map-js "^1.0.1" - source-map-loader@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz" @@ -11192,14 +10420,6 @@ source-map-loader@4.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" @@ -11208,11 +10428,6 @@ source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.2 buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" @@ -11449,13 +10664,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" @@ -11480,15 +10688,6 @@ strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" -stylus-loader@6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz" - integrity sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg== - dependencies: - fast-glob "^3.2.7" - klona "^2.0.4" - normalize-path "^3.0.0" - stylus-loader@7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz" @@ -11509,18 +10708,6 @@ stylus@>=0.52.4, stylus@0.59.0: sax "~1.2.4" source-map "^0.7.3" -stylus@0.56.0: - version "0.56.0" - resolved "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz" - integrity sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA== - dependencies: - css "^3.0.0" - debug "^4.3.2" - glob "^7.1.6" - safer-buffer "^2.1.2" - sax "~1.2.4" - source-map "^0.7.3" - supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -11939,11 +11126,6 @@ typescript@^2.5.0: resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== -"typescript@>=4.4.2 <4.7": - version "4.6.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== - ua-parser-js@^0.7.30: version "0.7.35" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" @@ -12276,17 +11458,6 @@ webpack-cli@^4.2.0, webpack-cli@4.x.x: rechoir "^0.7.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.0, webpack-dev-middleware@5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz" - integrity sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg== - dependencies: - colorette "^2.0.10" - memfs "^3.2.2" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - webpack-dev-middleware@^5.3.1, webpack-dev-middleware@5.3.3: version "5.3.3" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" @@ -12369,41 +11540,6 @@ webpack-dev-server@4.11.0: webpack-dev-middleware "^5.3.1" ws "^8.4.2" -webpack-dev-server@4.7.3: - version "4.7.3" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz" - integrity sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/serve-index" "^1.9.1" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.2.2" - ansi-html-community "^0.0.8" - bonjour "^3.5.0" - chokidar "^3.5.2" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - default-gateway "^6.0.3" - del "^6.0.0" - express "^4.17.1" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.0" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - portfinder "^1.0.28" - schema-utils "^4.0.0" - selfsigned "^2.0.0" - serve-index "^1.9.1" - sockjs "^0.3.21" - spdy "^4.0.2" - strip-ansi "^7.0.0" - webpack-dev-middleware "^5.3.0" - ws "^8.1.0" - webpack-merge@^5.7.3, webpack-merge@5.8.0: version "5.8.0" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" @@ -12432,7 +11568,7 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=2, webpack@>=4.0.1, "webpack@4.x.x || 5.x.x": +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=2, "webpack@4.x.x || 5.x.x": version "5.78.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== @@ -12655,7 +11791,7 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.1.0, ws@^8.13.0, ws@^8.2.3, ws@^8.4.2, ws@^8.8.0: +ws@^8.13.0, ws@^8.2.3, ws@^8.4.2, ws@^8.8.0: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== From 643e75a838913cdf4757e06c8090d1f1d8f8cb51 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 11 Apr 2023 17:50:50 +0200 Subject: [PATCH 478/833] 101108: Angular 14 upgrade - build fixes #1 --- src/app/core/cache/builders/link.service.ts | 6 +++--- src/app/core/cache/builders/remote-data-build.service.ts | 2 +- src/config/app-config.interface.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app/core/cache/builders/link.service.ts b/src/app/core/cache/builders/link.service.ts index b7af54abf7..afc7ab88e4 100644 --- a/src/app/core/cache/builders/link.service.ts +++ b/src/app/core/cache/builders/link.service.ts @@ -60,7 +60,7 @@ export class LinkService { const provider = this.getDataServiceFor(matchingLinkDef.resourceType); if (hasNoValue(provider)) { - throw new Error(`The @link() for ${linkToFollow.name} on ${model.constructor.name} models uses the resource type ${matchingLinkDef.resourceType.value.toUpperCase()}, but there is no service with an @dataService(${matchingLinkDef.resourceType.value.toUpperCase()}) annotation in order to retrieve it`); + throw new Error(`The @link() for ${String(linkToFollow.name)} on ${model.constructor.name} models uses the resource type ${matchingLinkDef.resourceType.value.toUpperCase()}, but there is no service with an @dataService(${matchingLinkDef.resourceType.value.toUpperCase()}) annotation in order to retrieve it`); } const service: HALDataService = Injector.create({ @@ -79,12 +79,12 @@ export class LinkService { return service.findByHref(href, linkToFollow.useCachedVersionIfAvailable, linkToFollow.reRequestOnStale, ...linkToFollow.linksToFollow); } } catch (e) { - console.error(`Something went wrong when using @dataService(${matchingLinkDef.resourceType.value}) ${hasValue(service) ? '' : '(undefined) '}to resolve link ${linkToFollow.name} at ${href}`); + console.error(`Something went wrong when using @dataService(${matchingLinkDef.resourceType.value}) ${hasValue(service) ? '' : '(undefined) '}to resolve link ${String(linkToFollow.name)} at ${href}`); throw e; } } } else if (!linkToFollow.isOptional) { - throw new Error(`followLink('${linkToFollow.name}') was used as a required link for a ${model.constructor.name}, but there is no property on ${model.constructor.name} models with an @link() for ${linkToFollow.name}`); + throw new Error(`followLink('${String(linkToFollow.name)}') was used as a required link for a ${model.constructor.name}, but there is no property on ${model.constructor.name} models with an @link() for ${String(linkToFollow.name)}`); } return EMPTY; diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/src/app/core/cache/builders/remote-data-build.service.ts index 76529891d4..1124ecfc7a 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/src/app/core/cache/builders/remote-data-build.service.ts @@ -72,7 +72,7 @@ export class RemoteDataBuildService { if (hasValue(obj)) { if (getResourceTypeValueFor((obj as any).type) === PAGINATED_LIST.value) { return this.buildPaginatedList(obj, ...linksToFollow); - } else if (isNotEmpty(linksToFollow)) { + } else if (isNotEmpty(linksToFollow) && obj instanceof HALResource) { return [this.linkService.resolveLinks(obj, ...linksToFollow)]; } } diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index e3f8988744..84a30549a7 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -56,7 +56,7 @@ interface AppConfig extends Config { */ const APP_CONFIG = new InjectionToken('APP_CONFIG'); -const APP_CONFIG_STATE = makeStateKey('APP_CONFIG_STATE'); +const APP_CONFIG_STATE = makeStateKey('APP_CONFIG_STATE'); export { AppConfig, From 2eb91add4d20adb09ba82c08d0158c07ba565fbd Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 11:34:26 +0200 Subject: [PATCH 479/833] 101108: Automatic ng update @angular/core@15 @angular/cli@15 --- .browserslistrc | 17 - package.json | 28 +- src/main.server.ts | 2 +- tsconfig.json | 5 +- yarn.lock | 1389 +++++++++++++++++++++++++++++++++----------- 5 files changed, 1070 insertions(+), 371 deletions(-) delete mode 100644 .browserslistrc diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 427441dc93..0000000000 --- a/.browserslistrc +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR -not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/package.json b/package.json index 3f3eff4dfc..1dafe10d95 100644 --- a/package.json +++ b/package.json @@ -55,17 +55,17 @@ "ts-node": "10.2.1" }, "dependencies": { - "@angular/animations": "^14.3.0", + "@angular/animations": "^15.2.6", "@angular/cdk": "^13.2.6", - "@angular/common": "^14.3.0", - "@angular/compiler": "^14.3.0", - "@angular/core": "^14.3.0", - "@angular/forms": "^14.3.0", - "@angular/localize": "14.3.0", - "@angular/platform-browser": "^14.3.0", - "@angular/platform-browser-dynamic": "^14.3.0", - "@angular/platform-server": "^14.3.0", - "@angular/router": "^14.3.0", + "@angular/common": "^15.2.6", + "@angular/compiler": "^15.2.6", + "@angular/core": "^15.2.6", + "@angular/forms": "^15.2.6", + "@angular/localize": "15.2.6", + "@angular/platform-browser": "^15.2.6", + "@angular/platform-browser-dynamic": "^15.2.6", + "@angular/platform-server": "^15.2.6", + "@angular/router": "^15.2.6", "@babel/runtime": "7.17.2", "@kolkov/ngx-gallery": "^2.0.1", "@material-ui/core": "^4.11.0", @@ -135,15 +135,15 @@ }, "devDependencies": { "@angular-builders/custom-webpack": "~14.1.0", - "@angular-devkit/build-angular": "^14.2.11", + "@angular-devkit/build-angular": "^15.2.5", "@angular-eslint/builder": "13.1.0", "@angular-eslint/eslint-plugin": "13.1.0", "@angular-eslint/eslint-plugin-template": "13.1.0", "@angular-eslint/schematics": "13.1.0", "@angular-eslint/template-parser": "13.1.0", - "@angular/cli": "^14.2.11", - "@angular/compiler-cli": "^14.3.0", - "@angular/language-service": "^14.3.0", + "@angular/cli": "^15.2.5", + "@angular/compiler-cli": "^15.2.6", + "@angular/language-service": "^15.2.6", "@cypress/schematic": "^1.5.0", "@fortawesome/fontawesome-free": "^6.2.1", "@ngrx/store-devtools": "^13.0.2", diff --git a/src/main.server.ts b/src/main.server.ts index 91425136f8..95747de6cc 100644 --- a/src/main.server.ts +++ b/src/main.server.ts @@ -17,4 +17,4 @@ if (environment.production) { export { ServerAppModule } from './modules/app/server-app.module'; export { ngExpressEngine } from '@nguniversal/express-engine'; -export { renderModule, renderModuleFactory } from '@angular/platform-server'; +export { renderModuleFactory } from '@angular/platform-server'; diff --git a/tsconfig.json b/tsconfig.json index 46aa25d4a9..11b5a03eaf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,7 +21,7 @@ "skipDefaultLibCheck": true, "pretty": true, "allowSyntheticDefaultImports": true, - "target": "es2020", + "target": "ES2022", "typeRoots": [ "node_modules/@types", "src/typings.d.ts" @@ -39,7 +39,8 @@ "types": [ "node", "jasmine" - ] + ], + "useDefineForClassFields": false }, "angularCompilerOptions": { "fullTemplateTypeCheck": true, diff --git a/yarn.lock b/yarn.lock index dce0951924..77f6c43e5f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,7 +52,15 @@ "@angular-devkit/core" "14.2.11" rxjs "6.6.7" -"@angular-devkit/build-angular@^14.0.0", "@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@^14.2.11": +"@angular-devkit/architect@0.1502.5": + version "0.1502.5" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" + integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== + dependencies: + "@angular-devkit/core" "15.2.5" + rxjs "6.6.7" + +"@angular-devkit/build-angular@^14.0.0": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.11.tgz" integrity sha512-O3X7GXcCBCGceVSHT+GIJ2JrRCg2YcO7HtNavpmPrraNr1o+aCdTkmT5WTS2cqWkZBm/z0wqKR8PsX/ZoD2r1A== @@ -122,6 +130,74 @@ optionalDependencies: esbuild "0.15.5" +"@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@^15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.5.tgz" + integrity sha512-D2LxjBtUlgJnPxybOIN0XsENEGkVkqCGBBii5oK84HvgBHXO/EyP1WXpOdb2lOYSUZyjhOOs0q42LCobJoaxUw== + dependencies: + "@ampproject/remapping" "2.2.0" + "@angular-devkit/architect" "0.1502.5" + "@angular-devkit/build-webpack" "0.1502.5" + "@angular-devkit/core" "15.2.5" + "@babel/core" "7.20.12" + "@babel/generator" "7.20.14" + "@babel/helper-annotate-as-pure" "7.18.6" + "@babel/helper-split-export-declaration" "7.18.6" + "@babel/plugin-proposal-async-generator-functions" "7.20.7" + "@babel/plugin-transform-async-to-generator" "7.20.7" + "@babel/plugin-transform-runtime" "7.19.6" + "@babel/preset-env" "7.20.2" + "@babel/runtime" "7.20.13" + "@babel/template" "7.20.7" + "@discoveryjs/json-ext" "0.5.7" + "@ngtools/webpack" "15.2.5" + ansi-colors "4.1.3" + autoprefixer "10.4.13" + babel-loader "9.1.2" + babel-plugin-istanbul "6.1.1" + browserslist "4.21.5" + cacache "17.0.4" + chokidar "3.5.3" + copy-webpack-plugin "11.0.0" + critters "0.0.16" + css-loader "6.7.3" + esbuild-wasm "0.17.8" + glob "8.1.0" + https-proxy-agent "5.0.1" + inquirer "8.2.4" + jsonc-parser "3.2.0" + karma-source-map-support "1.4.0" + less "4.1.3" + less-loader "11.1.0" + license-webpack-plugin "4.0.2" + loader-utils "3.2.1" + magic-string "0.29.0" + mini-css-extract-plugin "2.7.2" + open "8.4.1" + ora "5.4.1" + parse5-html-rewriting-stream "7.0.0" + piscina "3.2.0" + postcss "8.4.21" + postcss-loader "7.0.2" + resolve-url-loader "5.0.0" + rxjs "6.6.7" + sass "1.58.1" + sass-loader "13.2.0" + semver "7.3.8" + source-map-loader "4.0.1" + source-map-support "0.5.21" + terser "5.16.3" + text-table "0.2.0" + tree-kill "1.2.2" + tslib "2.5.0" + webpack "5.76.1" + webpack-dev-middleware "6.0.1" + webpack-dev-server "4.11.1" + webpack-merge "5.8.0" + webpack-subresource-integrity "5.1.0" + optionalDependencies: + esbuild "0.17.8" + "@angular-devkit/build-webpack@0.1402.11": version "0.1402.11" resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.11.tgz" @@ -130,6 +206,14 @@ "@angular-devkit/architect" "0.1402.11" rxjs "6.6.7" +"@angular-devkit/build-webpack@0.1502.5": + version "0.1502.5" + resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1502.5.tgz" + integrity sha512-gPkAa4AvQ7BxU+jmVJqrAO18kw/6iks+VUQ+2BVPyHCdqhroANHYdGbZ/pFlZdPmZVzSpusjd6VIbLhbHr/Ohw== + dependencies: + "@angular-devkit/architect" "0.1502.5" + rxjs "6.6.7" + "@angular-devkit/core@^12.2.17", "@angular-devkit/core@12.2.18": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" @@ -153,6 +237,17 @@ rxjs "6.6.7" source-map "0.7.4" +"@angular-devkit/core@15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.5.tgz" + integrity sha512-ZfjEkAe2yYeekc3xjZ/U4pK9nb+w6BFwAEjou6mE8PWZH7iYskm0YCCXkmu+B+zViEcCLhAkJAxu9MwX4efd8g== + dependencies: + ajv "8.12.0" + ajv-formats "2.1.1" + jsonc-parser "3.2.0" + rxjs "6.6.7" + source-map "0.7.4" + "@angular-devkit/schematics@^12.2.17", "@angular-devkit/schematics@12.2.18": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" @@ -162,14 +257,14 @@ ora "5.4.1" rxjs "6.6.7" -"@angular-devkit/schematics@14.2.11": - version "14.2.11" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.11.tgz" - integrity sha512-OTEOu4uf3kZDcSGYkuESxf/IOlJSn/GdLt63Sd1QwJu6pJSeFxkANw/WEWICZyJfRLNW6fdLJLEGPM9Zt5ZqAg== +"@angular-devkit/schematics@15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.2.5.tgz" + integrity sha512-zm7chQRQtPXQzzSAvK/mbZ+RJ3eP7hlU53yyJ/i6kjWAh3Y5uiSHNYGmqhhAHFuzw4Jhb4OC2S9iycxrqmI8TA== dependencies: - "@angular-devkit/core" "14.2.11" - jsonc-parser "3.1.0" - magic-string "0.26.2" + "@angular-devkit/core" "15.2.5" + jsonc-parser "3.2.0" + magic-string "0.29.0" ora "5.4.1" rxjs "6.6.7" @@ -230,10 +325,10 @@ "@angular-eslint/bundled-angular-compiler" "13.1.0" "@typescript-eslint/experimental-utils" "5.11.0" -"@angular/animations@^14.3.0", "@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz" - integrity sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg== +"@angular/animations@^15.2.6", "@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/animations/-/animations-15.2.6.tgz" + integrity sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ== dependencies: tslib "^2.3.0" @@ -246,82 +341,110 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@^14.2.11", "@angular/cli@>= 13.0.0 < 14.0.0", "@angular/cli@>=12": - version "14.2.11" - resolved "https://registry.npmjs.org/@angular/cli/-/cli-14.2.11.tgz" - integrity sha512-k4Epob8Xz+9oyC6Ty9SNntTa2wHAvzxfcCi7itefPMcwEU9pqBcAv4XYfyawb5d7n/S5RBNwdsDpjoh2DPtmow== +"@angular/cli@^15.2.5", "@angular/cli@>= 13.0.0 < 14.0.0", "@angular/cli@>=12": + version "15.2.5" + resolved "https://registry.npmjs.org/@angular/cli/-/cli-15.2.5.tgz" + integrity sha512-TmkkeJkdfDkC6b2SNQcLlr1rsl2anc5rrrY3gawOVXYXBExMxAi2SNJsHZzUXfiitW52aZkAyajF1VFazs8PRw== dependencies: - "@angular-devkit/architect" "0.1402.11" - "@angular-devkit/core" "14.2.11" - "@angular-devkit/schematics" "14.2.11" - "@schematics/angular" "14.2.11" + "@angular-devkit/architect" "0.1502.5" + "@angular-devkit/core" "15.2.5" + "@angular-devkit/schematics" "15.2.5" + "@schematics/angular" "15.2.5" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.3" - debug "4.3.4" - ini "3.0.0" + ini "3.0.1" inquirer "8.2.4" - jsonc-parser "3.1.0" - npm-package-arg "9.1.0" - npm-pick-manifest "7.0.1" - open "8.4.0" + jsonc-parser "3.2.0" + npm-package-arg "10.1.0" + npm-pick-manifest "8.0.1" + open "8.4.1" ora "5.4.1" - pacote "13.6.2" + pacote "15.1.0" resolve "1.22.1" - semver "7.3.7" + semver "7.3.8" symbol-observable "4.0.0" - uuid "8.3.2" - yargs "17.5.1" + yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^14.2.0", "@angular/common@^14.3.0", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@14.3.0", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" + integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== + dependencies: + tslib "^2.3.0" + +"@angular/common@^14.2.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz" integrity sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^14.3.0", "@angular/compiler-cli@14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz" - integrity sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ== +"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@14.3.0", "@angular/compiler-cli@15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" + integrity sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw== dependencies: - "@babel/core" "^7.17.2" + "@babel/core" "7.19.3" + "@jridgewell/sourcemap-codec" "^1.4.14" chokidar "^3.0.0" convert-source-map "^1.5.1" dependency-graph "^0.11.0" - magic-string "^0.26.0" + magic-string "^0.27.0" reflect-metadata "^0.1.2" semver "^7.0.0" - sourcemap-codec "^1.4.8" tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@^14.3.0", "@angular/compiler@14.3.0": +"@angular/compiler@^15.2.6", "@angular/compiler@15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.6.tgz" + integrity sha512-6oBAIY5KcC1UNsrnWGLcopZ9RD7c0HzpTCQY46N6HytHtUjBvzLbGWZu5MfahPtIjKz9FMVYBX9hugcbVpWnTA== + dependencies: + tslib "^2.3.0" + +"@angular/compiler@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz" integrity sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw== dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^14.2.0", "@angular/core@^14.3.0", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@14.3.0", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" + integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== + dependencies: + tslib "^2.3.0" + +"@angular/core@^14.2.0", "@angular/core@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" integrity sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ== dependencies: tslib "^2.3.0" -"@angular/forms@^13.0.0", "@angular/forms@^14.3.0", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz" - integrity sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw== +"@angular/forms@^13.0.0", "@angular/forms@^15.2.6", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/forms/-/forms-15.2.6.tgz" + integrity sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw== dependencies: tslib "^2.3.0" -"@angular/language-service@^14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-14.3.0.tgz" - integrity sha512-Sij3OQzj1UGs1O8H9PxVAY/o27+oqZwQRnib66rsWvtbIBTjHp4FV3dTs5iVcr62GGv4V4Mff/2I82NP10GPQg== +"@angular/language-service@^15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.6.tgz" + integrity sha512-q6u4XhFReJ3GtA7dC5rJaEBQPjJUjOz9PlwHSOxZxugFP99ddDNBBFd0caa446G54kQdZFG7j7w7BiAp2/srmQ== -"@angular/localize@^13.0.0", "@angular/localize@^14.0.0", "@angular/localize@14.3.0": +"@angular/localize@^13.0.0", "@angular/localize@^15.0.0", "@angular/localize@15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/localize/-/localize-15.2.6.tgz" + integrity sha512-2WJBYRJ6aulo0fS9BUGr4fsdyk+5WcbZoiFURgs0sNrJtYCd51I9rQNwl3OGyYReNmFx8GgLc4K7+rEKhKfSbA== + dependencies: + "@babel/core" "7.19.3" + glob "8.1.0" + yargs "^17.2.1" + +"@angular/localize@^14.0.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/localize/-/localize-14.3.0.tgz" integrity sha512-YmwlOEGnFonfDrIcWqlxXVFFjd0Q6yXeHGZCBFBfwbtjIseiJJ4UBmkTUgFeq7qlWevSFQzHdQnraFRGZpnMig== @@ -330,33 +453,33 @@ glob "8.0.3" yargs "^17.2.1" -"@angular/platform-browser-dynamic@^14.3.0", "@angular/platform-browser-dynamic@14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.3.0.tgz" - integrity sha512-rneZiMrIiYRhrkQvdL40E2ErKRn4Zdo6EtjBM9pAmWeyoM8oMnOZb9gz5vhrkNWg06kVMVg0yKqluP5How7j3A== +"@angular/platform-browser-dynamic@^15.2.6", "@angular/platform-browser-dynamic@15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.6.tgz" + integrity sha512-ZSyiigpxBWIM5f8t/a28Y3BCzHn1FtI2KsJysE7di5UUflOzwbxbfycVlpiZp0girbDYRyF18vvefvitNh17Gw== dependencies: tslib "^2.3.0" -"@angular/platform-browser@^14.3.0", "@angular/platform-browser@>=5.0.0 <14.0.0", "@angular/platform-browser@14.3.0", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.3.0.tgz" - integrity sha512-w9Y3740UmTz44T0Egvc+4QV9sEbO61L+aRHbpkLTJdlEGzHByZvxJmJyBYmdqeyTPwc/Zpy7c02frlpfAlyB7A== +"@angular/platform-browser@^15.2.6", "@angular/platform-browser@>=5.0.0 <14.0.0", "@angular/platform-browser@15.2.6", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.6.tgz" + integrity sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA== dependencies: tslib "^2.3.0" -"@angular/platform-server@^13.3.4", "@angular/platform-server@^14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-14.3.0.tgz" - integrity sha512-JGeyS5T2bpG1wiRPFpVFU6L8OeYYe1cVDQRi1B1Wzd3hZklF0BCck0BHpYIifuhQGoUpsG7t3aDiqJW2Oj9Vaw== +"@angular/platform-server@^13.3.4", "@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" + integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== dependencies: domino "^2.1.2" tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^13.0.0", "@angular/router@^14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/router/-/router-14.3.0.tgz" - integrity sha512-uip0V7w7k7xyxxpTPbr7EuMnYLj3FzJrwkLVJSEw3TMMGHt5VU5t4BBa9veGZOta2C205XFrTAHnp8mD+XYY1w== +"@angular/router@^13.0.0", "@angular/router@^15.2.6": + version "15.2.6" + resolved "https://registry.npmjs.org/@angular/router/-/router-15.2.6.tgz" + integrity sha512-yB9uc9Xi9N0dErsugleywBA1KYG+GQ9WWSlri34oe2VsCqZazImn71n4wKPtrm2Xiy/mI23wJcr+jiCAtzp49Q== dependencies: tslib "^2.3.0" @@ -372,12 +495,12 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.17.2", "@babel/core@^7.4.0-0", "@babel/core@7.18.9": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== @@ -419,6 +542,48 @@ json5 "^2.2.1" semver "^6.3.0" +"@babel/core@7.19.3": + version "7.19.3" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/core@7.20.12": + version "7.20.12" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz" + integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.12" + "@babel/types" "^7.20.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + "@babel/generator@^7.18.10", "@babel/generator@7.18.12": version "7.18.12" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz" @@ -428,7 +593,7 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/generator@^7.18.9", "@babel/generator@^7.21.4": +"@babel/generator@^7.18.9", "@babel/generator@^7.19.3", "@babel/generator@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== @@ -438,6 +603,15 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.20.7", "@babel/generator@7.20.14": + version "7.20.14" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" @@ -453,7 +627,7 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.3", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": version "7.21.4" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz" integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== @@ -539,7 +713,7 @@ dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9", "@babel/helper-module-transforms@^7.19.0", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": version "7.21.2" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz" integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== @@ -601,7 +775,7 @@ dependencies: "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@^7.18.6": +"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -633,7 +807,7 @@ "@babel/traverse" "^7.20.5" "@babel/types" "^7.20.5" -"@babel/helpers@^7.18.9": +"@babel/helpers@^7.18.9", "@babel/helpers@^7.19.0", "@babel/helpers@^7.20.7": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz" integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== @@ -651,7 +825,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.9", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": +"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.9", "@babel/parser@^7.19.3", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== @@ -682,6 +856,16 @@ "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" @@ -747,7 +931,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.9": +"@babel/plugin-proposal-object-rest-spread@^7.18.9", "@babel/plugin-proposal-object-rest-spread@^7.20.2": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== @@ -836,7 +1020,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.18.6": +"@babel/plugin-syntax-import-assertions@^7.18.6", "@babel/plugin-syntax-import-assertions@^7.20.0": version "7.20.0" resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== @@ -913,7 +1097,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.18.6": +"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-async-to-generator@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== @@ -929,14 +1122,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.18.9": +"@babel/plugin-transform-block-scoping@^7.18.9", "@babel/plugin-transform-block-scoping@^7.20.2": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.18.9": +"@babel/plugin-transform-classes@^7.18.9", "@babel/plugin-transform-classes@^7.20.2": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== @@ -959,7 +1152,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.18.9": +"@babel/plugin-transform-destructuring@^7.18.9", "@babel/plugin-transform-destructuring@^7.20.2": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz" integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== @@ -1019,7 +1212,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.6": +"@babel/plugin-transform-modules-amd@^7.18.6", "@babel/plugin-transform-modules-amd@^7.19.6": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== @@ -1027,7 +1220,7 @@ "@babel/helper-module-transforms" "^7.20.11" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.18.6": +"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.19.6": version "7.21.2" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz" integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== @@ -1036,7 +1229,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-simple-access" "^7.20.2" -"@babel/plugin-transform-modules-systemjs@^7.18.9": +"@babel/plugin-transform-modules-systemjs@^7.18.9", "@babel/plugin-transform-modules-systemjs@^7.19.6": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== @@ -1054,7 +1247,7 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== @@ -1077,7 +1270,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.7": +"@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz" integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== @@ -1118,6 +1311,18 @@ babel-plugin-polyfill-regenerator "^0.4.0" semver "^6.3.0" +"@babel/plugin-transform-runtime@7.19.6": + version "7.19.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" + integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + "@babel/plugin-transform-shorthand-properties@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" @@ -1125,7 +1330,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.18.9": +"@babel/plugin-transform-spread@^7.18.9", "@babel/plugin-transform-spread@^7.19.0": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== @@ -1250,6 +1455,87 @@ core-js-compat "^3.22.1" semver "^6.3.0" +"@babel/preset-env@7.20.2": + version "7.20.2" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz" + integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" @@ -1288,7 +1574,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": +"@babel/runtime@7.20.13": + version "7.20.13" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz" + integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7", "@babel/template@7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -1306,7 +1599,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.10.3", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": +"@babel/traverse@^7.10.3", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.3", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": version "7.21.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz" integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== @@ -1322,7 +1615,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.10.3", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": +"@babel/types@^7.10.3", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.3", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz" integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== @@ -1493,12 +1786,7 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@^0.5.0": - version "0.5.6" - resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz" - integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== - -"@discoveryjs/json-ext@0.5.7": +"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.7": version "0.5.7" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== @@ -1522,6 +1810,11 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" +"@esbuild/darwin-x64@0.17.8": + version "0.17.8" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz" + integrity sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -1639,7 +1932,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -1818,6 +2111,11 @@ resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.11.tgz" integrity sha512-4enbLFAp98uTgWYF6OFceQqLcfv2/0brIrNN4iWT9xe/Mh3zdCt+eH42zvNRsqo9WXNWRSLvnx8I924p83LNlw== +"@ngtools/webpack@15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" + integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== + "@nguniversal/builders@^14.2.3": version "14.2.3" resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-14.2.3.tgz" @@ -1912,28 +2210,34 @@ "@gar/promisify" "^1.1.3" semver "^7.3.5" -"@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== dependencies: - "@npmcli/promise-spawn" "^3.0.0" + semver "^7.3.5" + +"@npmcli/git@^4.0.0": + version "4.0.4" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-4.0.4.tgz" + integrity sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg== + dependencies: + "@npmcli/promise-spawn" "^6.0.0" lru-cache "^7.4.4" - mkdirp "^1.0.4" - npm-pick-manifest "^7.0.0" - proc-log "^2.0.0" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" promise-inflight "^1.0.1" promise-retry "^2.0.1" semver "^7.3.5" - which "^2.0.2" + which "^3.0.0" -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== +"@npmcli/installed-package-contents@^2.0.1": + version "2.0.2" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" "@npmcli/move-file@^1.0.1": version "1.1.2" @@ -1951,28 +2255,28 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/promise-spawn@^3.0.0": +"@npmcli/node-gyp@^3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/run-script@^4.1.0": - version "4.2.1" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== dependencies: - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/promise-spawn" "^3.0.0" + which "^3.0.0" + +"@npmcli/run-script@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz" + integrity sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" node-gyp "^9.0.0" - read-package-json-fast "^2.0.3" - which "^2.0.2" + read-package-json-fast "^3.0.0" + which "^3.0.0" "@nrwl/cli@*", "@nrwl/cli@15.9.2": version "15.9.2" @@ -2113,14 +2417,19 @@ "@angular-devkit/schematics" "12.2.18" jsonc-parser "3.0.0" -"@schematics/angular@14.2.11": - version "14.2.11" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.11.tgz" - integrity sha512-tejU2BOc25bQO34mZmTwmtAfOiFtDE/io/yHqYgUsTn804kyMQbz2QOOXN0epdzRYrkAHvH4KV8c2LDyO6iijA== +"@schematics/angular@15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" + integrity sha512-YN0A5bzuqEmLdwbcQRop9TFj0QVxTC/XCL0K5DfDymVBS2j09NMyLLVc6TDOs+J/fMQr5EwiT149ikzqiUmAcw== dependencies: - "@angular-devkit/core" "14.2.11" - "@angular-devkit/schematics" "14.2.11" - jsonc-parser "3.1.0" + "@angular-devkit/core" "15.2.5" + "@angular-devkit/schematics" "15.2.5" + jsonc-parser "3.2.0" + +"@sigstore/protobuf-specs@^0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz" + integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== "@socket.io/component-emitter@~3.1.0": version "3.1.0" @@ -2157,6 +2466,19 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== + +"@tufjs/models@1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@tufjs/models/-/models-1.0.2.tgz" + integrity sha512-uxarDtxTIK3f8hJS4yFhW/lvTa3tsiQU5iDCRut+NCnOXvNtEul0Ct58NIIcIx9Rkt7OFEK31Ndpqsd663nsew== + dependencies: + "@tufjs/canonical-json" "1.0.0" + minimatch "^8.0.3" + "@types/body-parser@*": version "1.19.2" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" @@ -2881,9 +3203,9 @@ ajv@^8.0.0, ajv@8.6.2: uri-js "^4.2.2" ajv@^8.8.0, ajv@^8.8.2: - version "8.11.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2900,6 +3222,16 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@8.12.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + angular-idle-preload@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/angular-idle-preload/-/angular-idle-preload-3.0.0.tgz" @@ -3121,6 +3453,18 @@ autoprefixer@^10.4.13, autoprefixer@^10.4.8: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@10.4.13: + version "10.4.13" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" + integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== + dependencies: + browserslist "^4.21.4" + caniuse-lite "^1.0.30001426" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -3180,6 +3524,14 @@ babel-loader@8.2.5: make-dir "^3.1.0" schema-utils "^2.6.5" +babel-loader@9.1.2: + version "9.1.2" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz" + integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA== + dependencies: + find-cache-dir "^3.3.2" + schema-utils "^4.0.0" + babel-plugin-istanbul@6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" @@ -3191,7 +3543,7 @@ babel-plugin-istanbul@6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-polyfill-corejs2@^0.3.2: +babel-plugin-polyfill-corejs2@^0.3.2, babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== @@ -3208,7 +3560,15 @@ babel-plugin-polyfill-corejs3@^0.5.3: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.4.0: +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.0, babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== @@ -3416,7 +3776,7 @@ browser-sync@^2.26.7: ua-parser-js "^1.0.33" yargs "^17.3.1" -browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1, "browserslist@>= 4.21.0": +browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1, "browserslist@>= 4.21.0", browserslist@4.21.5: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3500,30 +3860,6 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" -cacache@^16.0.0: - version "16.1.3" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - cacache@^16.1.0: version "16.1.3" resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" @@ -3548,6 +3884,25 @@ cacache@^16.1.0: tar "^6.1.11" unique-filename "^2.0.0" +cacache@^17.0.0: + version "17.0.5" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.5.tgz" + integrity sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^9.3.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cacache@16.1.2: version "16.1.2" resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz" @@ -3572,6 +3927,25 @@ cacache@16.1.2: tar "^6.1.11" unique-filename "^1.1.1" +cacache@17.0.4: + version "17.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" + integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^8.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cachedir@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" @@ -3595,7 +3969,7 @@ camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: +caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: version "1.0.30001477" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz" integrity sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ== @@ -3716,7 +4090,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": +chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4096,7 +4470,7 @@ copy-webpack-plugin@11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.21.0, core-js-compat@^3.22.1: +core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.25.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== @@ -4215,6 +4589,20 @@ css-loader@6.7.1: postcss-value-parser "^4.2.0" semver "^7.3.5" +css-loader@6.7.3: + version "6.7.3" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.19" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + css-prefers-color-scheme@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" @@ -4244,12 +4632,7 @@ css-what@^6.0.1: resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^7.0.0: - version "7.5.4" - resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" - integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== - -cssdb@^7.1.0: +cssdb@^7.0.0, cssdb@^7.1.0: version "7.5.4" resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== @@ -4422,7 +4805,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4, debug@4.3.4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4838,7 +5221,7 @@ entities@^2.0.0: resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== @@ -4969,6 +5352,11 @@ esbuild-wasm@0.15.5: resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz" integrity sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A== +esbuild-wasm@0.17.8: + version "0.17.8" + resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz" + integrity sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ== + esbuild@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz" @@ -4996,6 +5384,34 @@ esbuild@0.15.5: esbuild-windows-64 "0.15.5" esbuild-windows-arm64 "0.15.5" +esbuild@0.17.8: + version "0.17.8" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz" + integrity sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g== + optionalDependencies: + "@esbuild/android-arm" "0.17.8" + "@esbuild/android-arm64" "0.17.8" + "@esbuild/android-x64" "0.17.8" + "@esbuild/darwin-arm64" "0.17.8" + "@esbuild/darwin-x64" "0.17.8" + "@esbuild/freebsd-arm64" "0.17.8" + "@esbuild/freebsd-x64" "0.17.8" + "@esbuild/linux-arm" "0.17.8" + "@esbuild/linux-arm64" "0.17.8" + "@esbuild/linux-ia32" "0.17.8" + "@esbuild/linux-loong64" "0.17.8" + "@esbuild/linux-mips64el" "0.17.8" + "@esbuild/linux-ppc64" "0.17.8" + "@esbuild/linux-riscv64" "0.17.8" + "@esbuild/linux-s390x" "0.17.8" + "@esbuild/linux-x64" "0.17.8" + "@esbuild/netbsd-x64" "0.17.8" + "@esbuild/openbsd-x64" "0.17.8" + "@esbuild/sunos-x64" "0.17.8" + "@esbuild/win32-arm64" "0.17.8" + "@esbuild/win32-ia32" "0.17.8" + "@esbuild/win32-x64" "0.17.8" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -5524,7 +5940,7 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^3.3.1: +find-cache-dir@^3.3.1, find-cache-dir@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== @@ -5675,6 +6091,13 @@ fs-minipass@^2.0.0, fs-minipass@^2.1.0: dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.1.tgz" + integrity sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw== + dependencies: + minipass "^4.0.0" + fs-monkey@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" @@ -5855,6 +6278,26 @@ glob@^8.0.1, glob@8.0.3: minimatch "^5.0.1" once "^1.3.0" +glob@^9.3.0: + version "9.3.5" + resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +glob@^9.3.1: + version "9.3.5" + resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + glob@7.1.4: version "7.1.4" resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" @@ -5867,6 +6310,17 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" @@ -6048,10 +6502,10 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hosted-git-info@^5.0.0: - version "5.2.1" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz" - integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== +hosted-git-info@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== dependencies: lru-cache "^7.5.1" @@ -6126,7 +6580,7 @@ htmlparser2@^8.0.0: domutils "^3.0.1" entities "^4.4.0" -http-cache-semantics@^4.1.0: +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -6311,12 +6765,12 @@ ignore-by-default@^1.0.1: resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== +ignore-walk@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.2.tgz" + integrity sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg== dependencies: - minimatch "^5.0.1" + minimatch "^7.4.2" ignore@^5.0.4, ignore@^5.1.8, ignore@^5.2.0: version "5.2.4" @@ -6402,10 +6856,10 @@ ini@2.0.0: resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -ini@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz" - integrity sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw== +ini@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== inquirer@8.2.4: version "8.2.4" @@ -6996,6 +7450,11 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz" + integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -7300,6 +7759,13 @@ less-loader@11.0.0: dependencies: klona "^2.0.4" +less-loader@11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz" + integrity sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug== + dependencies: + klona "^2.0.4" + "less@^3.5.0 || ^4.0.0", less@4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/less/-/less-4.1.3.tgz" @@ -7506,12 +7972,17 @@ lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -magic-string@^0.26.0: - version "0.26.7" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz" - integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== +lru-cache@^9.0.0: + version "9.0.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz" + integrity sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg== + +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== dependencies: - sourcemap-codec "^1.4.8" + "@jridgewell/sourcemap-codec" "^1.4.13" magic-string@0.25.7: version "0.25.7" @@ -7520,12 +7991,12 @@ magic-string@0.25.7: dependencies: sourcemap-codec "^1.4.4" -magic-string@0.26.2: - version "0.26.2" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz" - integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== +magic-string@0.29.0: + version "0.29.0" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz" + integrity sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q== dependencies: - sourcemap-codec "^1.4.8" + "@jridgewell/sourcemap-codec" "^1.4.13" make-dir@^2.1.0: version "2.1.0" @@ -7547,7 +8018,7 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: +make-fetch-happen@^10.0.3: version "10.2.1" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== @@ -7569,6 +8040,48 @@ make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: socks-proxy-agent "^7.0.0" ssri "^9.0.0" +make-fetch-happen@^11.0.0: + version "11.0.3" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" + integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +make-fetch-happen@^11.0.1: + version "11.0.3" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" + integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + manifesto.js@^4.2.0: version "4.2.17" resolved "https://registry.npmjs.org/manifesto.js/-/manifesto.js-4.2.17.tgz" @@ -7627,7 +8140,7 @@ media-typer@0.3.0: resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.4.3: +memfs@^3.4.12, memfs@^3.4.3: version "3.5.0" resolved "https://registry.npmjs.org/memfs/-/memfs-3.5.0.tgz" integrity sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA== @@ -7721,6 +8234,13 @@ mini-css-extract-plugin@2.6.1: dependencies: schema-utils "^4.0.0" +mini-css-extract-plugin@2.7.2: + version "2.7.2" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz" + integrity sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw== + dependencies: + schema-utils "^4.0.0" + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" @@ -7740,6 +8260,27 @@ minimatch@^5.0.1, minimatch@5.1.0: dependencies: brace-expansion "^2.0.1" +minimatch@^7.4.2: + version "7.4.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.3: + version "8.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + minimatch@3.0.5: version "3.0.5" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" @@ -7770,6 +8311,17 @@ minipass-fetch@^2.0.3: optionalDependencies: encoding "^0.1.13" +minipass-fetch@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.1.tgz" + integrity sha512-t9/wowtf7DYkwz8cfMSt0rMwiyNIBXf5CKZ3S5ZMqRqMYT0oLTp0x1WorMI9WTwvaPg21r1JbFxJMum8JrLGfw== + dependencies: + minipass "^4.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" @@ -7806,10 +8358,15 @@ minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.7" - resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.7.tgz" - integrity sha512-ScVIgqHcXRMyfflqHmEW0bm8z8rb5McHyOY3ewX9JBgZaR77G7nxq9L/mtV96/QbAAwtbCAHVVLzD1kkyfFQEw== +minipass@^4.0.0, minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -8105,12 +8662,12 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== dependencies: - hosted-git-info "^5.0.0" + hosted-git-info "^6.0.0" is-core-module "^2.8.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" @@ -8135,79 +8692,64 @@ nouislider@^14.6.3, nouislider@>=9.x: resolved "https://registry.npmjs.org/nouislider/-/nouislider-14.7.0.tgz" integrity sha512-4RtQ1+LHJKesDCNJrXkQcwXAWCrC2aggdLYMstS/G5fEWL+fXZbUA9pwVNHFghMGuFGRATlDLNInRaPeRKzpFQ== -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: - npm-normalize-package-bin "^1.0.1" + npm-normalize-package-bin "^3.0.0" -npm-bundled@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz" - integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== - dependencies: - npm-normalize-package-bin "^2.0.0" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== +npm-install-checks@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.0.tgz" + integrity sha512-udSGENih/5xKh3Ex+L0PtZcOt0Pa+6ppDLnpG5D49/EhMja3LupaY9E/DtJTxyFBwE09ot7Fc+H4DywnZNWTVA== dependencies: semver "^7.1.1" -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== +npm-normalize-package-bin@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz" + integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== +npm-package-arg@^10.0.0, npm-package-arg@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" + hosted-git-info "^6.0.0" + proc-log "^3.0.0" semver "^7.3.5" - validate-npm-package-name "^4.0.0" + validate-npm-package-name "^5.0.0" -npm-packlist@^5.1.0: - version "5.1.3" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz" - integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^2.0.0" - npm-normalize-package-bin "^2.0.0" + ignore-walk "^6.0.0" -npm-pick-manifest@^7.0.0, npm-pick-manifest@7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz" - integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== +npm-pick-manifest@^8.0.0, npm-pick-manifest@8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" + integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== dependencies: - npm-install-checks "^5.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^9.0.0" + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" semver "^7.3.5" -npm-registry-fetch@^13.0.1: - version "13.3.1" - resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== +npm-registry-fetch@^14.0.0: + version "14.0.3" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz" + integrity sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA== dependencies: - make-fetch-happen "^10.0.6" - minipass "^3.1.6" - minipass-fetch "^2.0.3" + make-fetch-happen "^11.0.0" + minipass "^4.0.0" + minipass-fetch "^3.0.0" minipass-json-stream "^1.0.1" minizlib "^2.1.2" - npm-package-arg "^9.0.1" - proc-log "^2.0.0" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" @@ -8382,6 +8924,15 @@ open@^8.0.9, open@^8.4.0, open@8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +open@8.4.1: + version "8.4.1" + resolved "https://registry.npmjs.org/open/-/open-8.4.1.tgz" + integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + opencollective-postinstall@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" @@ -8506,31 +9057,28 @@ p-try@^2.0.0: resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@13.6.2: - version "13.6.2" - resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== +pacote@15.1.0: + version "15.1.0" + resolved "https://registry.npmjs.org/pacote/-/pacote-15.1.0.tgz" + integrity sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg== dependencies: - "@npmcli/git" "^3.0.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/promise-spawn" "^3.0.0" - "@npmcli/run-script" "^4.1.0" - cacache "^16.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.6" - mkdirp "^1.0.4" - npm-package-arg "^9.0.0" - npm-packlist "^5.1.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.1" - proc-log "^2.0.0" + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^4.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" promise-retry "^2.0.1" - read-package-json "^5.0.0" - read-package-json-fast "^2.0.3" - rimraf "^3.0.2" - ssri "^9.0.0" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.0.0" + ssri "^10.0.0" tar "^6.1.11" pako@^1.0.3: @@ -8573,6 +9121,15 @@ parse5-html-rewriting-stream@6.0.1: parse5 "^6.0.1" parse5-sax-parser "^6.0.1" +parse5-html-rewriting-stream@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz" + integrity sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg== + dependencies: + entities "^4.3.0" + parse5 "^7.0.0" + parse5-sax-parser "^7.0.0" + parse5-htmlparser2-tree-adapter@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" @@ -8587,6 +9144,13 @@ parse5-sax-parser@^6.0.1: dependencies: parse5 "^6.0.1" +parse5-sax-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz" + integrity sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg== + dependencies: + parse5 "^7.0.0" + parse5@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" @@ -8634,6 +9198,14 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.6.1: + version "1.6.4" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.4.tgz" + integrity sha512-Qp/9IHkdNiXJ3/Kon++At2nVpnhRiPq/aSvQN+H3U1WZbvNRK0RIQK/o4HMqPoXjpuGJUEWpHSs6Mnjxqh3TQg== + dependencies: + lru-cache "^9.0.0" + minipass "^5.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" @@ -8898,6 +9470,15 @@ postcss-loader@7.0.1: klona "^2.0.5" semver "^7.3.7" +postcss-loader@7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" + integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.8" + postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" @@ -9126,7 +9707,7 @@ postcss@^6.0.6: source-map "^0.6.1" supports-color "^5.4.0" -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.6, postcss@^8.4.7: +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.6, postcss@8.4.21: version "8.4.21" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -9143,7 +9724,7 @@ postcss@^7.0.14: picocolors "^0.2.1" source-map "^0.6.1" -postcss@8.4.16: +postcss@^8.4.7, postcss@8.4.16: version "8.4.16" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== @@ -9167,10 +9748,10 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== process-nextick-args@~2.0.0: version "2.0.1" @@ -9534,23 +10115,23 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== +read-package-json-fast@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" -read-package-json@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz" - integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== +read-package-json@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.1.tgz" + integrity sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA== dependencies: - glob "^8.0.1" - json-parse-even-better-errors "^2.3.1" - normalize-package-data "^4.0.0" - npm-normalize-package-bin "^2.0.0" + glob "^9.3.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" readable-stream@^2.0.1: version "2.3.8" @@ -9946,6 +10527,14 @@ sass-loader@13.0.2: klona "^2.0.4" neo-async "^2.6.2" +sass-loader@13.2.0: + version "13.2.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz" + integrity sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + sass-resources-loader@^2.1.1: version "2.2.5" resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" @@ -9972,6 +10561,15 @@ sass@1.54.4: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" +sass@1.58.1: + version "1.58.1" + resolved "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz" + integrity sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" @@ -10100,20 +10698,20 @@ semver@^7.3.4: dependencies: lru-cache "^6.0.0" -semver@^7.3.5, semver@^7.3.7, semver@7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8: +semver@^7.3.5, semver@^7.3.7: version "7.4.0" resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== dependencies: lru-cache "^6.0.0" +semver@^7.3.8, semver@7.3.8: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + semver@~7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" @@ -10126,6 +10724,13 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" +semver@7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + send@0.16.2: version "0.16.2" resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz" @@ -10274,6 +10879,15 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +sigstore@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/sigstore/-/sigstore-1.2.0.tgz" + integrity sha512-Fr9+W1nkBSIZCkJQR7jDn/zI0UXNsVpp+7mDQkCnZOIxG9p6yNXBx9xntHsfUyYHE55XDkkVV3+rYbrkzAeesA== + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + make-fetch-happen "^11.0.1" + tuf-js "^1.0.0" + simple-update-notifier@^1.0.7: version "1.1.0" resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" @@ -10420,6 +11034,15 @@ source-map-loader@4.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.2" +source-map-loader@4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz" + integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== + dependencies: + abab "^2.0.6" + iconv-lite "^0.6.3" + source-map-js "^1.0.2" + source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" @@ -10453,7 +11076,7 @@ source-map@0.7.4: resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== -sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: +sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== @@ -10536,6 +11159,13 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^10.0.0: + version "10.0.3" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.3.tgz" + integrity sha512-lJtX/BFPI/VEtxZmLfeh7pzisIs6micwZ3eruD3+ds9aPsXKlYpwDS2Q7omD6WC42WO9+bnUSzlMmfv8uK8meg== + dependencies: + minipass "^4.0.0" + ssri@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" @@ -10810,6 +11440,16 @@ terser@5.14.2: commander "^2.20.0" source-map-support "~0.5.20" +terser@5.16.3: + version "5.16.3" + resolved "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz" + integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" @@ -11017,7 +11657,7 @@ tslib@^1.9.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -11039,6 +11679,14 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tuf-js@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.3.tgz" + integrity sha512-jGYi5nG/kqgfTFQSdoN6PW9eIn+XRZqdXku+fSwNk6UpWIsWaV7pzAqPgFr85edOPhoyJDyBqCS+DCnHroMvrw== + dependencies: + "@tufjs/models" "1.0.2" + make-fetch-happen "^11.0.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" @@ -11116,7 +11764,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.4.3 <4.7", "typescript@>=4.6.2 <4.9", typescript@~4.8.4: +typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.4.3 <4.7", "typescript@>=4.6.2 <4.9", "typescript@>=4.8.2 <5.0", typescript@~4.8.4: version "4.8.4" resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== @@ -11198,6 +11846,13 @@ unique-filename@^2.0.0: dependencies: unique-slug "^3.0.0" +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" @@ -11212,6 +11867,13 @@ unique-slug@^3.0.0: dependencies: imurmurhash "^0.1.4" +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" @@ -11285,7 +11947,7 @@ uuid@^3.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.1.0, uuid@^8.3.2, uuid@8.3.2: +uuid@^8.1.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -11313,10 +11975,10 @@ validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== +validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" @@ -11469,6 +12131,17 @@ webpack-dev-middleware@^5.3.1, webpack-dev-middleware@5.3.3: range-parser "^1.2.1" schema-utils "^4.0.0" +webpack-dev-middleware@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz" + integrity sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw== + dependencies: + colorette "^2.0.10" + memfs "^3.4.12" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + webpack-dev-server@^4.0.0, webpack-dev-server@^4.5.0: version "4.13.2" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" @@ -11540,6 +12213,41 @@ webpack-dev-server@4.11.0: webpack-dev-middleware "^5.3.1" ws "^8.4.2" +webpack-dev-server@4.11.1: + version "4.11.1" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" + integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + webpack-merge@^5.7.3, webpack-merge@5.8.0: version "5.8.0" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" @@ -11568,7 +12276,7 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=2, "webpack@4.x.x || 5.x.x": +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=5, "webpack@4.x.x || 5.x.x": version "5.78.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== @@ -11598,7 +12306,7 @@ webpack-subresource-integrity@5.1.0: watchpack "^2.4.0" webpack-sources "^3.2.3" -webpack@^5.54.0, webpack@5.76.1: +webpack@^5.54.0, webpack@>=2, webpack@5.76.1: version "5.76.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== @@ -11736,6 +12444,13 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +which@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/which/-/which-3.0.0.tgz" + integrity sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ== + dependencies: + isexe "^2.0.0" + wicked-good-xpath@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz" @@ -11856,7 +12571,7 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.0, yargs-parser@^21.1.1, yargs-parser@21.1.1: +yargs-parser@^21.1.1, yargs-parser@21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== @@ -11905,18 +12620,18 @@ yargs@17.1.1: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@17.5.1: - version "17.5.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== +yargs@17.6.2: + version "17.6.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^21.0.0" + yargs-parser "^21.1.1" yauzl@^2.10.0: version "2.10.0" @@ -11936,7 +12651,7 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -"zone.js@~0.11.4 || ~0.12.0", zone.js@~0.11.5: +"zone.js@~0.11.4 || ~0.12.0", "zone.js@~0.11.4 || ~0.12.0 || ~0.13.0", zone.js@~0.11.5: version "0.11.8" resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" integrity sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA== From 0327f1d856a793377213709f4a438f7261ba4c0c Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 11:37:25 +0200 Subject: [PATCH 480/833] 101108: Automatic ng update @nguniversal/builders@15 --- package.json | 2 +- yarn.lock | 142 +++++++++++++++++++++++++++++---------------------- 2 files changed, 82 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 1dafe10d95..40cae302d1 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "@fortawesome/fontawesome-free": "^6.2.1", "@ngrx/store-devtools": "^13.0.2", "@ngtools/webpack": "^13.2.6", - "@nguniversal/builders": "^14.2.3", + "@nguniversal/builders": "^15.2.0", "@types/deep-freeze": "0.1.2", "@types/ejs": "^3.1.1", "@types/express": "^4.17.9", diff --git a/yarn.lock b/yarn.lock index 77f6c43e5f..dd3607b994 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,7 +44,7 @@ "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/architect@^0.1402.0", "@angular-devkit/architect@>=0.1400.0 < 0.1500.0", "@angular-devkit/architect@0.1402.11": +"@angular-devkit/architect@>=0.1400.0 < 0.1500.0", "@angular-devkit/architect@0.1402.11": version "0.1402.11" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== @@ -52,6 +52,14 @@ "@angular-devkit/core" "14.2.11" rxjs "6.6.7" +"@angular-devkit/architect@~0.1502.0": + version "0.1502.5" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" + integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== + dependencies: + "@angular-devkit/core" "15.2.5" + rxjs "6.6.7" + "@angular-devkit/architect@0.1502.5": version "0.1502.5" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" @@ -130,7 +138,7 @@ optionalDependencies: esbuild "0.15.5" -"@angular-devkit/build-angular@^14.2.0", "@angular-devkit/build-angular@^15.2.5": +"@angular-devkit/build-angular@^15.0.0", "@angular-devkit/build-angular@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.5.tgz" integrity sha512-D2LxjBtUlgJnPxybOIN0XsENEGkVkqCGBBii5oK84HvgBHXO/EyP1WXpOdb2lOYSUZyjhOOs0q42LCobJoaxUw== @@ -226,7 +234,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@^14.0.0", "@angular-devkit/core@^14.2.0", "@angular-devkit/core@14.2.11": +"@angular-devkit/core@^14.0.0", "@angular-devkit/core@14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz" integrity sha512-cBIGs6y9rykOQqnuAQOB1DgIRyBFYtvKRJb7QNUfIJ0qUfARKkuV/yikv3lrb95ePGkmoRzmjkFqcFZiYU+r7A== @@ -237,7 +245,7 @@ rxjs "6.6.7" source-map "0.7.4" -"@angular-devkit/core@15.2.5": +"@angular-devkit/core@~15.2.0", "@angular-devkit/core@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.5.tgz" integrity sha512-ZfjEkAe2yYeekc3xjZ/U4pK9nb+w6BFwAEjou6mE8PWZH7iYskm0YCCXkmu+B+zViEcCLhAkJAxu9MwX4efd8g== @@ -365,20 +373,13 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== dependencies: tslib "^2.3.0" -"@angular/common@^14.2.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz" - integrity sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ== - dependencies: - tslib "^2.3.0" - "@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@14.3.0", "@angular/compiler-cli@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" @@ -409,14 +410,14 @@ dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== dependencies: tslib "^2.3.0" -"@angular/core@^14.2.0", "@angular/core@14.3.0": +"@angular/core@14.3.0": version "14.3.0" resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" integrity sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ== @@ -2116,18 +2117,18 @@ resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== -"@nguniversal/builders@^14.2.3": - version "14.2.3" - resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-14.2.3.tgz" - integrity sha512-4WpQ5zMfw4BIH/2ymWchFm2bbN8w0/sC0Rg3IracJ9ESsfTJMaIg8CzVer6NBqC+5As9iLZwau7nrfzt7sQf1A== +"@nguniversal/builders@^15.2.0": + version "15.2.0" + resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-15.2.0.tgz" + integrity sha512-V+y3gj/yKs2EHXXOSk752yYS60d+Bmhts+l5o4dDi4GJSZbJ7SCcbmocxZNgjYOv3sTJgsE4zLxxiaL7+4MHDQ== dependencies: - "@angular-devkit/architect" "^0.1402.0" - "@angular-devkit/core" "^14.2.0" - "@nguniversal/common" "14.2.3" - browser-sync "^2.26.7" - express "^4.17.1" - guess-parser "^0.4.12" - http-proxy-middleware "^2.0.0" + "@angular-devkit/architect" "~0.1502.0" + "@angular-devkit/core" "~15.2.0" + "@nguniversal/common" "15.2.0" + browser-sync "^2.27.10" + express "^4.18.2" + guess-parser "^0.4.22" + http-proxy-middleware "^2.0.6" ora "^5.1.0" piscina "~3.2.0" rxjs "^6.5.5" @@ -2142,13 +2143,13 @@ jsdom "19.0.0" tslib "^2.3.0" -"@nguniversal/common@14.2.3": - version "14.2.3" - resolved "https://registry.npmjs.org/@nguniversal/common/-/common-14.2.3.tgz" - integrity sha512-FWoZY+DZCNw24tNnnWkgTpNAlshkfiaxiT7V+fx2WFpY0LNXLWk45+hWhl4+wFEknOXr/DT/oU1m/RjR6FgXZQ== +"@nguniversal/common@15.2.0": + version "15.2.0" + resolved "https://registry.npmjs.org/@nguniversal/common/-/common-15.2.0.tgz" + integrity sha512-IfFuqpzK0P3iMdR2DbPWTbjLWsFvAwvMkZnp5k9FRgg20DpdgqDRaoJuw4HV5qSKKhY/JcVXq99GIG6JHaza1A== dependencies: critters "0.0.16" - jsdom "20.0.0" + jsdom "21.1.0" tslib "^2.3.0" "@nguniversal/express-engine@^13.0.2": @@ -3089,6 +3090,14 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + acorn-import-assertions@^1.7.6: version "1.8.0" resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" @@ -3109,12 +3118,17 @@ acorn-walk@^8.0.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: version "8.8.2" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== @@ -3739,7 +3753,7 @@ browser-sync-ui@^2.29.1: socket.io-client "^4.4.1" stream-throttle "^0.1.3" -browser-sync@^2.26.7: +browser-sync@^2.27.10: version "2.29.1" resolved "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.1.tgz" integrity sha512-WXy9HMJVQaNUTPjmai330E2fnDA6W84l/vBILGkYu9yHXIpWw1gJYjdQWDfEhLFljYUHNTN9jM3GCej2T55m+g== @@ -4826,7 +4840,7 @@ debug@4.3.2: dependencies: ms "2.1.2" -decimal.js@^10.2.1, decimal.js@^10.3.1: +decimal.js@^10.2.1, decimal.js@^10.3.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -5728,7 +5742,7 @@ express-static-gzip@^2.1.5: dependencies: serve-static "^1.14.1" -express@^4.15.2, express@^4.17.1, express@^4.17.3: +express@^4.15.2, express@^4.17.1, express@^4.17.3, express@^4.18.2: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -6411,7 +6425,7 @@ grapheme-splitter@^1.0.4: resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -guess-parser@^0.4.12: +guess-parser@^0.4.22: version "0.4.22" resolved "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz" integrity sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg== @@ -6645,7 +6659,7 @@ http-proxy-middleware@^1.0.5: is-plain-obj "^3.0.0" micromatch "^4.0.2" -http-proxy-middleware@^2.0.0: +http-proxy-middleware@^2.0.3: version "2.0.6" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== @@ -6656,7 +6670,7 @@ http-proxy-middleware@^2.0.0: is-plain-obj "^3.0.0" micromatch "^4.0.2" -http-proxy-middleware@^2.0.3: +http-proxy-middleware@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== @@ -7402,18 +7416,18 @@ jsdom@19.0.0: ws "^8.2.3" xml-name-validator "^4.0.0" -jsdom@20.0.0: - version "20.0.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz" - integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== +jsdom@21.1.0: + version "21.1.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" + integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== dependencies: abab "^2.0.6" - acorn "^8.7.1" - acorn-globals "^6.0.0" + acorn "^8.8.1" + acorn-globals "^7.0.0" cssom "^0.5.0" cssstyle "^2.3.0" data-urls "^3.0.2" - decimal.js "^10.3.1" + decimal.js "^10.4.2" domexception "^4.0.0" escodegen "^2.0.0" form-data "^4.0.0" @@ -7421,18 +7435,17 @@ jsdom@20.0.0: http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "^7.0.0" + nwsapi "^2.2.2" + parse5 "^7.1.1" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^3.0.0" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" webidl-conversions "^7.0.0" whatwg-encoding "^2.0.0" whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" - ws "^8.8.0" + ws "^8.11.0" xml-name-validator "^4.0.0" jsesc@^2.5.1: @@ -8775,7 +8788,7 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -nwsapi@^2.2.0: +nwsapi@^2.2.0, nwsapi@^2.2.2: version "2.2.3" resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.3.tgz" integrity sha512-jscxIO4/VKScHlbmFBdV1Z6LXnLO+ZR4VMtypudUdfwtKxUN3TQcNFIHLwKtrUbDyHN4/GycY9+oRGZ2XMXYPw== @@ -9168,6 +9181,13 @@ parse5@^7.0.0: dependencies: entities "^4.4.0" +parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + parse5@6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" @@ -10456,14 +10476,7 @@ rxjs@^6.5.4: dependencies: tslib "^1.9.0" -rxjs@^6.5.5: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@~6.6.0, rxjs@6.6.7: +rxjs@^6.5.5, rxjs@~6.6.0, rxjs@6.6.7: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -11556,7 +11569,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@^4.0.0: +tough-cookie@^4.0.0, tough-cookie@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== @@ -12027,6 +12040,13 @@ w3c-xmlserializer@^3.0.0: dependencies: xml-name-validator "^4.0.0" +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + watchpack@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" @@ -12506,7 +12526,7 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.13.0, ws@^8.2.3, ws@^8.4.2, ws@^8.8.0: +ws@^8.11.0, ws@^8.13.0, ws@^8.2.3, ws@^8.4.2: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== From 8c3ec98db3947e6b380a587fab1ebcd184f5edb9 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 11:40:05 +0200 Subject: [PATCH 481/833] 101108: Automatic ng update @angular-eslint/schematics@15 --- angular.json | 8 + package.json | 18 +- yarn.lock | 733 +++++++++++++++++++-------------------------------- 3 files changed, 283 insertions(+), 476 deletions(-) diff --git a/angular.json b/angular.json index d5227c4f10..ff31de0111 100644 --- a/angular.json +++ b/angular.json @@ -278,5 +278,13 @@ "schematicCollections": [ "@angular-eslint/schematics" ] + }, + "schematics": { + "@angular-eslint/schematics:application": { + "setParserOptionsProject": true + }, + "@angular-eslint/schematics:library": { + "setParserOptionsProject": true + } } } diff --git a/package.json b/package.json index 40cae302d1..dd8b9c0827 100644 --- a/package.json +++ b/package.json @@ -136,11 +136,11 @@ "devDependencies": { "@angular-builders/custom-webpack": "~14.1.0", "@angular-devkit/build-angular": "^15.2.5", - "@angular-eslint/builder": "13.1.0", - "@angular-eslint/eslint-plugin": "13.1.0", - "@angular-eslint/eslint-plugin-template": "13.1.0", - "@angular-eslint/schematics": "13.1.0", - "@angular-eslint/template-parser": "13.1.0", + "@angular-eslint/builder": "15.2.1", + "@angular-eslint/eslint-plugin": "15.2.1", + "@angular-eslint/eslint-plugin-template": "15.2.1", + "@angular-eslint/schematics": "15.2.1", + "@angular-eslint/template-parser": "15.2.1", "@angular/cli": "^15.2.5", "@angular/compiler-cli": "^15.2.6", "@angular/language-service": "^15.2.6", @@ -157,8 +157,8 @@ "@types/lodash": "^4.14.165", "@types/node": "^14.14.9", "@types/sanitize-html": "^2.6.2", - "@typescript-eslint/eslint-plugin": "5.11.0", - "@typescript-eslint/parser": "5.11.0", + "@typescript-eslint/eslint-plugin": "^5.43.0", + "@typescript-eslint/parser": "^5.43.0", "axe-core": "^4.4.3", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", @@ -166,7 +166,7 @@ "cypress": "12.9.0", "cypress-axe": "^1.1.0", "deep-freeze": "0.0.1", - "eslint": "^8.2.0", + "eslint": "^8.28.0", "eslint-plugin-deprecation": "^1.3.2", "eslint-plugin-import": "^2.25.4", "eslint-plugin-jsdoc": "^39.6.4", @@ -203,4 +203,4 @@ "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.5.0" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index dd3607b994..0d9a7242ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -276,62 +276,62 @@ ora "5.4.1" rxjs "6.6.7" -"@angular-eslint/builder@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/builder/-/builder-13.1.0.tgz" - integrity sha512-RdyeetctnipVdCBrU/mipJ2XKiLC1yGmK1Sfbbgwu0s49CAdOArY/b+b8OU3yyy4EO1EGKQMlzs6F3wTYgiZCA== - dependencies: - "@nrwl/devkit" "13.1.3" +"@angular-eslint/builder@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/builder/-/builder-15.2.1.tgz" + integrity sha512-7x2DANebLRl997Mj4DhZrnz5+vnSjavGGveJ0mBuU7CEsL0ZYLftdRqL0e0HtU3ksseS7xpchD6OM08nkNgySw== -"@angular-eslint/bundled-angular-compiler@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.1.0.tgz" - integrity sha512-0VSAZ3zrHkKdbvogQ4GLSf+lKojtPL3LXLlvXU9xNgNsqw68+gSNwaWd595tXoQCmpwWpTerKUbyIsGnPA7EYA== +"@angular-eslint/bundled-angular-compiler@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-15.2.1.tgz" + integrity sha512-LO7Am8eVCr7oh6a0VmKSL7K03CnQEQhFO7Wt/YtbfYOxVjrbwmYLwJn+wZPOT7A02t/BttOD/WXuDrOWtSMQ/Q== -"@angular-eslint/eslint-plugin-template@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-13.1.0.tgz" - integrity sha512-ceZAMjufE58aduOW/UwjrbCRWocYC0zOEJ2jUkPt6jlL8yzc+SC6UitO0VmMgUsCizHueav5/3gKy05xqwk/CA== +"@angular-eslint/eslint-plugin-template@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-15.2.1.tgz" + integrity sha512-IeiSLk6YxapFdH2z5o/O3R7VwtBd2T6fWmhLFPwDYMDknrwegnOjwswCdBplOccpUp0wqlCeGUx7LTsuzwaz7w== dependencies: - "@angular-eslint/bundled-angular-compiler" "13.1.0" - "@typescript-eslint/experimental-utils" "5.11.0" - aria-query "^4.2.2" - axobject-query "^2.2.0" + "@angular-eslint/bundled-angular-compiler" "15.2.1" + "@angular-eslint/utils" "15.2.1" + "@typescript-eslint/type-utils" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + aria-query "5.1.3" + axobject-query "3.1.1" -"@angular-eslint/eslint-plugin@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-13.1.0.tgz" - integrity sha512-WiggBWPhhpSjcYVHJiawCduCsydM/RPudUE8zxv0Nmj/APuzNgvUr6E//uYTrhNv9EIJoZutRovw7R4Y/yXj4Q== +"@angular-eslint/eslint-plugin@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-15.2.1.tgz" + integrity sha512-OM7b1kS4E4CkXjkaWN+lEzawh4VxY6l7FO1Cuk4s7iv3/YpZG3rJxIZBqnFLTixwrBuqw8y4FNBzF3eDgmFAUw== dependencies: - "@angular-eslint/utils" "13.1.0" - "@typescript-eslint/experimental-utils" "5.11.0" + "@angular-eslint/utils" "15.2.1" + "@typescript-eslint/utils" "5.48.2" -"@angular-eslint/schematics@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-13.1.0.tgz" - integrity sha512-/gVtkRP09cGhnUF3tr0phwNA5/ml94V3cqO8X4Z4QmyAaIwxuOJ0mJvWrVN7aurURxh9WoeWD/HXOvtC5igtpQ== +"@angular-eslint/schematics@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-15.2.1.tgz" + integrity sha512-0ZfBCejHWIcgy3J5kFs9sS/jqi8i5AptxggOwFySOlCLJ+CzNrktjD4jff1Zy8K/VLzY0Ci0BSZXvgWfP0k9Rg== dependencies: - "@angular-eslint/eslint-plugin" "13.1.0" - "@angular-eslint/eslint-plugin-template" "13.1.0" - ignore "5.2.0" + "@angular-eslint/eslint-plugin" "15.2.1" + "@angular-eslint/eslint-plugin-template" "15.2.1" + ignore "5.2.4" strip-json-comments "3.1.1" tmp "0.2.1" -"@angular-eslint/template-parser@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-13.1.0.tgz" - integrity sha512-gKV+kms+kYm1HdToH3j4HL1RrjvMHscVkhwjoV1WbJColnfDivVAZ6/5/J92/A/8r7vJptQkftsbiaGKDyg47w== +"@angular-eslint/template-parser@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-15.2.1.tgz" + integrity sha512-ViCi79gC2aKJecmYLkOT+QlT5WMRNXeYz0Dr9Pr8qXzIbY0oAWE7nOT5jkXwQ9oUk+ybtGCWHma5JVJWVJsIog== dependencies: - "@angular-eslint/bundled-angular-compiler" "13.1.0" - eslint-scope "^5.1.0" + "@angular-eslint/bundled-angular-compiler" "15.2.1" + eslint-scope "^7.0.0" -"@angular-eslint/utils@13.1.0": - version "13.1.0" - resolved "https://registry.npmjs.org/@angular-eslint/utils/-/utils-13.1.0.tgz" - integrity sha512-iLmYMXNk+1sFMIlYXN8/Z5UcNAOno38v10lzo4bMjCpzXKkMa0O2b+4qi+469iUJAU6RAZ5weUL+S2Wtlr0ooA== +"@angular-eslint/utils@15.2.1": + version "15.2.1" + resolved "https://registry.npmjs.org/@angular-eslint/utils/-/utils-15.2.1.tgz" + integrity sha512-++FneAJHxJqcSu0igVN6uOkSoHxlzgLoMBswuovYJy3UKwm33/T6WFku8++753Ca/JucIoR1gdUfO7SoSspMDg== dependencies: - "@angular-eslint/bundled-angular-compiler" "13.1.0" - "@typescript-eslint/experimental-utils" "5.11.0" + "@angular-eslint/bundled-angular-compiler" "15.2.1" + "@typescript-eslint/utils" "5.48.2" "@angular/animations@^15.2.6", "@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@15.2.6": version "15.2.6" @@ -349,7 +349,7 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@^15.2.5", "@angular/cli@>= 13.0.0 < 14.0.0", "@angular/cli@>=12": +"@angular/cli@^15.2.5", "@angular/cli@>= 15.0.0 < 16.0.0", "@angular/cli@>=12": version "15.2.5" resolved "https://registry.npmjs.org/@angular/cli/-/cli-15.2.5.tgz" integrity sha512-TmkkeJkdfDkC6b2SNQcLlr1rsl2anc5rrrY3gawOVXYXBExMxAi2SNJsHZzUXfiitW52aZkAyajF1VFazs8PRw== @@ -1553,15 +1553,7 @@ resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime-corejs3@^7.10.2": - version "7.21.0" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz" - integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== - dependencies: - core-js-pure "^3.25.1" - regenerator-runtime "^0.13.11" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@>=7", "@babel/runtime@7.17.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@>=7", "@babel/runtime@7.17.2": version "7.17.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -2279,62 +2271,6 @@ read-package-json-fast "^3.0.0" which "^3.0.0" -"@nrwl/cli@*", "@nrwl/cli@15.9.2": - version "15.9.2" - resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.2.tgz" - integrity sha512-QoCmyrcGakHAYTJaNBbOerRQAmqJHMYGCdqtQidV+aP9p1Dy33XxDELfhd+IYmGqngutXuEWChNpWNhPloLnoA== - dependencies: - nx "15.9.2" - -"@nrwl/devkit@13.1.3": - version "13.1.3" - resolved "https://registry.npmjs.org/@nrwl/devkit/-/devkit-13.1.3.tgz" - integrity sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA== - dependencies: - "@nrwl/tao" "13.1.3" - ejs "^3.1.5" - ignore "^5.0.4" - rxjs "^6.5.4" - semver "7.3.4" - tslib "^2.0.0" - -"@nrwl/nx-darwin-x64@15.9.2": - version "15.9.2" - resolved "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.2.tgz" - integrity sha512-qHfdluHlPzV0UHOwj1ZJ+qNEhzfLGiBuy1cOth4BSzDlvMnkuqBWoprfaXoztzYcus2NSILY1/7b3Jw4DAWmMw== - -"@nrwl/tao@13.1.3": - version "13.1.3" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-13.1.3.tgz" - integrity sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA== - dependencies: - chalk "4.1.0" - enquirer "~2.3.6" - fs-extra "^9.1.0" - jsonc-parser "3.0.0" - nx "13.1.3" - rxjs "^6.5.4" - rxjs-for-await "0.0.2" - semver "7.3.4" - tmp "~0.2.1" - tslib "^2.0.0" - yargs-parser "20.0.0" - -"@nrwl/tao@15.9.2": - version "15.9.2" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.2.tgz" - integrity sha512-+LqNC37w9c6q6Ukdpf0z0tt1PQFNi4gwhHpJvkYQiKRETHjyrrlyqTNEPEyA7PI62RuYC6VrpVw2gzI7ufqZEA== - dependencies: - nx "15.9.2" - -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" @@ -2751,45 +2687,39 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.11.0.tgz" - integrity sha512-HJh33bgzXe6jGRocOj4FmefD7hRY4itgjzOrSs3JPrTNXsX7j5+nQPciAUj/1nZtwo2kAc3C75jZO+T23gzSGw== +"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@^5.43.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz" + integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== dependencies: - "@typescript-eslint/scope-manager" "5.11.0" - "@typescript-eslint/type-utils" "5.11.0" - "@typescript-eslint/utils" "5.11.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.2.0" - semver "^7.3.5" + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/type-utils" "5.58.0" + "@typescript-eslint/utils" "5.58.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.11.0.tgz" - integrity sha512-EPvC/bU2n1LKtzKWP1AjGWkp7r8tJ8giVlZHIODo6q7SAd6J+/9vjtEKHK2G/Qp+D2IGPsQge+oadDR3CZcFtQ== +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.43.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz" + integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== dependencies: - "@typescript-eslint/utils" "5.11.0" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + debug "^4.3.4" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.11.0.tgz" - integrity sha512-x0DCjetHZYBRovJdr3U0zG9OOdNXUaFLJ82ehr1AlkArljJuwEsgnud+Q7umlGDFLFrs8tU8ybQDFocp/eX8mQ== +"@typescript-eslint/scope-manager@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz" + integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== dependencies: - "@typescript-eslint/scope-manager" "5.11.0" - "@typescript-eslint/types" "5.11.0" - "@typescript-eslint/typescript-estree" "5.11.0" - debug "^4.3.2" - -"@typescript-eslint/scope-manager@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.11.0.tgz" - integrity sha512-z+K4LlahDFVMww20t/0zcA7gq/NgOawaLuxgqGRVKS0PiZlCTIUtX0EJbC0BK1JtR4CelmkPK67zuCgpdlF4EA== - dependencies: - "@typescript-eslint/types" "5.11.0" - "@typescript-eslint/visitor-keys" "5.11.0" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" "@typescript-eslint/scope-manager@5.58.0": version "5.58.0" @@ -2799,36 +2729,47 @@ "@typescript-eslint/types" "5.58.0" "@typescript-eslint/visitor-keys" "5.58.0" -"@typescript-eslint/type-utils@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.11.0.tgz" - integrity sha512-wDqdsYO6ofLaD4DsGZ0jGwxp4HrzD2YKulpEZXmgN3xo4BHJwf7kq49JTRpV0Gx6bxkSUmc9s0EIK1xPbFFpIA== +"@typescript-eslint/type-utils@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz" + integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== dependencies: - "@typescript-eslint/utils" "5.11.0" - debug "^4.3.2" + "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/utils" "5.48.2" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.11.0.tgz" - integrity sha512-cxgBFGSRCoBEhvSVLkKw39+kMzUKHlJGVwwMbPcTZX3qEhuXhrjwaZXWMxVfxDgyMm+b5Q5b29Llo2yow8Y7xQ== +"@typescript-eslint/type-utils@5.58.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz" + integrity sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w== + dependencies: + "@typescript-eslint/typescript-estree" "5.58.0" + "@typescript-eslint/utils" "5.58.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.2.tgz" + integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== "@typescript-eslint/types@5.58.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz" integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== -"@typescript-eslint/typescript-estree@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.11.0.tgz" - integrity sha512-yVH9hKIv3ZN3lw8m/Jy5I4oXO4ZBMqijcXCdA4mY8ull6TPTAoQnKKrcZ0HDXg7Bsl0Unwwx7jcXMuNZc0m4lg== +"@typescript-eslint/typescript-estree@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz" + integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== dependencies: - "@typescript-eslint/types" "5.11.0" - "@typescript-eslint/visitor-keys" "5.11.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/typescript-estree@5.58.0": @@ -2844,7 +2785,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.57.0": +"@typescript-eslint/utils@^5.57.0", "@typescript-eslint/utils@5.58.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== @@ -2858,25 +2799,27 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/utils@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.11.0.tgz" - integrity sha512-g2I480tFE1iYRDyMhxPAtLQ9HAn0jjBtipgTCZmd9I9s11OV8CTsG+YfFciuNDcHqm4csbAgC2aVZCHzLxMSUw== +"@typescript-eslint/utils@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz" + integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.11.0" - "@typescript-eslint/types" "5.11.0" - "@typescript-eslint/typescript-estree" "5.11.0" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.11.0.tgz" - integrity sha512-E8w/vJReMGuloGxJDkpPlGwhxocxOpSVgSvjiLO5IxZPmxZF30weOeJYyPSEACwM+X4NziYS9q+WkN/2DHYQwA== +"@typescript-eslint/visitor-keys@5.48.2": + version "5.48.2" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz" + integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== dependencies: - "@typescript-eslint/types" "5.11.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.48.2" + eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@5.58.0": version "5.58.0" @@ -3044,26 +2987,11 @@ resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -"@yarnpkg/lockfile@^1.1.0", "@yarnpkg/lockfile@1.1.0": +"@yarnpkg/lockfile@1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -"@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.42" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.42.tgz" - integrity sha512-eW9Mbegmb5bJjwawJM9ghjUjUqciNMhC6L7XrQPF/clXS5bbP66MstsgCT5hy9VlfUh/CfBT+0Wucf531dMjHA== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" @@ -3349,13 +3277,12 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" + deep-equal "^2.0.5" array-buffer-byte-length@^1.0.0: version "1.0.0" @@ -3507,15 +3434,6 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@^1.0.0: - version "1.3.5" - resolved "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz" - integrity sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axios@0.21.4: version "0.21.4" resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" @@ -3523,10 +3441,12 @@ axios@0.21.4: dependencies: follow-redirects "^1.14.0" -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== +axobject-query@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + dependencies: + deep-equal "^2.0.5" babel-loader@8.2.5: version "8.2.5" @@ -3647,7 +3567,7 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.0.3, bl@^4.1.0: +bl@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4049,14 +3969,6 @@ chalk@~4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" @@ -4149,7 +4061,7 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^3.1.0, cli-cursor@3.1.0: +cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== @@ -4168,11 +4080,6 @@ cli-spinners@^2.5.0: resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.8.0.tgz" integrity sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ== -cli-spinners@2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" @@ -4491,11 +4398,6 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.25.1: dependencies: browserslist "^4.21.5" -core-js-pure@^3.25.1: - version "3.30.0" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.0.tgz" - integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== - core-js@^3.7.0, core-js@^3.8.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" @@ -4845,6 +4747,29 @@ decimal.js@^10.2.1, decimal.js@^10.3.1, decimal.js@^10.4.2: resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +deep-equal@^2.0.5: + version "2.2.0" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz" + integrity sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw== + dependencies: + call-bind "^1.0.2" + es-get-iterator "^1.1.2" + get-intrinsic "^1.1.3" + is-arguments "^1.1.1" + is-array-buffer "^3.0.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + deep-freeze@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz" @@ -5093,12 +5018,7 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.1" -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.1, duplexer@^0.1.2: +duplexer@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -5130,7 +5050,7 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.5, ejs@^3.1.8: +ejs@^3.1.8: version "3.1.9" resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== @@ -5171,7 +5091,7 @@ encoding@^0.1.0, encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5218,7 +5138,7 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3", enquirer@~2.3.6: +enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -5321,6 +5241,21 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" +es-get-iterator@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" @@ -5541,7 +5476,7 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@^5.1.0, eslint-scope@^5.1.1, eslint-scope@5.1.1: +eslint-scope@^5.1.1, eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5549,6 +5484,14 @@ eslint-scope@^5.1.0, eslint-scope@^5.1.1, eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" @@ -5569,12 +5512,12 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: version "3.4.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.2.0, eslint@>=2, eslint@>=5: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.20.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.28.0, eslint@>=2, eslint@>=5: version "8.38.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz" integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== @@ -5825,17 +5768,6 @@ fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - fast-json-patch@^3.0.0-1: version "3.1.1" resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz" @@ -5882,7 +5814,7 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figures@^3.0.0, figures@^3.2.0, figures@3.2.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -5987,17 +5919,12 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - flatted@^3.1.0, flatted@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9, follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -6056,20 +5983,6 @@ fresh@^0.5.2, fresh@0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^11.1.0: - version "11.1.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -6147,11 +6060,6 @@ function.prototype.name@^1.1.5: es-abstract "^1.19.0" functions-have-names "^1.2.2" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" @@ -6312,18 +6220,6 @@ glob@^9.3.1: minipass "^4.2.4" path-scurry "^1.6.1" -glob@7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" @@ -6373,18 +6269,6 @@ globby@^11.0.1: merge2 "^1.4.1" slash "^3.0.0" -globby@^11.0.4: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" @@ -6786,16 +6670,11 @@ ignore-walk@^6.0.0: dependencies: minimatch "^7.4.2" -ignore@^5.0.4, ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.2.0, ignore@5.2.4: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -ignore@5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - image-size@~0.5.0: version "0.5.5" resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" @@ -6896,7 +6775,7 @@ inquirer@8.2.4: through "^2.3.6" wrap-ansi "^7.0.0" -internal-slot@^1.0.5: +internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -6937,6 +6816,14 @@ ipaddr.js@1.9.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" @@ -6997,7 +6884,7 @@ is-core-module@^2.11.0, is-core-module@^2.8.1, is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -7049,6 +6936,11 @@ is-lambda@^1.0.1: resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" @@ -7108,6 +7000,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" @@ -7155,6 +7052,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" @@ -7162,6 +7064,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + is-what@^3.14.1: version "3.14.1" resolved "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz" @@ -7179,6 +7089,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" @@ -7317,14 +7232,6 @@ js-sdsl@^4.1.4: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.10.0: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" @@ -7333,7 +7240,7 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0, js-yaml@4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -7829,11 +7736,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lines-and-columns@~2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== - linkify-it@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz" @@ -8294,13 +8196,6 @@ minimatch@^8.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -8519,6 +8414,11 @@ nanoid@^3.3.4: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -8602,7 +8502,7 @@ nice-napi@^1.0.2: node-addon-api "^3.0.0" node-gyp-build "^4.2.2" -node-addon-api@^3.0.0, node-addon-api@^3.2.1: +node-addon-api@^3.0.0: version "3.2.1" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== @@ -8619,7 +8519,7 @@ node-forge@^1: resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: +node-gyp-build@^4.2.2: version "4.6.0" resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== @@ -8793,64 +8693,6 @@ nwsapi@^2.2.0, nwsapi@^2.2.2: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.3.tgz" integrity sha512-jscxIO4/VKScHlbmFBdV1Z6LXnLO+ZR4VMtypudUdfwtKxUN3TQcNFIHLwKtrUbDyHN4/GycY9+oRGZ2XMXYPw== -nx@13.1.3: - version "13.1.3" - resolved "https://registry.npmjs.org/nx/-/nx-13.1.3.tgz" - integrity sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw== - dependencies: - "@nrwl/cli" "*" - -nx@15.9.2: - version "15.9.2" - resolved "https://registry.npmjs.org/nx/-/nx-15.9.2.tgz" - integrity sha512-wtcs+wsuplSckvgk+bV+/XuGlo+sVWzSG0RpgWBjQYeqA3QsVFEAPVY66Z5cSoukDbTV77ddcAjEw+Rz8oOR1A== - dependencies: - "@nrwl/cli" "15.9.2" - "@nrwl/tao" "15.9.2" - "@parcel/watcher" "2.0.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "^3.0.0-rc.18" - "@zkochan/js-yaml" "0.0.6" - axios "^1.0.0" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^11.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - lines-and-columns "~2.0.3" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nrwl/nx-darwin-arm64" "15.9.2" - "@nrwl/nx-darwin-x64" "15.9.2" - "@nrwl/nx-linux-arm-gnueabihf" "15.9.2" - "@nrwl/nx-linux-arm64-gnu" "15.9.2" - "@nrwl/nx-linux-arm64-musl" "15.9.2" - "@nrwl/nx-linux-x64-gnu" "15.9.2" - "@nrwl/nx-linux-x64-musl" "15.9.2" - "@nrwl/nx-win32-arm64-msvc" "15.9.2" - "@nrwl/nx-win32-x64-msvc" "15.9.2" - object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -8861,6 +8703,14 @@ object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" @@ -8928,7 +8778,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9, open@^8.4.0, open@8.4.0: +open@^8.0.9, open@8.4.0: version "8.4.0" resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== @@ -9816,11 +9666,6 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz" @@ -10166,7 +10011,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -10261,11 +10106,6 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" @@ -10432,11 +10272,6 @@ rx@4.1.0: resolved "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz" integrity sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug== -rxjs-for-await@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz" - integrity sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw== - rxjs-report-usage@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/rxjs-report-usage/-/rxjs-report-usage-1.0.6.tgz" @@ -10462,20 +10297,13 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -rxjs@^6.0.0, "rxjs@^6.5.3 || ^7.4.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: +"rxjs@^6.5.3 || ^7.4.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: version "7.8.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" -rxjs@^6.5.4: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@^6.5.5, rxjs@~6.6.0, rxjs@6.6.7: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" @@ -10730,13 +10558,6 @@ semver@~7.0.0: resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.4: - version "7.3.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - semver@7.3.7: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" @@ -11226,6 +11047,13 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + stream-throttle@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz" @@ -11322,15 +11150,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1. resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - stylus-loader@7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz" @@ -11399,17 +11218,6 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.1.13" resolved "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz" @@ -11487,7 +11295,7 @@ throttleit@^1.0.0: resolved "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz" integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== -through@^2.3.4, through@^2.3.6, through@^2.3.8: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -11651,15 +11459,6 @@ tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: minimist "^1.2.6" strip-bom "^3.0.0" -tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" @@ -11670,7 +11469,7 @@ tslib@^1.9.0: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@2.5.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -11970,11 +11769,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - valid-data-url@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" @@ -12438,6 +12232,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" @@ -12591,16 +12395,11 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1, yargs-parser@21.1.1: +yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-parser@20.0.0: - version "20.0.0" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz" - integrity sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA== - yargs@^16.1.1: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" @@ -12614,7 +12413,7 @@ yargs@^16.1.1: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.2.1, yargs@^17.3.1, yargs@^17.6.2: +yargs@^17.2.1, yargs@^17.3.1: version "17.7.1" resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== From 6deba3182867ecab1f0c6bd823643a50234619ae Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 11:42:16 +0200 Subject: [PATCH 482/833] 101108: Automatic ng update @ngtools/webpack@15 --- package.json | 4 ++-- yarn.lock | 21 ++++++++------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index dd8b9c0827..04ed4b1a30 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "@cypress/schematic": "^1.5.0", "@fortawesome/fontawesome-free": "^6.2.1", "@ngrx/store-devtools": "^13.0.2", - "@ngtools/webpack": "^13.2.6", + "@ngtools/webpack": "^15.2.5", "@nguniversal/builders": "^15.2.0", "@types/deep-freeze": "0.1.2", "@types/ejs": "^3.1.1", @@ -203,4 +203,4 @@ "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.5.0" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 0d9a7242ed..5e40456156 100644 --- a/yarn.lock +++ b/yarn.lock @@ -380,7 +380,7 @@ dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^13.0.0", "@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@14.3.0", "@angular/compiler-cli@15.2.6": +"@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@14.3.0", "@angular/compiler-cli@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" integrity sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw== @@ -2094,21 +2094,16 @@ dependencies: tslib "^2.0.0" -"@ngtools/webpack@^13.2.6": - version "13.3.11" - resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.11.tgz" - integrity sha512-gB33hTbc/RJmHyIgSUYj8ErPazhYYm7yfapOnvwHdYhCjrj1TKkR1ierOlhJtpfBYUQg6FChdl2YpyIQNPjWMA== +"@ngtools/webpack@^15.2.5", "@ngtools/webpack@15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" + integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== "@ngtools/webpack@14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.11.tgz" integrity sha512-4enbLFAp98uTgWYF6OFceQqLcfv2/0brIrNN4iWT9xe/Mh3zdCt+eH42zvNRsqo9WXNWRSLvnx8I924p83LNlw== -"@ngtools/webpack@15.2.5": - version "15.2.5" - resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" - integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== - "@nguniversal/builders@^15.2.0": version "15.2.0" resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-15.2.0.tgz" @@ -11576,7 +11571,7 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.4.3 <4.7", "typescript@>=4.6.2 <4.9", "typescript@>=4.8.2 <5.0", typescript@~4.8.4: +typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.6.2 <4.9", "typescript@>=4.8.2 <5.0", typescript@~4.8.4: version "4.8.4" resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== @@ -12090,7 +12085,7 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=5, "webpack@4.x.x || 5.x.x": +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.54.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=5, "webpack@4.x.x || 5.x.x": version "5.78.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== @@ -12120,7 +12115,7 @@ webpack-subresource-integrity@5.1.0: watchpack "^2.4.0" webpack-sources "^3.2.3" -webpack@^5.54.0, webpack@>=2, webpack@5.76.1: +webpack@>=2, webpack@5.76.1: version "5.76.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== From d705de1b4fa5501fbeecf60c3cc8a304bbbe65de Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 11:58:10 +0200 Subject: [PATCH 483/833] 101108: Automatic ng update ngx-ui-switch@14 --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 04ed4b1a30..acc59b6ecb 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "ngx-infinite-scroll": "^10.0.1", "ngx-pagination": "5.0.0", "ngx-sortablejs": "^11.1.0", - "ngx-ui-switch": "^13.0.2", + "ngx-ui-switch": "^14.0.3", "nouislider": "^14.6.3", "pem": "1.14.4", "prop-types": "^15.7.2", diff --git a/yarn.lock b/yarn.lock index 5e40456156..e2f2808f01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -333,7 +333,7 @@ "@angular-eslint/bundled-angular-compiler" "15.2.1" "@typescript-eslint/utils" "5.48.2" -"@angular/animations@^15.2.6", "@angular/animations@>=13.0.0 <14", "@angular/animations@>=5.0.0 <14.0.0", "@angular/animations@15.2.6": +"@angular/animations@^15.2.6", "@angular/animations@>=10.0.0", "@angular/animations@>=13.0.0 <14", "@angular/animations@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/animations/-/animations-15.2.6.tgz" integrity sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ== @@ -373,7 +373,7 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@>=5.0.0 <14.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== @@ -410,7 +410,7 @@ dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@>=5.0.0 <14.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== @@ -424,7 +424,7 @@ dependencies: tslib "^2.3.0" -"@angular/forms@^13.0.0", "@angular/forms@^15.2.6", "@angular/forms@>=10.0.0", "@angular/forms@>=5.0.0 <14.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/forms@^13.0.0", "@angular/forms@^15.2.6", "@angular/forms@>=10.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/forms/-/forms-15.2.6.tgz" integrity sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw== @@ -461,7 +461,7 @@ dependencies: tslib "^2.3.0" -"@angular/platform-browser@^15.2.6", "@angular/platform-browser@>=5.0.0 <14.0.0", "@angular/platform-browser@15.2.6", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/platform-browser@^15.2.6", "@angular/platform-browser@>=10.0.0", "@angular/platform-browser@15.2.6", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.6.tgz" integrity sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA== @@ -8482,10 +8482,10 @@ ngx-sortablejs@^11.1.0: dependencies: tslib "^2.0.0" -ngx-ui-switch@^13.0.2: - version "13.0.2" - resolved "https://registry.npmjs.org/ngx-ui-switch/-/ngx-ui-switch-13.0.2.tgz" - integrity sha512-dhRAQZmrSH8l8VVtce/jD0PIwQjagSYPSln9I6A6gda1HIhvU/M6bqOVJLComWX32aVIBewdJP625wp/S3FdTA== +ngx-ui-switch@^14.0.3: + version "14.0.3" + resolved "https://registry.npmjs.org/ngx-ui-switch/-/ngx-ui-switch-14.0.3.tgz" + integrity sha512-SZ8ZnTCuNJgNWuY3/mOG3TdsRUNPCX3vGdCKKx1ZHVMTUynerJQlTWck2JrYlnrexNnd7wy4P10jDvdtDwoYeg== dependencies: tslib "^2.3.0" From 29fe2ef954381c2fe18a0c665de8476d2dc5b206 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 12:02:31 +0200 Subject: [PATCH 484/833] 101108: Automatic ng update @nguniversal/express-engine@14 --- package.json | 2 +- yarn.lock | 62 +++++++++++++++++++++++----------------------------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index acc59b6ecb..fdbc49ce96 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@ngrx/effects": "^13.0.2", "@ngrx/router-store": "^13.0.2", "@ngrx/store": "^13.0.2", - "@nguniversal/express-engine": "^13.0.2", + "@nguniversal/express-engine": "^14.2.3", "@ngx-translate/core": "^13.0.0", "@nicky-lenaers/ngx-scroll-to": "^13.0.0", "@types/grecaptcha": "^3.0.4", diff --git a/yarn.lock b/yarn.lock index e2f2808f01..1209016bc5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -373,7 +373,7 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^13.3.4", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^14.2.0", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== @@ -410,7 +410,7 @@ dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^13.3.4", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^14.2.0", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== @@ -468,7 +468,7 @@ dependencies: tslib "^2.3.0" -"@angular/platform-server@^13.3.4", "@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": +"@angular/platform-server@^14.2.0", "@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== @@ -2121,13 +2121,13 @@ rxjs "^6.5.5" tree-kill "^1.2.2" -"@nguniversal/common@13.1.1": - version "13.1.1" - resolved "https://registry.npmjs.org/@nguniversal/common/-/common-13.1.1.tgz" - integrity sha512-DoAPA7+kUz+qMgCTUtRPFcMGY0zz8OSkOTZnxqO5sUYntD6mCEQImHU0WF4ud88j71o0Hv+AISJD1evAAANCdw== +"@nguniversal/common@14.2.3": + version "14.2.3" + resolved "https://registry.npmjs.org/@nguniversal/common/-/common-14.2.3.tgz" + integrity sha512-FWoZY+DZCNw24tNnnWkgTpNAlshkfiaxiT7V+fx2WFpY0LNXLWk45+hWhl4+wFEknOXr/DT/oU1m/RjR6FgXZQ== dependencies: critters "0.0.16" - jsdom "19.0.0" + jsdom "20.0.0" tslib "^2.3.0" "@nguniversal/common@15.2.0": @@ -2139,12 +2139,12 @@ jsdom "21.1.0" tslib "^2.3.0" -"@nguniversal/express-engine@^13.0.2": - version "13.1.1" - resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-13.1.1.tgz" - integrity sha512-NdiBP0IRbPrNYEMLy3a6os2mNgRNE84tsMn+mV2uF4wv1JNs3YyoXcucWvhgHdODbDtc6z4CGn8t/6KagRqmvA== +"@nguniversal/express-engine@^14.2.3": + version "14.2.3" + resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-14.2.3.tgz" + integrity sha512-8G60LgQViz7caJbmL5f0Cw3mUtchVOiLUf9q1PKKhPVYMv9PVs1roKWuq1yAd4ZVMztBo93gyPt8vQGOo+C9WA== dependencies: - "@nguniversal/common" "13.1.1" + "@nguniversal/common" "14.2.3" tslib "^2.3.0" "@ngx-translate/core@^13.0.0": @@ -4659,7 +4659,7 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -data-urls@^3.0.1, data-urls@^3.0.2: +data-urls@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== @@ -7285,28 +7285,28 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@19.0.0: - version "19.0.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz" - integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== +jsdom@20.0.0: + version "20.0.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz" + integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== dependencies: - abab "^2.0.5" - acorn "^8.5.0" + abab "^2.0.6" + acorn "^8.7.1" acorn-globals "^6.0.0" cssom "^0.5.0" cssstyle "^2.3.0" - data-urls "^3.0.1" + data-urls "^3.0.2" decimal.js "^10.3.1" domexception "^4.0.0" escodegen "^2.0.0" form-data "^4.0.0" html-encoding-sniffer "^3.0.0" http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" + parse5 "^7.0.0" + saxes "^6.0.0" symbol-tree "^3.2.4" tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" @@ -7314,8 +7314,8 @@ jsdom@19.0.0: webidl-conversions "^7.0.0" whatwg-encoding "^2.0.0" whatwg-mimetype "^3.0.0" - whatwg-url "^10.0.0" - ws "^8.2.3" + whatwg-url "^11.0.0" + ws "^8.8.0" xml-name-validator "^4.0.0" jsdom@21.1.0: @@ -12183,14 +12183,6 @@ whatwg-mimetype@^3.0.0: resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== -whatwg-url@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz" - integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-url@^11.0.0: version "11.0.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" @@ -12325,7 +12317,7 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.11.0, ws@^8.13.0, ws@^8.2.3, ws@^8.4.2: +ws@^8.11.0, ws@^8.13.0, ws@^8.4.2, ws@^8.8.0: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== From 83acd1f4b4293b76b1600a2604263d9c15b69539 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 12:04:32 +0200 Subject: [PATCH 485/833] 101108: Automatic ng update @nguniversal/express-engine@15 --- package.json | 2 +- yarn.lock | 69 ++++++++-------------------------------------------- 2 files changed, 11 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index fdbc49ce96..78ea8827ec 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@ngrx/effects": "^13.0.2", "@ngrx/router-store": "^13.0.2", "@ngrx/store": "^13.0.2", - "@nguniversal/express-engine": "^14.2.3", + "@nguniversal/express-engine": "^15.2.0", "@ngx-translate/core": "^13.0.0", "@nicky-lenaers/ngx-scroll-to": "^13.0.0", "@types/grecaptcha": "^3.0.4", diff --git a/yarn.lock b/yarn.lock index 1209016bc5..29e2a58e90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -373,7 +373,7 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^14.2.0", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== @@ -410,7 +410,7 @@ dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^14.2.0", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== @@ -468,7 +468,7 @@ dependencies: tslib "^2.3.0" -"@angular/platform-server@^14.2.0", "@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": +"@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== @@ -2121,15 +2121,6 @@ rxjs "^6.5.5" tree-kill "^1.2.2" -"@nguniversal/common@14.2.3": - version "14.2.3" - resolved "https://registry.npmjs.org/@nguniversal/common/-/common-14.2.3.tgz" - integrity sha512-FWoZY+DZCNw24tNnnWkgTpNAlshkfiaxiT7V+fx2WFpY0LNXLWk45+hWhl4+wFEknOXr/DT/oU1m/RjR6FgXZQ== - dependencies: - critters "0.0.16" - jsdom "20.0.0" - tslib "^2.3.0" - "@nguniversal/common@15.2.0": version "15.2.0" resolved "https://registry.npmjs.org/@nguniversal/common/-/common-15.2.0.tgz" @@ -2139,12 +2130,12 @@ jsdom "21.1.0" tslib "^2.3.0" -"@nguniversal/express-engine@^14.2.3": - version "14.2.3" - resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-14.2.3.tgz" - integrity sha512-8G60LgQViz7caJbmL5f0Cw3mUtchVOiLUf9q1PKKhPVYMv9PVs1roKWuq1yAd4ZVMztBo93gyPt8vQGOo+C9WA== +"@nguniversal/express-engine@^15.2.0": + version "15.2.0" + resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-15.2.0.tgz" + integrity sha512-WDHx8iouuAlxaYQ/Sn3Qebv8ZH20O73yt9Z7xJvPM/8uPvWn/zk3wuCIWGPxars7KdkUa/NbDkRmgTlwqUPA3A== dependencies: - "@nguniversal/common" "14.2.3" + "@nguniversal/common" "15.2.0" tslib "^2.3.0" "@ngx-translate/core@^13.0.0": @@ -4737,7 +4728,7 @@ debug@4.3.2: dependencies: ms "2.1.2" -decimal.js@^10.2.1, decimal.js@^10.3.1, decimal.js@^10.4.2: +decimal.js@^10.2.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -7285,39 +7276,6 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@20.0.0: - version "20.0.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz" - integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== - dependencies: - abab "^2.0.6" - acorn "^8.7.1" - acorn-globals "^6.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.3.1" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "^7.0.0" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.8.0" - xml-name-validator "^4.0.0" - jsdom@21.1.0: version "21.1.0" resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" @@ -11822,13 +11780,6 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -w3c-xmlserializer@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz" - integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== - dependencies: - xml-name-validator "^4.0.0" - w3c-xmlserializer@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" @@ -12317,7 +12268,7 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.11.0, ws@^8.13.0, ws@^8.4.2, ws@^8.8.0: +ws@^8.11.0, ws@^8.13.0, ws@^8.4.2: version "8.13.0" resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== From 6d855caa33987fbc2344d507986fb4d248d130e1 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 12:07:38 +0200 Subject: [PATCH 486/833] 101108: Automatic ng update @ngrx/router-store@15 --- package.json | 8 ++++---- yarn.lock | 36 ++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 78ea8827ec..dbbf30cd26 100644 --- a/package.json +++ b/package.json @@ -73,9 +73,9 @@ "@ng-bootstrap/ng-bootstrap": "^11.0.0", "@ng-dynamic-forms/core": "^15.0.0", "@ng-dynamic-forms/ui-ng-bootstrap": "^15.0.0", - "@ngrx/effects": "^13.0.2", - "@ngrx/router-store": "^13.0.2", - "@ngrx/store": "^13.0.2", + "@ngrx/effects": "^15.4.0", + "@ngrx/router-store": "^15.4.0", + "@ngrx/store": "^15.4.0", "@nguniversal/express-engine": "^15.2.0", "@ngx-translate/core": "^13.0.0", "@nicky-lenaers/ngx-scroll-to": "^13.0.0", @@ -146,7 +146,7 @@ "@angular/language-service": "^15.2.6", "@cypress/schematic": "^1.5.0", "@fortawesome/fontawesome-free": "^6.2.1", - "@ngrx/store-devtools": "^13.0.2", + "@ngrx/store-devtools": "^15.4.0", "@ngtools/webpack": "^15.2.5", "@nguniversal/builders": "^15.2.0", "@types/deep-freeze": "0.1.2", diff --git a/yarn.lock b/yarn.lock index 29e2a58e90..3f5f4de170 100644 --- a/yarn.lock +++ b/yarn.lock @@ -477,7 +477,7 @@ tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^13.0.0", "@angular/router@^15.2.6": +"@angular/router@^15.0.0", "@angular/router@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/router/-/router-15.2.6.tgz" integrity sha512-yB9uc9Xi9N0dErsugleywBA1KYG+GQ9WWSlri34oe2VsCqZazImn71n4wKPtrm2Xiy/mI23wJcr+jiCAtzp49Q== @@ -2066,31 +2066,31 @@ dependencies: tslib "^2.0.0" -"@ngrx/effects@^13.0.2": - version "13.2.0" - resolved "https://registry.npmjs.org/@ngrx/effects/-/effects-13.2.0.tgz" - integrity sha512-HmWggpl3xGQFfUzON/uel5jSyUWsrGZsR5qR/oFLGjPRWzwKfdHrl0OcBl5IhFgFxT74cAi9F4JTICUytGRbFA== +"@ngrx/effects@^15.4.0": + version "15.4.0" + resolved "https://registry.npmjs.org/@ngrx/effects/-/effects-15.4.0.tgz" + integrity sha512-/8gHhOM9aeGaw8OG2LLwi4I4p84xzG0EU9TqWrvQcW74wn8sFZONjLvUte5YOzJ5502PPFFrfXSOc+lHnVAJUA== dependencies: tslib "^2.0.0" -"@ngrx/router-store@^13.0.2": - version "13.2.0" - resolved "https://registry.npmjs.org/@ngrx/router-store/-/router-store-13.2.0.tgz" - integrity sha512-ojHxsGsHljYWiqv/OUQHFLb4ZNvmsBlF+CHGZ7vCwLYJ2d9TB2y5nOezfaZ1L46MLUp+uM3FD3fpnIFwXYsTNw== +"@ngrx/router-store@^15.4.0": + version "15.4.0" + resolved "https://registry.npmjs.org/@ngrx/router-store/-/router-store-15.4.0.tgz" + integrity sha512-uc8gx+SMr2gyly+WSBmGnpHTPsMVhenUG6skH3Qk67hrwdVG3SABjw3qdP4GibbfwwajMQ67sLaLY8PQZ5Sb2g== dependencies: tslib "^2.0.0" -"@ngrx/store-devtools@^13.0.2": - version "13.2.0" - resolved "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-13.2.0.tgz" - integrity sha512-k1NifkR/4OjbjAxauVZODCsgs2owMJXvEX2XoTWth7zscbHE8L3pLd0k1ox5pMPUEqWIptWTaJDzYqnQSoJaaw== +"@ngrx/store-devtools@^15.4.0": + version "15.4.0" + resolved "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-15.4.0.tgz" + integrity sha512-AqWRprSyS3u/vZlpsBOPMW1/0TZS2LE13/KpZedEY+RMCW+mi53esqgrdNGOB3Wr4vrI82Ar9fgaIm4TQO6LPg== dependencies: tslib "^2.0.0" -"@ngrx/store@^13.0.2", "@ngrx/store@13.2.0": - version "13.2.0" - resolved "https://registry.npmjs.org/@ngrx/store/-/store-13.2.0.tgz" - integrity sha512-3wlGMkfe0EXsiS6E6W0wCksuGapa5Z6JVFvKQMHFpXZ3XeixXKlULnemlcdMT7Yrnry+CGOtRHqkmKxLoQzhTw== +"@ngrx/store@^15.4.0", "@ngrx/store@15.4.0": + version "15.4.0" + resolved "https://registry.npmjs.org/@ngrx/store/-/store-15.4.0.tgz" + integrity sha512-OvCuNBHL8mAUnRTS6QSFm+IunspsYNu2cCwDovBNn7EGhxRuGihBeNoX47jCqWPHBFtokj4BlatDfpJ/yCh4xQ== dependencies: tslib "^2.0.0" @@ -10250,7 +10250,7 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -"rxjs@^6.5.3 || ^7.4.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: +"rxjs@^6.5.3 || ^7.4.0", "rxjs@^6.5.3 || ^7.5.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: version "7.8.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== From 585ef372435750077e48e1ea13d526bd2c05f12e Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 12:17:15 +0200 Subject: [PATCH 487/833] 101108: install fixes --- yarn.lock | 2535 +++++++++++++++++++++++++++-------------------------- 1 file changed, 1307 insertions(+), 1228 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3f5f4de170..ac0b11b001 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,14 +7,6 @@ resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz" integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== -"@ampproject/remapping@^2.1.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@ampproject/remapping@2.2.0": version "2.2.0" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" @@ -23,6 +15,14 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@ampproject/remapping@^2.1.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@angular-builders/custom-webpack@~14.1.0": version "14.1.0" resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-14.1.0.tgz" @@ -36,15 +36,7 @@ tsconfig-paths "^3.9.0" webpack-merge "^5.7.3" -"@angular-devkit/architect@^0.1202.10": - version "0.1202.18" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.18.tgz" - integrity sha512-C4ASKe+xBjl91MJyHDLt3z7ICPF9FU6B0CeJ1phwrlSHK9lmFG99WGxEj/Tc82+vHyPhajqS5XJ38KyVAPBGzA== - dependencies: - "@angular-devkit/core" "12.2.18" - rxjs "6.6.7" - -"@angular-devkit/architect@>=0.1400.0 < 0.1500.0", "@angular-devkit/architect@0.1402.11": +"@angular-devkit/architect@0.1402.11", "@angular-devkit/architect@>=0.1400.0 < 0.1500.0": version "0.1402.11" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== @@ -52,7 +44,7 @@ "@angular-devkit/core" "14.2.11" rxjs "6.6.7" -"@angular-devkit/architect@~0.1502.0": +"@angular-devkit/architect@0.1502.5", "@angular-devkit/architect@~0.1502.0": version "0.1502.5" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== @@ -60,12 +52,12 @@ "@angular-devkit/core" "15.2.5" rxjs "6.6.7" -"@angular-devkit/architect@0.1502.5": - version "0.1502.5" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" - integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== +"@angular-devkit/architect@^0.1202.10": + version "0.1202.18" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.18.tgz" + integrity sha512-C4ASKe+xBjl91MJyHDLt3z7ICPF9FU6B0CeJ1phwrlSHK9lmFG99WGxEj/Tc82+vHyPhajqS5XJ38KyVAPBGzA== dependencies: - "@angular-devkit/core" "15.2.5" + "@angular-devkit/core" "12.2.18" rxjs "6.6.7" "@angular-devkit/build-angular@^14.0.0": @@ -138,7 +130,7 @@ optionalDependencies: esbuild "0.15.5" -"@angular-devkit/build-angular@^15.0.0", "@angular-devkit/build-angular@^15.2.5": +"@angular-devkit/build-angular@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.5.tgz" integrity sha512-D2LxjBtUlgJnPxybOIN0XsENEGkVkqCGBBii5oK84HvgBHXO/EyP1WXpOdb2lOYSUZyjhOOs0q42LCobJoaxUw== @@ -222,7 +214,7 @@ "@angular-devkit/architect" "0.1502.5" rxjs "6.6.7" -"@angular-devkit/core@^12.2.17", "@angular-devkit/core@12.2.18": +"@angular-devkit/core@12.2.18", "@angular-devkit/core@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" integrity sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww== @@ -234,7 +226,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@^14.0.0", "@angular-devkit/core@14.2.11": +"@angular-devkit/core@14.2.11", "@angular-devkit/core@^14.0.0": version "14.2.11" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz" integrity sha512-cBIGs6y9rykOQqnuAQOB1DgIRyBFYtvKRJb7QNUfIJ0qUfARKkuV/yikv3lrb95ePGkmoRzmjkFqcFZiYU+r7A== @@ -245,7 +237,7 @@ rxjs "6.6.7" source-map "0.7.4" -"@angular-devkit/core@~15.2.0", "@angular-devkit/core@15.2.5": +"@angular-devkit/core@15.2.5", "@angular-devkit/core@~15.2.0": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.5.tgz" integrity sha512-ZfjEkAe2yYeekc3xjZ/U4pK9nb+w6BFwAEjou6mE8PWZH7iYskm0YCCXkmu+B+zViEcCLhAkJAxu9MwX4efd8g== @@ -256,7 +248,7 @@ rxjs "6.6.7" source-map "0.7.4" -"@angular-devkit/schematics@^12.2.17", "@angular-devkit/schematics@12.2.18": +"@angular-devkit/schematics@12.2.18", "@angular-devkit/schematics@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" integrity sha512-bZ9NS5PgoVfetRC6WeQBHCY5FqPZ9y2TKHUo12sOB2YSL3tgWgh1oXyP8PtX34gasqsLjNULxEQsAQYEsiX/qQ== @@ -333,7 +325,7 @@ "@angular-eslint/bundled-angular-compiler" "15.2.1" "@typescript-eslint/utils" "5.48.2" -"@angular/animations@^15.2.6", "@angular/animations@>=10.0.0", "@angular/animations@>=13.0.0 <14", "@angular/animations@15.2.6": +"@angular/animations@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/animations/-/animations-15.2.6.tgz" integrity sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ== @@ -349,7 +341,7 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@^15.2.5", "@angular/cli@>= 15.0.0 < 16.0.0", "@angular/cli@>=12": +"@angular/cli@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular/cli/-/cli-15.2.5.tgz" integrity sha512-TmkkeJkdfDkC6b2SNQcLlr1rsl2anc5rrrY3gawOVXYXBExMxAi2SNJsHZzUXfiitW52aZkAyajF1VFazs8PRw== @@ -373,14 +365,14 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^14.0.0", "@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@14.3.0", "@angular/compiler-cli@15.2.6": +"@angular/compiler-cli@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" integrity sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw== @@ -396,35 +388,21 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@^15.2.6", "@angular/compiler@15.2.6": +"@angular/compiler@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.6.tgz" integrity sha512-6oBAIY5KcC1UNsrnWGLcopZ9RD7c0HzpTCQY46N6HytHtUjBvzLbGWZu5MfahPtIjKz9FMVYBX9hugcbVpWnTA== dependencies: tslib "^2.3.0" -"@angular/compiler@14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz" - integrity sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw== - dependencies: - tslib "^2.3.0" - -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== dependencies: tslib "^2.3.0" -"@angular/core@14.3.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz" - integrity sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ== - dependencies: - tslib "^2.3.0" - -"@angular/forms@^13.0.0", "@angular/forms@^15.2.6", "@angular/forms@>=10.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/forms@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/forms/-/forms-15.2.6.tgz" integrity sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw== @@ -436,7 +414,7 @@ resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.6.tgz" integrity sha512-q6u4XhFReJ3GtA7dC5rJaEBQPjJUjOz9PlwHSOxZxugFP99ddDNBBFd0caa446G54kQdZFG7j7w7BiAp2/srmQ== -"@angular/localize@^13.0.0", "@angular/localize@^15.0.0", "@angular/localize@15.2.6": +"@angular/localize@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/localize/-/localize-15.2.6.tgz" integrity sha512-2WJBYRJ6aulo0fS9BUGr4fsdyk+5WcbZoiFURgs0sNrJtYCd51I9rQNwl3OGyYReNmFx8GgLc4K7+rEKhKfSbA== @@ -445,30 +423,21 @@ glob "8.1.0" yargs "^17.2.1" -"@angular/localize@^14.0.0": - version "14.3.0" - resolved "https://registry.npmjs.org/@angular/localize/-/localize-14.3.0.tgz" - integrity sha512-YmwlOEGnFonfDrIcWqlxXVFFjd0Q6yXeHGZCBFBfwbtjIseiJJ4UBmkTUgFeq7qlWevSFQzHdQnraFRGZpnMig== - dependencies: - "@babel/core" "7.18.9" - glob "8.0.3" - yargs "^17.2.1" - -"@angular/platform-browser-dynamic@^15.2.6", "@angular/platform-browser-dynamic@15.2.6": +"@angular/platform-browser-dynamic@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.6.tgz" integrity sha512-ZSyiigpxBWIM5f8t/a28Y3BCzHn1FtI2KsJysE7di5UUflOzwbxbfycVlpiZp0girbDYRyF18vvefvitNh17Gw== dependencies: tslib "^2.3.0" -"@angular/platform-browser@^15.2.6", "@angular/platform-browser@>=10.0.0", "@angular/platform-browser@15.2.6", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/platform-browser@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.6.tgz" integrity sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA== dependencies: tslib "^2.3.0" -"@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": +"@angular/platform-server@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== @@ -477,7 +446,7 @@ tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^15.0.0", "@angular/router@^15.2.6": +"@angular/router@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/router/-/router-15.2.6.tgz" integrity sha512-yB9uc9Xi9N0dErsugleywBA1KYG+GQ9WWSlri34oe2VsCqZazImn71n4wKPtrm2Xiy/mI23wJcr+jiCAtzp49Q== @@ -501,27 +470,6 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - "@babel/core@7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz" @@ -585,7 +533,28 @@ json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.18.10", "@babel/generator@7.18.12": +"@babel/core@^7.12.3": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@7.18.12", "@babel/generator@^7.18.10": version "7.18.12" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz" integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== @@ -594,6 +563,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@7.20.14", "@babel/generator@^7.20.7": + version "7.20.14" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/generator@^7.18.9", "@babel/generator@^7.19.3", "@babel/generator@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" @@ -604,16 +582,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.20.7", "@babel/generator@7.20.14": - version "7.20.14" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@7.18.6": +"@babel/helper-annotate-as-pure@7.18.6", "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== @@ -776,7 +745,7 @@ dependencies: "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@7.18.6": +"@babel/helper-split-export-declaration@7.18.6", "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -847,7 +816,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@^7.18.10", "@babel/plugin-proposal-async-generator-functions@7.18.10": +"@babel/plugin-proposal-async-generator-functions@7.18.10", "@babel/plugin-proposal-async-generator-functions@^7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz" integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== @@ -857,7 +826,7 @@ "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@7.20.7": +"@babel/plugin-proposal-async-generator-functions@7.20.7", "@babel/plugin-proposal-async-generator-functions@^7.20.1": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== @@ -1098,15 +1067,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.20.7": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-transform-async-to-generator@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" @@ -1116,6 +1076,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-remap-async-to-generator" "^7.18.6" +"@babel/plugin-transform-async-to-generator@7.20.7", "@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" @@ -1553,7 +1522,7 @@ resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@>=7", "@babel/runtime@7.17.2": +"@babel/runtime@7.17.2", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.17.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -1574,15 +1543,6 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7", "@babel/template@7.20.7": - version "7.20.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@babel/template@7.18.10": version "7.18.10" resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" @@ -1592,6 +1552,15 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" +"@babel/template@7.20.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@babel/traverse@^7.10.3", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.3", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": version "7.21.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz" @@ -1622,12 +1591,17 @@ resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960" + integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg== dependencies: - "@jridgewell/trace-mapping" "0.3.9" + "@cspotcode/source-map-consumer" "0.8.0" "@csstools/postcss-cascade-layers@^1.0.5", "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" @@ -1779,7 +1753,7 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.7": +"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== @@ -1803,11 +1777,121 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" +"@esbuild/android-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.8.tgz#b3d5b65a3b2e073a6c7ee36b1f3c30c8f000315b" + integrity sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ== + +"@esbuild/android-arm@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.8.tgz#c41e496af541e175369d48164d0cf01a5f656cf6" + integrity sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w== + +"@esbuild/android-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.8.tgz#080fa67c29be77f5a3ca5ee4cc78d5bf927e3a3b" + integrity sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg== + +"@esbuild/darwin-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.8.tgz#053622bf9a82f43d5c075b7818e02618f7b4a397" + integrity sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg== + "@esbuild/darwin-x64@0.17.8": version "0.17.8" resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz" integrity sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw== +"@esbuild/freebsd-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.8.tgz#e6738d0081ba0721a5c6c674e84c6e7fcea61989" + integrity sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A== + +"@esbuild/freebsd-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.8.tgz#1855e562f2b730f4483f6e94086e9e2597feb4c3" + integrity sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q== + +"@esbuild/linux-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.8.tgz#481da38952721a3fdb77c17a36ceaacc4270b5c5" + integrity sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww== + +"@esbuild/linux-arm@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.8.tgz#18127072b270bb6321c6d11be20bfd30e0d6ad17" + integrity sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA== + +"@esbuild/linux-ia32@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.8.tgz#ee400af7b3bc69e8ca2e593ca35156ffb9abd54f" + integrity sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA== + +"@esbuild/linux-loong64@0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz#91aef76d332cdc7c8942b600fa2307f3387e6f82" + integrity sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A== + +"@esbuild/linux-loong64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.8.tgz#8c509d8a454693d39824b83b3f66c400872fce82" + integrity sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA== + +"@esbuild/linux-mips64el@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.8.tgz#f2b0d36e63fb26bc3f95b203b6a80638292101ca" + integrity sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA== + +"@esbuild/linux-ppc64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.8.tgz#1e628be003e036e90423716028cc884fe5ba25bd" + integrity sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw== + +"@esbuild/linux-riscv64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.8.tgz#419a815cb4c3fb9f1b78ef5295f5b48b8bf6427a" + integrity sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw== + +"@esbuild/linux-s390x@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.8.tgz#291c49ae5c3d11d226352755c0835911fe1a9e5c" + integrity sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw== + +"@esbuild/linux-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.8.tgz#03199d91c76faf80bd54104f5cbf0a489bc39f6a" + integrity sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA== + +"@esbuild/netbsd-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.8.tgz#b436d767e1b21852f9ed212e2bb57f77203b0ae2" + integrity sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q== + +"@esbuild/openbsd-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.8.tgz#d1481d8539e21d4729cd04a0450a26c2c8789e89" + integrity sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg== + +"@esbuild/sunos-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.8.tgz#2cfb8126e079b2c00fd1bf095541e9f5c47877e4" + integrity sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw== + +"@esbuild/win32-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.8.tgz#7c6ecfd097ca23b82119753bf7072bbaefe51e3a" + integrity sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg== + +"@esbuild/win32-ia32@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.8.tgz#cffec63c3cb0ef8563a04df4e09fa71056171d00" + integrity sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w== + +"@esbuild/win32-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz#200a0965cf654ac28b971358ecdca9cc5b44c335" + integrity sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -1907,7 +1991,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -1925,16 +2009,16 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" @@ -1943,14 +2027,6 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@kolkov/ngx-gallery@^2.0.1": version "2.0.1" resolved "https://registry.npmjs.org/@kolkov/ngx-gallery/-/ngx-gallery-2.0.1.tgz" @@ -1963,7 +2039,7 @@ resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@material-ui/core@^4.0.0", "@material-ui/core@^4.11.0", "@material-ui/core@^4.12.1", "@material-ui/core@^4.7.2": +"@material-ui/core@^4.11.0": version "4.12.4" resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz" integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== @@ -1981,7 +2057,7 @@ react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" -"@material-ui/icons@^4.5.1", "@material-ui/icons@^4.9.1": +"@material-ui/icons@^4.9.1": version "4.11.3" resolved "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz" integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== @@ -2087,23 +2163,23 @@ dependencies: tslib "^2.0.0" -"@ngrx/store@^15.4.0", "@ngrx/store@15.4.0": +"@ngrx/store@^15.4.0": version "15.4.0" resolved "https://registry.npmjs.org/@ngrx/store/-/store-15.4.0.tgz" integrity sha512-OvCuNBHL8mAUnRTS6QSFm+IunspsYNu2cCwDovBNn7EGhxRuGihBeNoX47jCqWPHBFtokj4BlatDfpJ/yCh4xQ== dependencies: tslib "^2.0.0" -"@ngtools/webpack@^15.2.5", "@ngtools/webpack@15.2.5": - version "15.2.5" - resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" - integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== - "@ngtools/webpack@14.2.11": version "14.2.11" resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.11.tgz" integrity sha512-4enbLFAp98uTgWYF6OFceQqLcfv2/0brIrNN4iWT9xe/Mh3zdCt+eH42zvNRsqo9WXNWRSLvnx8I924p83LNlw== +"@ngtools/webpack@15.2.5", "@ngtools/webpack@^15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" + integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== + "@nguniversal/builders@^15.2.0": version "15.2.0" resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-15.2.0.tgz" @@ -2160,7 +2236,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2331,15 +2407,6 @@ resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz" integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== -"@schematics/angular@^12.2.17": - version "12.2.18" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz" - integrity sha512-niRS9Ly9y8uI0YmTSbo8KpdqCCiZ/ATMZWeS2id5M8JZvfXbngwiqJvojdSol0SWU+n1W4iA+lJBdt4gSKlD5w== - dependencies: - "@angular-devkit/core" "12.2.18" - "@angular-devkit/schematics" "12.2.18" - jsonc-parser "3.0.0" - "@schematics/angular@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" @@ -2349,6 +2416,15 @@ "@angular-devkit/schematics" "15.2.5" jsonc-parser "3.2.0" +"@schematics/angular@^12.2.17": + version "12.2.18" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz" + integrity sha512-niRS9Ly9y8uI0YmTSbo8KpdqCCiZ/ATMZWeS2id5M8JZvfXbngwiqJvojdSol0SWU+n1W4iA+lJBdt4gSKlD5w== + dependencies: + "@angular-devkit/core" "12.2.18" + "@angular-devkit/schematics" "12.2.18" + jsonc-parser "3.0.0" + "@sigstore/protobuf-specs@^0.1.0": version "0.1.0" resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz" @@ -2549,7 +2625,7 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/node@*", "@types/node@^14.14.31", "@types/node@^14.14.9", "@types/node@>=10.0.0": +"@types/node@*", "@types/node@>=10.0.0", "@types/node@^14.14.31", "@types/node@^14.14.9": version "14.18.42" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz" integrity sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg== @@ -2591,7 +2667,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.8.6 || ^17.0.0": +"@types/react@*": version "17.0.57" resolved "https://registry.npmjs.org/@types/react/-/react-17.0.57.tgz" integrity sha512-e4msYpu5QDxzNrXDHunU/VPyv2M1XemGG/p7kfCjUiPtlLDCWLGQfgAMng6YyisWYxZ09mYdQlmMnyS0NfZdEg== @@ -2673,7 +2749,7 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@^5.43.0": +"@typescript-eslint/eslint-plugin@^5.43.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz" integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== @@ -2689,7 +2765,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.43.0": +"@typescript-eslint/parser@^5.43.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz" integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== @@ -2771,20 +2847,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.57.0", "@typescript-eslint/utils@5.58.0": - version "5.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" - integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/typescript-estree" "5.58.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - "@typescript-eslint/utils@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz" @@ -2799,6 +2861,20 @@ eslint-utils "^3.0.0" semver "^7.3.7" +"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.57.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz" @@ -2983,7 +3059,7 @@ abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@^1.0.0, abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3027,31 +3103,21 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0: +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn-walk@^8.0.2: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + adjust-sourcemap-loader@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" @@ -3060,7 +3126,12 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@^6.0.2, agent-base@6: +adm-zip@^0.5.2: + version "0.5.10" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.10.tgz#4a51d5ab544b1f5ce51e1b9043139b639afff45b" + integrity sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ== + +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -3084,13 +3155,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-formats@^2.1.1, ajv-formats@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - ajv-formats@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz" @@ -3098,6 +3162,13 @@ ajv-formats@2.1.0: dependencies: ajv "^8.0.0" +ajv-formats@2.1.1, ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -3110,36 +3181,6 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@8.6.2: - version "8.6.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.8.0, ajv@^8.8.2: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - ajv@8.11.0: version "8.11.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" @@ -3150,7 +3191,7 @@ ajv@8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@8.12.0: +ajv@8.12.0, ajv@^8.8.0: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -3160,6 +3201,26 @@ ajv@8.12.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@8.6.2, ajv@^8.0.0: + version "8.6.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + angular-idle-preload@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/angular-idle-preload/-/angular-idle-preload-3.0.0.tgz" @@ -3172,7 +3233,7 @@ angulartics2@^12.0.0: dependencies: tslib "^2.3.0" -ansi-colors@^4.1.1, ansi-colors@4.1.3: +ansi-colors@4.1.3, ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== @@ -3189,6 +3250,11 @@ ansi-html-community@^0.0.8: resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" @@ -3199,6 +3265,11 @@ ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -3206,14 +3277,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -3278,16 +3342,16 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -3299,11 +3363,23 @@ array-includes@^3.1.6: get-intrinsic "^1.1.3" is-string "^1.0.7" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" @@ -3324,6 +3400,11 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + asn1@~0.2.3: version "0.2.6" resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" @@ -3331,7 +3412,7 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -assert-plus@^1.0.0, assert-plus@1.0.0: +assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -3368,18 +3449,6 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@^10.4.13, autoprefixer@^10.4.8: - version "10.4.14" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - autoprefixer@10.4.13: version "10.4.13" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" @@ -3392,6 +3461,18 @@ autoprefixer@10.4.13: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@^10.4.13, autoprefixer@^10.4.8: + version "10.4.14" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -3407,11 +3488,18 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -"axe-core@^3 || ^4", axe-core@^4.4.3: +axe-core@^4.4.3: version "4.6.3" resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== +axios@0.21.4: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + axios@^0.27.2: version "0.27.2" resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" @@ -3420,13 +3508,6 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@0.21.4: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - axobject-query@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz" @@ -3505,7 +3586,7 @@ base64-js@^1.2.0, base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@~2.0.0, base64id@2.0.0: +base64id@2.0.0, base64id@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== @@ -3572,7 +3653,7 @@ bluebird@^3.7.2: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@^1.19.0, body-parser@1.20.1: +body-parser@1.20.1, body-parser@^1.19.0: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== @@ -3605,7 +3686,7 @@ boolbase@^1.0.0: resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bootstrap@^4.0.0, bootstrap@^4.6.1: +bootstrap@^4.6.1: version "4.6.2" resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz" integrity sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ== @@ -3696,7 +3777,7 @@ browser-sync@^2.27.10: ua-parser-js "^1.0.33" yargs "^17.3.1" -browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1, "browserslist@>= 4.21.0", browserslist@4.21.5: +browserslist@4.21.5, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3756,6 +3837,49 @@ bytesish@^0.4.1: resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== +cacache@16.1.2: + version "16.1.2" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz" + integrity sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA== + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^1.1.1" + +cacache@17.0.4: + version "17.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" + integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^8.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cacache@^15.0.5: version "15.3.0" resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" @@ -3823,49 +3947,6 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -cacache@16.1.2: - version "16.1.2" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz" - integrity sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^1.1.1" - -cacache@17.0.4: - version "17.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" - integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^8.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" @@ -3906,6 +3987,25 @@ cerialize@0.1.18: dependencies: typescript "^2.5.0" +chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@~4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -3915,54 +4015,6 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@~4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" @@ -4002,7 +4054,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@3.5.3: +chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4139,16 +4191,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" @@ -4171,12 +4223,12 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.2.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== -commander@^2.20.0: +commander@^2.2.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4191,21 +4243,11 @@ commander@^6.1.0: resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.0.0: +commander@^7.0.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== - comment-parser@1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" @@ -4264,16 +4306,6 @@ connect-history-api-fallback@^2.0.0: resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - connect@3.6.6: version "3.6.6" resolved "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz" @@ -4284,6 +4316,16 @@ connect@3.6.6: parseurl "~1.3.2" utils-merge "1.0.1" +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" @@ -4319,11 +4361,6 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - cookie@0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" @@ -4334,6 +4371,11 @@ cookie@0.5.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + copy-anything@^2.0.1: version "2.0.6" resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" @@ -4348,6 +4390,18 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" +copy-webpack-plugin@11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + copy-webpack-plugin@^6.4.1: version "6.4.1" resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz" @@ -4365,18 +4419,6 @@ copy-webpack-plugin@^6.4.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.25.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" @@ -4384,21 +4426,21 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.25.1: dependencies: browserslist "^4.21.5" -core-js@^3.7.0, core-js@^3.8.1: +core-js@^3.7.0: version "3.30.0" resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@~2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" @@ -4586,7 +4628,7 @@ cypress-axe@^1.1.0: resolved "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.4.0.tgz" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -"cypress@^10 || ^11 || ^12", cypress@12.9.0: +cypress@12.9.0: version "12.9.0" resolved "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz" integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== @@ -4664,7 +4706,7 @@ date-fns-tz@^1.3.7: resolved "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz" integrity sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ== -date-fns@^2.29.3, date-fns@>=2.0.0: +date-fns@^2.29.3: version "2.29.3" resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== @@ -4679,48 +4721,20 @@ dayjs@^1.10.4: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -debug@^2.2.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.6: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" @@ -4728,6 +4742,13 @@ debug@4.3.2: dependencies: ms "2.1.2" +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + decimal.js@^10.2.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" @@ -4798,6 +4819,19 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ== + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -4808,7 +4842,7 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@^2.0.0, depd@~2.0.0, depd@2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -4823,16 +4857,16 @@ dependency-graph@^0.11.0: resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== - destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" @@ -5070,7 +5104,7 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.0, encoding@^0.1.13: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -5124,7 +5158,7 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -5277,11 +5311,91 @@ es6-promisify@^6.0.0: resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz" integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== +esbuild-android-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz#3c7b2f2a59017dab3f2c0356188a8dd9cbdc91c8" + integrity sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg== + +esbuild-android-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz#e301db818c5a67b786bf3bb7320e414ac0fcf193" + integrity sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg== + esbuild-darwin-64@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz" integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== +esbuild-darwin-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz#ad89dafebb3613fd374f5a245bb0ce4132413997" + integrity sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg== + +esbuild-freebsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz#6bfb52b4a0d29c965aa833e04126e95173289c8a" + integrity sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA== + +esbuild-freebsd-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz#38a3fed8c6398072f9914856c7c3e3444f9ef4dd" + integrity sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w== + +esbuild-linux-32@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz#942dc70127f0c0a7ea91111baf2806e61fc81b32" + integrity sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ== + +esbuild-linux-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz#6d748564492d5daaa7e62420862c31ac3a44aed9" + integrity sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg== + +esbuild-linux-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz#28cd899beb2d2b0a3870fd44f4526835089a318d" + integrity sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA== + +esbuild-linux-arm@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz#6441c256225564d8794fdef5b0a69bc1a43051b5" + integrity sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q== + +esbuild-linux-mips64le@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz#d4927f817290eaffc062446896b2a553f0e11981" + integrity sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ== + +esbuild-linux-ppc64le@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz#b6d660dc6d5295f89ac51c675f1a2f639e2fb474" + integrity sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw== + +esbuild-linux-riscv64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz#2801bf18414dc3d3ad58d1ea83084f00d9d84896" + integrity sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA== + +esbuild-linux-s390x@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz#12a634ae6d3384cacc2b8f4201047deafe596eae" + integrity sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ== + +esbuild-netbsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz#951bbf87600512dfcfbe3b8d9d117d684d26c1b8" + integrity sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w== + +esbuild-openbsd-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz#26705b61961d525d79a772232e8b8f211fdbb035" + integrity sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA== + +esbuild-sunos-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz#d794da1ae60e6e2f6194c44d7b3c66bf66c7a141" + integrity sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA== + esbuild-wasm@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz" @@ -5292,6 +5406,21 @@ esbuild-wasm@0.17.8: resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz" integrity sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ== +esbuild-windows-32@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz#0670326903f421424be86bc03b7f7b3ff86a9db7" + integrity sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg== + +esbuild-windows-64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz#64f32acb7341f3f0a4d10e8ff1998c2d1ebfc0a9" + integrity sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw== + +esbuild-windows-arm64@0.15.5: + version "0.15.5" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz#4fe7f333ce22a922906b10233c62171673a3854b" + integrity sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA== + esbuild@0.15.5: version "0.15.5" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz" @@ -5362,9 +5491,9 @@ escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: @@ -5462,7 +5591,7 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@^5.1.1, eslint-scope@5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5470,15 +5599,7 @@ eslint-scope@^5.1.1, eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-scope@^7.1.1: +eslint-scope@^7.0.0, eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== @@ -5503,7 +5624,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.20.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.28.0, eslint@>=2, eslint@>=5: +eslint@^8.28.0: version "8.38.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz" integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== @@ -5597,7 +5718,7 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@^1.8.1, etag@~1.8.1, etag@1.8.1: +etag@1.8.1, etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== @@ -5622,21 +5743,6 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - execa@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" @@ -5652,6 +5758,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" @@ -5671,7 +5792,7 @@ express-static-gzip@^2.1.5: dependencies: serve-static "^1.14.1" -express@^4.15.2, express@^4.17.1, express@^4.17.3, express@^4.18.2: +express@^4.17.1, express@^4.17.3, express@^4.18.2: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -5733,7 +5854,7 @@ extract-zip@2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@^1.2.0, extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== @@ -5759,7 +5880,7 @@ fast-json-patch@^3.0.0-1: resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz" integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@2.1.0: +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5964,11 +6085,20 @@ fraction.js@^4.2.0: resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== -fresh@^0.5.2, fresh@0.5.2: +fresh@0.5.2, fresh@^0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" + integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -5988,15 +6118,6 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" @@ -6089,14 +6210,7 @@ get-package-type@^0.1.0: resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -6130,14 +6244,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^5.1.2: +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6151,18 +6258,45 @@ glob-parent@^6.0.1, glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@8.0.3, glob@^8.0.1: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^7.0.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" @@ -6175,18 +6309,7 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1, glob@8.0.3: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^9.3.0: +glob@^9.3.0, glob@^9.3.1: version "9.3.5" resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== @@ -6196,27 +6319,6 @@ glob@^9.3.0: minipass "^4.2.4" path-scurry "^1.6.1" -glob@^9.3.1: - version "9.3.5" - resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -glob@8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" @@ -6243,19 +6345,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.1: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^11.1.0: +globby@^11.0.1, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6278,6 +6368,18 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ== + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" @@ -6314,6 +6416,26 @@ handle-thing@^2.0.0: resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" @@ -6474,16 +6596,6 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -6495,6 +6607,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -6529,18 +6651,7 @@ http-proxy-middleware@^1.0.5: is-plain-obj "^3.0.0" micromatch "^4.0.2" -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy-middleware@^2.0.6: +http-proxy-middleware@^2.0.3, http-proxy-middleware@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== @@ -6560,6 +6671,15 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + http-signature@~1.3.6: version "1.3.6" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" @@ -6569,7 +6689,7 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1, https-proxy-agent@5.0.1: +https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6599,7 +6719,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -i18next@^19.5.0, "i18next@>= 19.0.0": +i18next@^19.5.0: version "19.9.2" resolved "https://registry.npmjs.org/i18next/-/i18next-19.9.2.tgz" integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== @@ -6613,27 +6733,20 @@ icomcom-react@^1.0.1: dependencies: prop-types "^15.6.0" -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -6656,7 +6769,7 @@ ignore-walk@^6.0.0: dependencies: minimatch "^7.4.2" -ignore@^5.2.0, ignore@5.2.4: +ignore@5.2.4, ignore@^5.2.0: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -6720,7 +6833,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6740,6 +6853,11 @@ ini@3.0.1: resolved "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz" integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inquirer@8.2.4: version "8.2.4" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" @@ -6792,16 +6910,16 @@ ip@^2.0.0: resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -6951,6 +7069,25 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" @@ -7177,7 +7314,7 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jasmine-core@^3.6.0, jasmine-core@^3.8.0, jasmine-core@>=3.8: +jasmine-core@^3.6.0, jasmine-core@^3.8.0: version "3.99.1" resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz" integrity sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg== @@ -7198,11 +7335,6 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -"jquery@1.9.1 - 3": - version "3.6.4" - resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz" - integrity sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ== - js-cookie@2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" @@ -7243,6 +7375,38 @@ jsdoc-type-pratt-parser@~3.1.0: resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz" integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== +jsdom@21.1.0: + version "21.1.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" + integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + jsdom@^16.4.0: version "16.7.0" resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" @@ -7276,38 +7440,6 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@21.1.0: - version "21.1.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" - integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== - dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -7365,7 +7497,7 @@ json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@^3.0.0, jsonc-parser@3.0.0: +jsonc-parser@3.0.0, jsonc-parser@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== @@ -7413,6 +7545,16 @@ jsonschema@1.4.0: resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + jsprim@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" @@ -7490,7 +7632,7 @@ jss-rtl@^0.3.0: dependencies: rtl-css-js "^1.13.1" -jss@^10.0.0, jss@^10.3.0, jss@^10.5.1, jss@10.10.0: +jss@10.10.0, jss@^10.3.0, jss@^10.5.1: version "10.10.0" resolved "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz" integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== @@ -7539,7 +7681,7 @@ karma-jasmine-html-reporter@^1.5.0: resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz" integrity sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ== -karma-jasmine@>=1.1, karma-jasmine@~4.0.0: +karma-jasmine@~4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz" integrity sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g== @@ -7562,7 +7704,7 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" -karma@*, karma@^6.3.0, karma@^6.3.14, karma@>=0.13, karma@>=0.9: +karma@^6.3.14: version "6.4.1" resolved "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz" integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== @@ -7639,7 +7781,7 @@ less-loader@11.1.0: dependencies: klona "^2.0.4" -"less@^3.5.0 || ^4.0.0", less@4.1.3: +less@4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/less/-/less-4.1.3.tgz" integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== @@ -7715,6 +7857,11 @@ loader-runner@^4.2.0: resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-utils@3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" @@ -7724,11 +7871,6 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" -loader-utils@3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - localtunnel@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz" @@ -7845,13 +7987,6 @@ lru-cache@^9.0.0: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz" integrity sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg== -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - magic-string@0.25.7: version "0.25.7" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" @@ -7866,6 +8001,13 @@ magic-string@0.29.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" @@ -7908,28 +8050,7 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^11.0.0: - version "11.0.3" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" - integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -make-fetch-happen@^11.0.1: +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1: version "11.0.3" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== @@ -8015,7 +8136,7 @@ memfs@^3.4.12, memfs@^3.4.3: dependencies: fs-monkey "^1.0.3" -memoize-one@^5.1.1, "memoize-one@>=3.1.1 <6": +"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== @@ -8058,7 +8179,7 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -8070,26 +8191,21 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, dependencies: mime-db "1.52.0" -mime@^1.4.1, mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.6: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mime@1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.6, mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -8114,20 +8230,20 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1, minimatch@5.1.0: +minimatch@5.1.0, minimatch@^5.0.1: version "5.1.0" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== dependencies: brace-expansion "^2.0.1" +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimatch@^7.4.2: version "7.4.6" resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" @@ -8135,23 +8251,16 @@ minimatch@^7.4.2: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: +minimatch@^8.0.2, minimatch@^8.0.3: version "8.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.3: - version "8.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: @@ -8247,7 +8356,7 @@ mirador-share-plugin@^0.11.0: resolved "https://registry.npmjs.org/mirador-share-plugin/-/mirador-share-plugin-0.11.0.tgz" integrity sha512-fHcdDXyrtfy5pn1zdQNX9BvE5Tjup66eQwyNippE5PMaP8ImUcrFaSL+mStdn+v6agsHcsdRqLhseZ0XWgEuAw== -mirador@^3.0.0-beta.0, mirador@^3.0.0-rc.7, mirador@^3.3.0: +mirador@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/mirador/-/mirador-3.3.0.tgz" integrity sha512-BmGfRnWJ45B+vtiAwcFT7n9nKialfejE9UvuUK0NorO37ShArpsKr3yVSD4jQASwSR4DRRpPEG21jOk4WN7H3w== @@ -8334,16 +8443,16 @@ mrmime@^1.0.0: resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== -ms@^2.0.0, ms@^2.1.1, ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" @@ -8386,7 +8495,7 @@ needle@^3.1.0: iconv-lite "^0.6.3" sax "^1.2.4" -negotiator@^0.6.3, negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -8421,7 +8530,7 @@ ngx-infinite-scroll@^10.0.1: "@scarf/scarf" "^1.1.0" opencollective-postinstall "^2.0.2" -ngx-mask@^13.0.0, ngx-mask@^13.1.7: +ngx-mask@^13.1.7: version "13.1.15" resolved "https://registry.npmjs.org/ngx-mask/-/ngx-mask-13.1.15.tgz" integrity sha512-fplyzkFa6lFTzPo/AHaI3TBQxTMdcqQClR9BLLAWTvCyDZkV28fLqWkpIpy0VvPc9ADogFpJJj7R1356mszjag== @@ -8553,7 +8662,7 @@ normalize-url@^4.5.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -nouislider@^14.6.3, nouislider@>=9.x: +nouislider@^14.6.3: version "14.7.0" resolved "https://registry.npmjs.org/nouislider/-/nouislider-14.7.0.tgz" integrity sha512-4RtQ1+LHJKesDCNJrXkQcwXAWCrC2aggdLYMstS/G5fEWL+fXZbUA9pwVNHFghMGuFGRATlDLNInRaPeRKzpFQ== @@ -8577,7 +8686,7 @@ npm-normalize-package-bin@^3.0.0: resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz" integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== -npm-package-arg@^10.0.0, npm-package-arg@10.1.0: +npm-package-arg@10.1.0, npm-package-arg@^10.0.0: version "10.1.0" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== @@ -8594,7 +8703,7 @@ npm-packlist@^7.0.0: dependencies: ignore-walk "^6.0.0" -npm-pick-manifest@^8.0.0, npm-pick-manifest@8.0.1: +npm-pick-manifest@8.0.1, npm-pick-manifest@^8.0.0: version "8.0.1" resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== @@ -8646,9 +8755,14 @@ nwsapi@^2.2.0, nwsapi@^2.2.2: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.3.tgz" integrity sha512-jscxIO4/VKScHlbmFBdV1Z6LXnLO+ZR4VMtypudUdfwtKxUN3TQcNFIHLwKtrUbDyHN4/GycY9+oRGZ2XMXYPw== -object-assign@^4, object-assign@^4.1.1: +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.3, object-inspect@^1.9.0: @@ -8698,13 +8812,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" @@ -8712,6 +8819,13 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" @@ -8731,7 +8845,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9, open@8.4.0: +open@8.4.0, open@^8.0.9: version "8.4.0" resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== @@ -8800,7 +8914,7 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^5.1.0, ora@^5.4.1, ora@5.4.1: +ora@5.4.1, ora@^5.1.0, ora@^5.4.1: version "5.4.1" resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== @@ -8967,35 +9081,23 @@ parse5-sax-parser@^7.0.0: dependencies: parse5 "^7.0.0" +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parse5@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^7.0.0: +parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" -parse5@^7.1.1: - version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -9011,6 +9113,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" @@ -9074,14 +9181,9 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.2.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: @@ -9089,7 +9191,19 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -piscina@~3.2.0, piscina@3.2.0: +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +piscina@3.2.0, piscina@~3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz" integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== @@ -9107,11 +9221,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -popper.js@^1.16.1: - version "1.16.1" - resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - popper.js@1.16.1-lts: version "1.16.1-lts" resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz" @@ -9242,19 +9351,19 @@ postcss-image-set-function@^4.0.7: dependencies: postcss-value-parser "^4.2.0" -postcss-import@^14.0.0: - version "14.1.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== +postcss-import@15.0.0: + version "15.0.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz" + integrity sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg== dependencies: postcss-value-parser "^4.0.0" read-cache "^1.0.0" resolve "^1.1.7" -postcss-import@15.0.0: - version "15.0.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz" - integrity sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg== +postcss-import@^14.0.0: + version "14.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== dependencies: postcss-value-parser "^4.0.0" read-cache "^1.0.0" @@ -9273,17 +9382,6 @@ postcss-lab-function@^4.2.1: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-loader@^4.0.3: - version "4.3.0" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz" - integrity sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.4" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - semver "^7.3.4" - postcss-loader@7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz" @@ -9302,6 +9400,17 @@ postcss-loader@7.0.2: klona "^2.0.5" semver "^7.3.8" +postcss-loader@^4.0.3: + version "4.3.0" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz" + integrity sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.4" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + semver "^7.3.4" + postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" @@ -9372,61 +9481,6 @@ postcss-place@^7.0.5: dependencies: postcss-value-parser "^4.2.0" -postcss-preset-env@^7.4.2: - version "7.8.3" - resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz" - integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== - dependencies: - "@csstools/postcss-cascade-layers" "^1.1.1" - "@csstools/postcss-color-function" "^1.1.1" - "@csstools/postcss-font-format-keywords" "^1.0.1" - "@csstools/postcss-hwb-function" "^1.0.2" - "@csstools/postcss-ic-unit" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^2.0.7" - "@csstools/postcss-nested-calc" "^1.0.0" - "@csstools/postcss-normalize-display-values" "^1.0.1" - "@csstools/postcss-oklab-function" "^1.1.1" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.1" - "@csstools/postcss-text-decoration-shorthand" "^1.0.0" - "@csstools/postcss-trigonometric-functions" "^1.0.2" - "@csstools/postcss-unset-value" "^1.0.2" - autoprefixer "^10.4.13" - browserslist "^4.21.4" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^7.1.0" - postcss-attribute-case-insensitive "^5.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.4" - postcss-color-hex-alpha "^8.0.4" - postcss-color-rebeccapurple "^7.1.1" - postcss-custom-media "^8.0.2" - postcss-custom-properties "^12.1.10" - postcss-custom-selectors "^6.0.3" - postcss-dir-pseudo-class "^6.0.5" - postcss-double-position-gradients "^3.1.2" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.5" - postcss-image-set-function "^4.0.7" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.1" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.2.0" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.4" - postcss-page-break "^3.0.4" - postcss-place "^7.0.5" - postcss-pseudo-class-any-link "^7.1.6" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^6.0.1" - postcss-value-parser "^4.2.0" - postcss-preset-env@7.8.0: version "7.8.0" resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz" @@ -9482,6 +9536,61 @@ postcss-preset-env@7.8.0: postcss-selector-not "^6.0.1" postcss-value-parser "^4.2.0" +postcss-preset-env@^7.4.2: + version "7.8.3" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz" + integrity sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag== + dependencies: + "@csstools/postcss-cascade-layers" "^1.1.1" + "@csstools/postcss-color-function" "^1.1.1" + "@csstools/postcss-font-format-keywords" "^1.0.1" + "@csstools/postcss-hwb-function" "^1.0.2" + "@csstools/postcss-ic-unit" "^1.0.1" + "@csstools/postcss-is-pseudo-class" "^2.0.7" + "@csstools/postcss-nested-calc" "^1.0.0" + "@csstools/postcss-normalize-display-values" "^1.0.1" + "@csstools/postcss-oklab-function" "^1.1.1" + "@csstools/postcss-progressive-custom-properties" "^1.3.0" + "@csstools/postcss-stepped-value-functions" "^1.0.1" + "@csstools/postcss-text-decoration-shorthand" "^1.0.0" + "@csstools/postcss-trigonometric-functions" "^1.0.2" + "@csstools/postcss-unset-value" "^1.0.2" + autoprefixer "^10.4.13" + browserslist "^4.21.4" + css-blank-pseudo "^3.0.3" + css-has-pseudo "^3.0.4" + css-prefers-color-scheme "^6.0.3" + cssdb "^7.1.0" + postcss-attribute-case-insensitive "^5.0.2" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^4.2.4" + postcss-color-hex-alpha "^8.0.4" + postcss-color-rebeccapurple "^7.1.1" + postcss-custom-media "^8.0.2" + postcss-custom-properties "^12.1.10" + postcss-custom-selectors "^6.0.3" + postcss-dir-pseudo-class "^6.0.5" + postcss-double-position-gradients "^3.1.2" + postcss-env-function "^4.0.6" + postcss-focus-visible "^6.0.4" + postcss-focus-within "^5.0.4" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.5" + postcss-image-set-function "^4.0.7" + postcss-initial "^4.0.1" + postcss-lab-function "^4.2.1" + postcss-logical "^5.0.4" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.2.0" + postcss-opacity-percentage "^1.1.2" + postcss-overflow-shorthand "^3.0.4" + postcss-page-break "^3.0.4" + postcss-place "^7.0.5" + postcss-pseudo-class-any-link "^7.1.6" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^6.0.1" + postcss-value-parser "^4.2.0" + postcss-pseudo-class-any-link@^7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz" @@ -9521,6 +9630,24 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@8.4.16, postcss@^8.4.7: + version "8.4.16" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" + integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postcss@8.4.21, postcss@^8.1, postcss@^8.2.14, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4.19: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^6.0.6: version "6.0.23" resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" @@ -9530,15 +9657,6 @@ postcss@^6.0.6: source-map "^0.6.1" supports-color "^5.4.0" -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.6, postcss@8.4.21: - version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postcss@^7.0.14: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -9547,15 +9665,6 @@ postcss@^7.0.14: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.4.7, postcss@8.4.16: - version "8.4.16" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -9602,7 +9711,7 @@ prompts@~2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9652,12 +9761,17 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + qjobs@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@^6.11.0, qs@6.11.0: +qs@6.11.0, qs@^6.11.0: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -9671,6 +9785,11 @@ qs@~6.10.3: dependencies: side-channel "^1.0.4" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" @@ -9698,7 +9817,7 @@ range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^2.3.2, raw-body@2.5.1: +raw-body@2.5.1, raw-body@^2.3.2: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -9789,7 +9908,7 @@ react-dnd@^10.0.2: dnd-core "^10.0.2" hoist-non-react-statics "^3.3.0" -"react-dom@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react-dom@^16.13.1 || ^17.0.0 || ^18.0.0", react-dom@^16.14.0, react-dom@^16.3.2, "react-dom@^16.8.0 || ^17.0.0", react-dom@^16.8.3, "react-dom@^16.8.5 || ^17.0.0 || ^18.0.0", "react-dom@>= 16.3.0", "react-dom@>= 16.8", react-dom@>=16.3.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@16.x: +react-dom@^16.14.0: version "16.14.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz" integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== @@ -9828,12 +9947,7 @@ react-image@^4.0.1: resolved "https://registry.npmjs.org/react-image/-/react-image-4.1.0.tgz" integrity sha512-qwPNlelQe9Zy14K2pGWSwoL+vHsAwmJKS6gkotekDgRpcnRuzXNap00GfibD3eEPYu3WCPlyIUUNzcyHOrLHjw== -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -9917,7 +10031,7 @@ react-window@^1.8.5: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -"react@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react@^15.3.0 || 16 || 17 || 18", "react@^15.6 || ^16", react@^16.0.0, react@^16.13, react@^16.13.1, "react@^16.13.1 || ^17.0.0 || ^18.0.0", react@^16.14.0, react@^16.3.0, react@^16.3.2, react@^16.3.x, "react@^16.8.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^16.8.3, "react@^16.8.3 || ^17 || ^18", "react@^16.8.5 || ^17.0.0 || ^18.0.0", "react@>= 16.3.0", "react@>= 16.8", "react@>= 16.8.0", react@>=0.14, react@>=16.3.0, react@>=16.6.0, react@>=16.8, react@16.x: +react@^16.14.0: version "16.14.0" resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz" integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== @@ -10004,7 +10118,7 @@ redux-thunk@^2.3.0: resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz" integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -"redux@^3.1.0 || ^4.0.0", redux@^4, redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: +redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: version "4.2.1" resolved "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz" integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== @@ -10028,16 +10142,16 @@ regenerate@^1.4.2: resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: - version "0.13.11" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - regenerator-runtime@0.13.9: version "0.13.9" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: + version "0.13.11" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz" @@ -10085,6 +10199,32 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" +request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -10100,7 +10240,7 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.0.0, reselect@>1.0.0: +reselect@^4.0.0: version "4.1.7" resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz" integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== @@ -10133,15 +10273,6 @@ resolve-url-loader@5.0.0: postcss "^8.2.14" source-map "0.6.1" -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: - version "1.22.2" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@1.22.1: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" @@ -10151,6 +10282,15 @@ resolve@1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resp-modifier@6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz" @@ -10187,9 +10327,9 @@ rfdc@^1.3.0: resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" @@ -10250,31 +10390,26 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -"rxjs@^6.5.3 || ^7.4.0", "rxjs@^6.5.3 || ^7.5.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: - version "7.8.0" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -rxjs@^6.5.5, rxjs@~6.6.0, rxjs@6.6.7: +rxjs@6.6.7, rxjs@^6.5.5, rxjs@~6.6.0: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: +rxjs@^7.5.1, rxjs@^7.5.5: + version "7.8.0" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -10288,7 +10423,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -10305,14 +10440,6 @@ sanitize-html@^2.7.2: parse-srcset "^1.0.2" postcss "^8.3.11" -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - sass-loader@13.0.2: version "13.0.2" resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz" @@ -10329,6 +10456,14 @@ sass-loader@13.2.0: klona "^2.0.4" neo-async "^2.6.2" +sass-loader@^12.6.0: + version "12.6.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + sass-resources-loader@^2.1.1: version "2.2.5" resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" @@ -10339,13 +10474,6 @@ sass-resources-loader@^2.1.1: glob "^7.1.6" loader-utils "^2.0.0" -sass@^1.3.0, sass@~1.33.0: - version "1.33.0" - resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" - integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== - dependencies: - chokidar ">=3.0.0 <4.0.0" - sass@1.54.4: version "1.54.4" resolved "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz" @@ -10364,9 +10492,16 @@ sass@1.58.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sax@^1.2.4, sax@~1.2.4: +sass@~1.33.0: + version "1.33.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" + integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: @@ -10400,25 +10535,7 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -10449,14 +10566,23 @@ selfsigned@^2.0.1, selfsigned@^2.1.1: dependencies: node-forge "^1" -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" -semver@^5.7.1: +semver@7.3.8, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^5.3.0, semver@^5.6.0, semver@^5.7.1: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: @@ -10464,60 +10590,18 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.4.0" resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== dependencies: lru-cache "^6.0.0" -semver@^7.1.1: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.4: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5, semver@^7.3.7: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8, semver@7.3.8: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - semver@~7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - send@0.16.2: version "0.16.2" resolved "https://registry.npmjs.org/send/-/send-0.16.2.tgz" @@ -10570,7 +10654,7 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" -serve-index@^1.9.1, serve-index@1.9.1: +serve-index@1.9.1, serve-index@^1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== @@ -10583,16 +10667,6 @@ serve-index@^1.9.1, serve-index@1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@^1.14.1, serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - serve-static@1.13.2: version "1.13.2" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz" @@ -10603,6 +10677,16 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" +serve-static@1.15.0, serve-static@^1.14.1: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + server-destroy@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz" @@ -10797,7 +10881,7 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sortablejs@>=1.7.0, sortablejs@1.13.0: +sortablejs@1.13.0: version "1.13.0" resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz" integrity sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg== @@ -10807,7 +10891,7 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -10830,7 +10914,7 @@ source-map-loader@4.0.1: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: +source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10838,27 +10922,22 @@ source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.2 buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - source-map@0.5.6: version "0.5.6" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@0.7.3: version "0.7.3" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@0.7.4: +source-map@0.7.4, source-map@^0.7.3: version "0.7.4" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== @@ -10931,9 +11010,9 @@ sprintf-js@~1.0.2: resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.14.1: +sshpk@^1.14.1, sshpk@^1.7.0: version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" @@ -10980,6 +11059,11 @@ stacktrace-gps@^3.0.2: source-map "0.5.6" stackframe "^1.3.4" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + "statuses@>= 1.4.0 < 2", statuses@~1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz" @@ -10995,11 +11079,6 @@ statuses@~1.5.0: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -11024,20 +11103,6 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -11074,6 +11139,27 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" @@ -11098,7 +11184,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -11112,7 +11198,7 @@ stylus-loader@7.0.0: klona "^2.0.5" normalize-path "^3.0.0" -stylus@>=0.52.4, stylus@0.59.0: +stylus@0.59.0: version "0.59.0" resolved "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz" integrity sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg== @@ -11123,6 +11209,11 @@ stylus@>=0.52.4, stylus@0.59.0: sax "~1.2.4" source-map "^0.7.3" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -11137,14 +11228,7 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -11194,16 +11278,6 @@ terser-webpack-plugin@^5.1.3: serialize-javascript "^6.0.1" terser "^5.16.5" -terser@^5.16.5: - version "5.16.9" - resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" - integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - terser@5.14.2: version "5.14.2" resolved "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz" @@ -11224,6 +11298,16 @@ terser@5.16.3: commander "^2.20.0" source-map-support "~0.5.20" +terser@^5.16.5: + version "5.16.9" + resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" + integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" @@ -11233,7 +11317,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0, text-table@0.2.0: +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== @@ -11268,6 +11352,13 @@ tiny-warning@^1.0.2: resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tmp@0.2.1, tmp@^0.2.1, tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" @@ -11275,27 +11366,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmp@0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -11367,17 +11437,17 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-kill@^1.2.2, tree-kill@1.2.2: +tree-kill@1.2.2, tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -ts-node@^10.0.0: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== +ts-node@10.2.1, ts-node@^10.0.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" + integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw== dependencies: - "@cspotcode/source-map-support" "^0.8.0" + "@cspotcode/source-map-support" "0.6.1" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -11388,7 +11458,6 @@ ts-node@^10.0.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-node@^8.10.2: @@ -11412,21 +11481,6 @@ tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - tslib@2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" @@ -11437,6 +11491,16 @@ tslib@2.4.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@2.5.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1: + version "2.5.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -11529,16 +11593,16 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.6.2 <4.9", "typescript@>=4.8.2 <5.0", typescript@~4.8.4: - version "4.8.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - typescript@^2.5.0: version "2.9.2" resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== +typescript@~4.8.4: + version "4.8.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + ua-parser-js@^0.7.30: version "0.7.35" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" @@ -11654,7 +11718,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -11702,12 +11766,7 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.2.1: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^3.3.2: +uuid@^3.2.1, uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -11717,11 +11776,6 @@ uuid@^8.1.0, uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - valid-data-url@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" @@ -11756,16 +11810,16 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" - integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== - void-elements@3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" @@ -11821,6 +11875,23 @@ web-resource-inliner@^6.0.1: node-fetch "^2.6.0" valid-data-url "^3.0.0" +webdriver-manager@^12.1.8: + version "12.1.9" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.9.tgz#8d83543b92711b7217b39fef4cda958a4703d2df" + integrity sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ== + dependencies: + adm-zip "^0.5.2" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + webfontloader@1.6.28: version "1.6.28" resolved "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz" @@ -11862,7 +11933,7 @@ webpack-bundle-analyzer@^4.4.0: sirv "^1.0.7" ws "^7.3.1" -webpack-cli@^4.2.0, webpack-cli@4.x.x: +webpack-cli@^4.2.0: version "4.10.0" resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== @@ -11880,7 +11951,7 @@ webpack-cli@^4.2.0, webpack-cli@4.x.x: rechoir "^0.7.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.1, webpack-dev-middleware@5.3.3: +webpack-dev-middleware@5.3.3, webpack-dev-middleware@^5.3.1: version "5.3.3" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== @@ -11902,42 +11973,6 @@ webpack-dev-middleware@6.0.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.0.0, webpack-dev-server@^4.5.0: - version "4.13.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" - integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - webpack-dev-server@4.11.0: version "4.11.0" resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz" @@ -12008,7 +12043,43 @@ webpack-dev-server@4.11.1: webpack-dev-middleware "^5.3.1" ws "^8.4.2" -webpack-merge@^5.7.3, webpack-merge@5.8.0: +webpack-dev-server@^4.5.0: + version "4.13.2" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" + integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@5.8.0, webpack-merge@^5.7.3: version "5.8.0" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== @@ -12036,37 +12107,7 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.54.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=5, "webpack@4.x.x || 5.x.x": - version "5.78.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" - integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -webpack@>=2, webpack@5.76.1: +webpack@5.76.1: version "5.76.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== @@ -12096,7 +12137,37 @@ webpack@>=2, webpack@5.76.1: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: +webpack@^5.76.0: + version "5.78.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" + integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -12258,12 +12329,7 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^7.4.6: +ws@^7.3.1, ws@^7.4.6: version "7.5.9" resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -12293,6 +12359,19 @@ xml-name-validator@^4.0.0: resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" @@ -12338,32 +12417,6 @@ yargs-parser@^21.1.1: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.2.1, yargs@^17.3.1: - version "17.7.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yargs@17.1.1: version "17.1.1" resolved "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz" @@ -12390,6 +12443,32 @@ yargs@17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.2.1, yargs@^17.3.1: + version "17.7.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" @@ -12408,7 +12487,7 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -"zone.js@~0.11.4 || ~0.12.0", "zone.js@~0.11.4 || ~0.12.0 || ~0.13.0", zone.js@~0.11.5: +zone.js@~0.11.5: version "0.11.8" resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" integrity sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA== From 5761698a0db5207adbf8fd2e86be718f64743a3a Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 12:25:10 +0200 Subject: [PATCH 488/833] 101108: Automatic ng update @angular-devkit/build-angular@15 --- package.json | 2 +- yarn.lock | 2771 +++++++++++++++++++------------------------------- 2 files changed, 1031 insertions(+), 1742 deletions(-) diff --git a/package.json b/package.json index dbbf30cd26..b1b6060eaf 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ "zone.js": "~0.11.5" }, "devDependencies": { - "@angular-builders/custom-webpack": "~14.1.0", + "@angular-builders/custom-webpack": "~15.0.0", "@angular-devkit/build-angular": "^15.2.5", "@angular-eslint/builder": "15.2.1", "@angular-eslint/eslint-plugin": "15.2.1", diff --git a/yarn.lock b/yarn.lock index ac0b11b001..70d5b7f49d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,19 +2,6 @@ # yarn lockfile v1 -"@adobe/css-tools@^4.0.1": - version "4.2.0" - resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz" - integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== - -"@ampproject/remapping@2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@ampproject/remapping@^2.1.0": version "2.2.1" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" @@ -23,35 +10,27 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@angular-builders/custom-webpack@~14.1.0": - version "14.1.0" - resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-14.1.0.tgz" - integrity sha512-FLGDrBOg04cYvzCudeb15LWY2v91dtJ5+AfmP0aS/0T0D0AYmY4uM3FxZeh4jJcWETLvnHVFBCjan6y2Ct9J3A== +"@ampproject/remapping@2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== dependencies: - "@angular-devkit/architect" ">=0.1400.0 < 0.1500.0" - "@angular-devkit/build-angular" "^14.0.0" - "@angular-devkit/core" "^14.0.0" + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@angular-builders/custom-webpack@~15.0.0": + version "15.0.0" + resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-15.0.0.tgz" + integrity sha512-i8ZQ7rJ+RTy73MivvIdNAa8sZpiDy9wHBetAEyYSlGtjaSB3lntEFtBw9edfyRkpbifw53QA/N5haOwox987/Q== + dependencies: + "@angular-devkit/architect" ">=0.1500.0 < 0.1600.0" + "@angular-devkit/build-angular" "^15.0.0" + "@angular-devkit/core" "^15.0.0" lodash "^4.17.15" ts-node "^10.0.0" - tsconfig-paths "^3.9.0" + tsconfig-paths "^4.1.0" webpack-merge "^5.7.3" -"@angular-devkit/architect@0.1402.11", "@angular-devkit/architect@>=0.1400.0 < 0.1500.0": - version "0.1402.11" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.11.tgz" - integrity sha512-RuSZrBQ+QbipAESZ4aXCyAMQHaEaDyyV/FDS9J2HJWfEFbRD5oxlEt/tBC8XjmJQsktaUOh07GT8MNJjPKVAQw== - dependencies: - "@angular-devkit/core" "14.2.11" - rxjs "6.6.7" - -"@angular-devkit/architect@0.1502.5", "@angular-devkit/architect@~0.1502.0": - version "0.1502.5" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" - integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== - dependencies: - "@angular-devkit/core" "15.2.5" - rxjs "6.6.7" - "@angular-devkit/architect@^0.1202.10": version "0.1202.18" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.18.tgz" @@ -60,77 +39,15 @@ "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/build-angular@^14.0.0": - version "14.2.11" - resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.11.tgz" - integrity sha512-O3X7GXcCBCGceVSHT+GIJ2JrRCg2YcO7HtNavpmPrraNr1o+aCdTkmT5WTS2cqWkZBm/z0wqKR8PsX/ZoD2r1A== +"@angular-devkit/architect@>=0.1500.0 < 0.1600.0", "@angular-devkit/architect@~0.1502.0", "@angular-devkit/architect@0.1502.5": + version "0.1502.5" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" + integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== dependencies: - "@ampproject/remapping" "2.2.0" - "@angular-devkit/architect" "0.1402.11" - "@angular-devkit/build-webpack" "0.1402.11" - "@angular-devkit/core" "14.2.11" - "@babel/core" "7.18.10" - "@babel/generator" "7.18.12" - "@babel/helper-annotate-as-pure" "7.18.6" - "@babel/plugin-proposal-async-generator-functions" "7.18.10" - "@babel/plugin-transform-async-to-generator" "7.18.6" - "@babel/plugin-transform-runtime" "7.18.10" - "@babel/preset-env" "7.18.10" - "@babel/runtime" "7.18.9" - "@babel/template" "7.18.10" - "@discoveryjs/json-ext" "0.5.7" - "@ngtools/webpack" "14.2.11" - ansi-colors "4.1.3" - babel-loader "8.2.5" - babel-plugin-istanbul "6.1.1" - browserslist "^4.9.1" - cacache "16.1.2" - copy-webpack-plugin "11.0.0" - critters "0.0.16" - css-loader "6.7.1" - esbuild-wasm "0.15.5" - glob "8.0.3" - https-proxy-agent "5.0.1" - inquirer "8.2.4" - jsonc-parser "3.1.0" - karma-source-map-support "1.4.0" - less "4.1.3" - less-loader "11.0.0" - license-webpack-plugin "4.0.2" - loader-utils "3.2.1" - mini-css-extract-plugin "2.6.1" - minimatch "5.1.0" - open "8.4.0" - ora "5.4.1" - parse5-html-rewriting-stream "6.0.1" - piscina "3.2.0" - postcss "8.4.16" - postcss-import "15.0.0" - postcss-loader "7.0.1" - postcss-preset-env "7.8.0" - regenerator-runtime "0.13.9" - resolve-url-loader "5.0.0" + "@angular-devkit/core" "15.2.5" rxjs "6.6.7" - sass "1.54.4" - sass-loader "13.0.2" - semver "7.3.7" - source-map-loader "4.0.0" - source-map-support "0.5.21" - stylus "0.59.0" - stylus-loader "7.0.0" - terser "5.14.2" - text-table "0.2.0" - tree-kill "1.2.2" - tslib "2.4.0" - webpack "5.76.1" - webpack-dev-middleware "5.3.3" - webpack-dev-server "4.11.0" - webpack-merge "5.8.0" - webpack-subresource-integrity "5.1.0" - optionalDependencies: - esbuild "0.15.5" -"@angular-devkit/build-angular@^15.2.5": +"@angular-devkit/build-angular@^15.0.0", "@angular-devkit/build-angular@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.5.tgz" integrity sha512-D2LxjBtUlgJnPxybOIN0XsENEGkVkqCGBBii5oK84HvgBHXO/EyP1WXpOdb2lOYSUZyjhOOs0q42LCobJoaxUw== @@ -198,14 +115,6 @@ optionalDependencies: esbuild "0.17.8" -"@angular-devkit/build-webpack@0.1402.11": - version "0.1402.11" - resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.11.tgz" - integrity sha512-Ajyg1O6B6JSHsDlPdh165uy3glW4IiUlRXu8VVAOSA88WIT1Dl17f4Oun0/t27ip0/CNceiVY9MzOqIwGL1E6g== - dependencies: - "@angular-devkit/architect" "0.1402.11" - rxjs "6.6.7" - "@angular-devkit/build-webpack@0.1502.5": version "0.1502.5" resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1502.5.tgz" @@ -214,7 +123,7 @@ "@angular-devkit/architect" "0.1502.5" rxjs "6.6.7" -"@angular-devkit/core@12.2.18", "@angular-devkit/core@^12.2.17": +"@angular-devkit/core@^12.2.17", "@angular-devkit/core@12.2.18": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" integrity sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww== @@ -226,18 +135,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@14.2.11", "@angular-devkit/core@^14.0.0": - version "14.2.11" - resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.11.tgz" - integrity sha512-cBIGs6y9rykOQqnuAQOB1DgIRyBFYtvKRJb7QNUfIJ0qUfARKkuV/yikv3lrb95ePGkmoRzmjkFqcFZiYU+r7A== - dependencies: - ajv "8.11.0" - ajv-formats "2.1.1" - jsonc-parser "3.1.0" - rxjs "6.6.7" - source-map "0.7.4" - -"@angular-devkit/core@15.2.5", "@angular-devkit/core@~15.2.0": +"@angular-devkit/core@^15.0.0", "@angular-devkit/core@~15.2.0", "@angular-devkit/core@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.5.tgz" integrity sha512-ZfjEkAe2yYeekc3xjZ/U4pK9nb+w6BFwAEjou6mE8PWZH7iYskm0YCCXkmu+B+zViEcCLhAkJAxu9MwX4efd8g== @@ -248,7 +146,7 @@ rxjs "6.6.7" source-map "0.7.4" -"@angular-devkit/schematics@12.2.18", "@angular-devkit/schematics@^12.2.17": +"@angular-devkit/schematics@^12.2.17", "@angular-devkit/schematics@12.2.18": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" integrity sha512-bZ9NS5PgoVfetRC6WeQBHCY5FqPZ9y2TKHUo12sOB2YSL3tgWgh1oXyP8PtX34gasqsLjNULxEQsAQYEsiX/qQ== @@ -325,7 +223,7 @@ "@angular-eslint/bundled-angular-compiler" "15.2.1" "@typescript-eslint/utils" "5.48.2" -"@angular/animations@^15.2.6": +"@angular/animations@^15.2.6", "@angular/animations@>=10.0.0", "@angular/animations@>=13.0.0 <14", "@angular/animations@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/animations/-/animations-15.2.6.tgz" integrity sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ== @@ -341,7 +239,7 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@^15.2.5": +"@angular/cli@^15.2.5", "@angular/cli@>= 15.0.0 < 16.0.0", "@angular/cli@>=12": version "15.2.5" resolved "https://registry.npmjs.org/@angular/cli/-/cli-15.2.5.tgz" integrity sha512-TmkkeJkdfDkC6b2SNQcLlr1rsl2anc5rrrY3gawOVXYXBExMxAi2SNJsHZzUXfiitW52aZkAyajF1VFazs8PRw== @@ -365,14 +263,14 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@^15.2.6": +"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^15.2.6": +"@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" integrity sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw== @@ -388,21 +286,21 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@^15.2.6": +"@angular/compiler@^15.2.6", "@angular/compiler@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.6.tgz" integrity sha512-6oBAIY5KcC1UNsrnWGLcopZ9RD7c0HzpTCQY46N6HytHtUjBvzLbGWZu5MfahPtIjKz9FMVYBX9hugcbVpWnTA== dependencies: tslib "^2.3.0" -"@angular/core@^15.2.6": +"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== dependencies: tslib "^2.3.0" -"@angular/forms@^15.2.6": +"@angular/forms@^13.0.0", "@angular/forms@^15.2.6", "@angular/forms@>=10.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/forms/-/forms-15.2.6.tgz" integrity sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw== @@ -414,7 +312,7 @@ resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.6.tgz" integrity sha512-q6u4XhFReJ3GtA7dC5rJaEBQPjJUjOz9PlwHSOxZxugFP99ddDNBBFd0caa446G54kQdZFG7j7w7BiAp2/srmQ== -"@angular/localize@15.2.6": +"@angular/localize@^13.0.0", "@angular/localize@^15.0.0", "@angular/localize@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/localize/-/localize-15.2.6.tgz" integrity sha512-2WJBYRJ6aulo0fS9BUGr4fsdyk+5WcbZoiFURgs0sNrJtYCd51I9rQNwl3OGyYReNmFx8GgLc4K7+rEKhKfSbA== @@ -423,21 +321,21 @@ glob "8.1.0" yargs "^17.2.1" -"@angular/platform-browser-dynamic@^15.2.6": +"@angular/platform-browser-dynamic@^15.2.6", "@angular/platform-browser-dynamic@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.6.tgz" integrity sha512-ZSyiigpxBWIM5f8t/a28Y3BCzHn1FtI2KsJysE7di5UUflOzwbxbfycVlpiZp0girbDYRyF18vvefvitNh17Gw== dependencies: tslib "^2.3.0" -"@angular/platform-browser@^15.2.6": +"@angular/platform-browser@^15.2.6", "@angular/platform-browser@>=10.0.0", "@angular/platform-browser@15.2.6", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.6.tgz" integrity sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA== dependencies: tslib "^2.3.0" -"@angular/platform-server@^15.2.6": +"@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== @@ -446,7 +344,7 @@ tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^15.2.6": +"@angular/router@^15.0.0", "@angular/router@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/router/-/router-15.2.6.tgz" integrity sha512-yB9uc9Xi9N0dErsugleywBA1KYG+GQ9WWSlri34oe2VsCqZazImn71n4wKPtrm2Xiy/mI23wJcr+jiCAtzp49Q== @@ -465,26 +363,26 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/core@7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz" - integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.18.9" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.10" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -533,45 +431,6 @@ json5 "^2.2.2" semver "^6.3.0" -"@babel/core@^7.12.3": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@7.18.12", "@babel/generator@^7.18.10": - version "7.18.12" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz" - integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== - dependencies: - "@babel/types" "^7.18.10" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@7.20.14", "@babel/generator@^7.20.7": - version "7.20.14" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - "@babel/generator@^7.18.9", "@babel/generator@^7.19.3", "@babel/generator@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" @@ -582,7 +441,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@7.18.6", "@babel/helper-annotate-as-pure@^7.18.6": +"@babel/generator@^7.20.7", "@babel/generator@7.20.14": + version "7.20.14" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== @@ -630,7 +498,7 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.3.1" -"@babel/helper-define-polyfill-provider@^0.3.2", "@babel/helper-define-polyfill-provider@^0.3.3": +"@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== @@ -709,7 +577,7 @@ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": +"@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== @@ -745,7 +613,7 @@ dependencies: "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@7.18.6", "@babel/helper-split-export-declaration@^7.18.6": +"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -795,7 +663,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.9", "@babel/parser@^7.19.3", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": +"@babel/parser@^7.10.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.9", "@babel/parser@^7.19.3", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== @@ -816,17 +684,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@7.18.10", "@babel/plugin-proposal-async-generator-functions@^7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz" - integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-async-generator-functions@7.20.7", "@babel/plugin-proposal-async-generator-functions@^7.20.1": +"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== @@ -901,7 +759,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.9", "@babel/plugin-proposal-object-rest-spread@^7.20.2": +"@babel/plugin-proposal-object-rest-spread@^7.20.2": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== @@ -990,7 +848,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.18.6", "@babel/plugin-syntax-import-assertions@^7.20.0": +"@babel/plugin-syntax-import-assertions@^7.20.0": version "7.20.0" resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== @@ -1067,16 +925,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" - -"@babel/plugin-transform-async-to-generator@7.20.7", "@babel/plugin-transform-async-to-generator@^7.18.6": +"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== @@ -1092,14 +941,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.18.9", "@babel/plugin-transform-block-scoping@^7.20.2": +"@babel/plugin-transform-block-scoping@^7.20.2": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.18.9", "@babel/plugin-transform-classes@^7.20.2": +"@babel/plugin-transform-classes@^7.20.2": version "7.21.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== @@ -1122,7 +971,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.18.9", "@babel/plugin-transform-destructuring@^7.20.2": +"@babel/plugin-transform-destructuring@^7.20.2": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz" integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== @@ -1182,7 +1031,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.6", "@babel/plugin-transform-modules-amd@^7.19.6": +"@babel/plugin-transform-modules-amd@^7.19.6": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== @@ -1190,7 +1039,7 @@ "@babel/helper-module-transforms" "^7.20.11" "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.19.6": +"@babel/plugin-transform-modules-commonjs@^7.19.6": version "7.21.2" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz" integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== @@ -1199,7 +1048,7 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-simple-access" "^7.20.2" -"@babel/plugin-transform-modules-systemjs@^7.18.9", "@babel/plugin-transform-modules-systemjs@^7.19.6": +"@babel/plugin-transform-modules-systemjs@^7.19.6": version "7.20.11" resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz" integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== @@ -1217,7 +1066,7 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": version "7.20.5" resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== @@ -1240,7 +1089,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.8", "@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": +"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": version "7.21.3" resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz" integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== @@ -1269,18 +1118,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz" - integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - semver "^6.3.0" - "@babel/plugin-transform-runtime@7.19.6": version "7.19.6" resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" @@ -1300,7 +1137,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.18.9", "@babel/plugin-transform-spread@^7.19.0": +"@babel/plugin-transform-spread@^7.19.0": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== @@ -1344,87 +1181,6 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz" - integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.10" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.18.9" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.9" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.18.9" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.18.9" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.10" - babel-plugin-polyfill-corejs2 "^0.3.2" - babel-plugin-polyfill-corejs3 "^0.5.3" - babel-plugin-polyfill-regenerator "^0.4.0" - core-js-compat "^3.22.1" - semver "^6.3.0" - "@babel/preset-env@7.20.2": version "7.20.2" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz" @@ -1522,20 +1278,13 @@ resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@7.17.2", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@>=7", "@babel/runtime@7.17.2": version "7.17.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" - integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@7.20.13": version "7.20.13" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz" @@ -1543,16 +1292,7 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/template@7.18.10": - version "7.18.10" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" - -"@babel/template@7.20.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7", "@babel/template@7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -1561,7 +1301,7 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/traverse@^7.10.3", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.3", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": +"@babel/traverse@^7.10.3", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.3", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": version "7.21.4" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz" integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== @@ -1577,7 +1317,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.10.3", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.3", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": +"@babel/types@^7.10.3", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.3", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz" integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== @@ -1591,19 +1331,14 @@ resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960" - integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + "@jridgewell/trace-mapping" "0.3.9" -"@csstools/postcss-cascade-layers@^1.0.5", "@csstools/postcss-cascade-layers@^1.1.1": +"@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz" integrity sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA== @@ -1753,7 +1488,7 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": +"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.7": version "0.5.7" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== @@ -1777,121 +1512,11 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" -"@esbuild/android-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.8.tgz#b3d5b65a3b2e073a6c7ee36b1f3c30c8f000315b" - integrity sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ== - -"@esbuild/android-arm@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.8.tgz#c41e496af541e175369d48164d0cf01a5f656cf6" - integrity sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w== - -"@esbuild/android-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.8.tgz#080fa67c29be77f5a3ca5ee4cc78d5bf927e3a3b" - integrity sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg== - -"@esbuild/darwin-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.8.tgz#053622bf9a82f43d5c075b7818e02618f7b4a397" - integrity sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg== - "@esbuild/darwin-x64@0.17.8": version "0.17.8" resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz" integrity sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw== -"@esbuild/freebsd-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.8.tgz#e6738d0081ba0721a5c6c674e84c6e7fcea61989" - integrity sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A== - -"@esbuild/freebsd-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.8.tgz#1855e562f2b730f4483f6e94086e9e2597feb4c3" - integrity sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q== - -"@esbuild/linux-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.8.tgz#481da38952721a3fdb77c17a36ceaacc4270b5c5" - integrity sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww== - -"@esbuild/linux-arm@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.8.tgz#18127072b270bb6321c6d11be20bfd30e0d6ad17" - integrity sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA== - -"@esbuild/linux-ia32@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.8.tgz#ee400af7b3bc69e8ca2e593ca35156ffb9abd54f" - integrity sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA== - -"@esbuild/linux-loong64@0.15.5": - version "0.15.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz#91aef76d332cdc7c8942b600fa2307f3387e6f82" - integrity sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A== - -"@esbuild/linux-loong64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.8.tgz#8c509d8a454693d39824b83b3f66c400872fce82" - integrity sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA== - -"@esbuild/linux-mips64el@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.8.tgz#f2b0d36e63fb26bc3f95b203b6a80638292101ca" - integrity sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA== - -"@esbuild/linux-ppc64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.8.tgz#1e628be003e036e90423716028cc884fe5ba25bd" - integrity sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw== - -"@esbuild/linux-riscv64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.8.tgz#419a815cb4c3fb9f1b78ef5295f5b48b8bf6427a" - integrity sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw== - -"@esbuild/linux-s390x@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.8.tgz#291c49ae5c3d11d226352755c0835911fe1a9e5c" - integrity sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw== - -"@esbuild/linux-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.8.tgz#03199d91c76faf80bd54104f5cbf0a489bc39f6a" - integrity sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA== - -"@esbuild/netbsd-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.8.tgz#b436d767e1b21852f9ed212e2bb57f77203b0ae2" - integrity sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q== - -"@esbuild/openbsd-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.8.tgz#d1481d8539e21d4729cd04a0450a26c2c8789e89" - integrity sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg== - -"@esbuild/sunos-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.8.tgz#2cfb8126e079b2c00fd1bf095541e9f5c47877e4" - integrity sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw== - -"@esbuild/win32-arm64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.8.tgz#7c6ecfd097ca23b82119753bf7072bbaefe51e3a" - integrity sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg== - -"@esbuild/win32-ia32@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.8.tgz#cffec63c3cb0ef8563a04df4e09fa71056171d00" - integrity sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w== - -"@esbuild/win32-x64@0.17.8": - version "0.17.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz#200a0965cf654ac28b971358ecdca9cc5b44c335" - integrity sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg== - "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -1991,7 +1616,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -2009,16 +1634,16 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" @@ -2027,6 +1652,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@kolkov/ngx-gallery@^2.0.1": version "2.0.1" resolved "https://registry.npmjs.org/@kolkov/ngx-gallery/-/ngx-gallery-2.0.1.tgz" @@ -2039,7 +1672,7 @@ resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@material-ui/core@^4.11.0": +"@material-ui/core@^4.0.0", "@material-ui/core@^4.11.0", "@material-ui/core@^4.12.1", "@material-ui/core@^4.7.2": version "4.12.4" resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz" integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== @@ -2057,7 +1690,7 @@ react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" -"@material-ui/icons@^4.9.1": +"@material-ui/icons@^4.5.1", "@material-ui/icons@^4.9.1": version "4.11.3" resolved "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz" integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== @@ -2163,19 +1796,14 @@ dependencies: tslib "^2.0.0" -"@ngrx/store@^15.4.0": +"@ngrx/store@^15.4.0", "@ngrx/store@15.4.0": version "15.4.0" resolved "https://registry.npmjs.org/@ngrx/store/-/store-15.4.0.tgz" integrity sha512-OvCuNBHL8mAUnRTS6QSFm+IunspsYNu2cCwDovBNn7EGhxRuGihBeNoX47jCqWPHBFtokj4BlatDfpJ/yCh4xQ== dependencies: tslib "^2.0.0" -"@ngtools/webpack@14.2.11": - version "14.2.11" - resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.11.tgz" - integrity sha512-4enbLFAp98uTgWYF6OFceQqLcfv2/0brIrNN4iWT9xe/Mh3zdCt+eH42zvNRsqo9WXNWRSLvnx8I924p83LNlw== - -"@ngtools/webpack@15.2.5", "@ngtools/webpack@^15.2.5": +"@ngtools/webpack@^15.2.5", "@ngtools/webpack@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== @@ -2236,7 +1864,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2407,15 +2035,6 @@ resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz" integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== -"@schematics/angular@15.2.5": - version "15.2.5" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" - integrity sha512-YN0A5bzuqEmLdwbcQRop9TFj0QVxTC/XCL0K5DfDymVBS2j09NMyLLVc6TDOs+J/fMQr5EwiT149ikzqiUmAcw== - dependencies: - "@angular-devkit/core" "15.2.5" - "@angular-devkit/schematics" "15.2.5" - jsonc-parser "3.2.0" - "@schematics/angular@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz" @@ -2425,6 +2044,15 @@ "@angular-devkit/schematics" "12.2.18" jsonc-parser "3.0.0" +"@schematics/angular@15.2.5": + version "15.2.5" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" + integrity sha512-YN0A5bzuqEmLdwbcQRop9TFj0QVxTC/XCL0K5DfDymVBS2j09NMyLLVc6TDOs+J/fMQr5EwiT149ikzqiUmAcw== + dependencies: + "@angular-devkit/core" "15.2.5" + "@angular-devkit/schematics" "15.2.5" + jsonc-parser "3.2.0" + "@sigstore/protobuf-specs@^0.1.0": version "0.1.0" resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz" @@ -2605,7 +2233,7 @@ resolved "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz" integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -2625,7 +2253,7 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/node@*", "@types/node@>=10.0.0", "@types/node@^14.14.31", "@types/node@^14.14.9": +"@types/node@*", "@types/node@^14.14.31", "@types/node@^14.14.9", "@types/node@>=10.0.0": version "14.18.42" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz" integrity sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg== @@ -2667,7 +2295,7 @@ dependencies: "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@^16.8.6 || ^17.0.0": version "17.0.57" resolved "https://registry.npmjs.org/@types/react/-/react-17.0.57.tgz" integrity sha512-e4msYpu5QDxzNrXDHunU/VPyv2M1XemGG/p7kfCjUiPtlLDCWLGQfgAMng6YyisWYxZ09mYdQlmMnyS0NfZdEg== @@ -2749,7 +2377,7 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.43.0": +"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@^5.43.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz" integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== @@ -2765,7 +2393,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.43.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.43.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz" integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== @@ -2847,6 +2475,20 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/utils@^5.57.0", "@typescript-eslint/utils@5.58.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/utils@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz" @@ -2861,20 +2503,6 @@ eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.57.0": - version "5.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" - integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/typescript-estree" "5.58.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - "@typescript-eslint/visitor-keys@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz" @@ -3059,7 +2687,7 @@ abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1, abbrev@^1.0.0: +abbrev@^1.0.0, abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3103,21 +2731,31 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1: +acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - adjust-sourcemap-loader@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" @@ -3126,12 +2764,7 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -adm-zip@^0.5.2: - version "0.5.10" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.10.tgz#4a51d5ab544b1f5ce51e1b9043139b639afff45b" - integrity sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ== - -agent-base@6, agent-base@^6.0.2: +agent-base@^6.0.2, agent-base@6: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -3155,6 +2788,13 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv-formats@^2.1.1, ajv-formats@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-formats@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz" @@ -3162,13 +2802,6 @@ ajv-formats@2.1.0: dependencies: ajv "^8.0.0" -ajv-formats@2.1.1, ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -3181,27 +2814,17 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@8.11.0: - version "8.11.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@8.12.0, ajv@^8.8.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@8.6.2, ajv@^8.0.0: +ajv@^8.0.0, ajv@8.6.2: version "8.6.2" resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== @@ -3211,14 +2834,24 @@ ajv@8.6.2, ajv@^8.0.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@^8.8.0, ajv@^8.8.2: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@8.12.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" uri-js "^4.2.2" angular-idle-preload@3.0.0: @@ -3233,7 +2866,7 @@ angulartics2@^12.0.0: dependencies: tslib "^2.3.0" -ansi-colors@4.1.3, ansi-colors@^4.1.1: +ansi-colors@^4.1.1, ansi-colors@4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== @@ -3250,11 +2883,6 @@ ansi-html-community@^0.0.8: resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" @@ -3265,11 +2893,6 @@ ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -3277,7 +2900,14 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -3342,16 +2972,16 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -3363,23 +2993,11 @@ array-includes@^3.1.6: get-intrinsic "^1.1.3" is-string "^1.0.7" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" @@ -3400,11 +3018,6 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - asn1@~0.2.3: version "0.2.6" resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" @@ -3412,7 +3025,7 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0, assert-plus@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -3449,6 +3062,18 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +autoprefixer@^10.4.13: + version "10.4.14" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + autoprefixer@10.4.13: version "10.4.13" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" @@ -3461,18 +3086,6 @@ autoprefixer@10.4.13: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -autoprefixer@^10.4.13, autoprefixer@^10.4.8: - version "10.4.14" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -3488,18 +3101,11 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.4.3: +"axe-core@^3 || ^4", axe-core@^4.4.3: version "4.6.3" resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== -axios@0.21.4: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - axios@^0.27.2: version "0.27.2" resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" @@ -3508,6 +3114,13 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +axios@0.21.4: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + axobject-query@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz" @@ -3515,16 +3128,6 @@ axobject-query@3.1.1: dependencies: deep-equal "^2.0.5" -babel-loader@8.2.5: - version "8.2.5" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - babel-loader@9.1.2: version "9.1.2" resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz" @@ -3544,7 +3147,7 @@ babel-plugin-istanbul@6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-polyfill-corejs2@^0.3.2, babel-plugin-polyfill-corejs2@^0.3.3: +babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== @@ -3553,14 +3156,6 @@ babel-plugin-polyfill-corejs2@^0.3.2, babel-plugin-polyfill-corejs2@^0.3.3: "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz" - integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - core-js-compat "^3.21.0" - babel-plugin-polyfill-corejs3@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" @@ -3569,7 +3164,7 @@ babel-plugin-polyfill-corejs3@^0.6.0: "@babel/helper-define-polyfill-provider" "^0.3.3" core-js-compat "^3.25.1" -babel-plugin-polyfill-regenerator@^0.4.0, babel-plugin-polyfill-regenerator@^0.4.1: +babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== @@ -3586,7 +3181,7 @@ base64-js@^1.2.0, base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@2.0.0, base64id@~2.0.0: +base64id@~2.0.0, base64id@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== @@ -3653,7 +3248,7 @@ bluebird@^3.7.2: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.1, body-parser@^1.19.0: +body-parser@^1.19.0, body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== @@ -3686,7 +3281,7 @@ boolbase@^1.0.0: resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bootstrap@^4.6.1: +bootstrap@^4.0.0, bootstrap@^4.6.1: version "4.6.2" resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz" integrity sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ== @@ -3777,7 +3372,7 @@ browser-sync@^2.27.10: ua-parser-js "^1.0.33" yargs "^17.3.1" -browserslist@4.21.5, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.9.1: +browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4.21.0", browserslist@4.21.5: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3837,49 +3432,6 @@ bytesish@^0.4.1: resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== -cacache@16.1.2: - version "16.1.2" - resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz" - integrity sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^1.1.1" - -cacache@17.0.4: - version "17.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" - integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^8.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cacache@^15.0.5: version "15.3.0" resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" @@ -3947,6 +3499,25 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" +cacache@17.0.4: + version "17.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" + integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^8.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cachedir@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" @@ -3987,25 +3558,6 @@ cerialize@0.1.18: dependencies: typescript "^2.5.0" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@~4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -4015,6 +3567,54 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@~4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" @@ -4054,7 +3654,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: +chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4191,16 +3791,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" @@ -4223,12 +3823,12 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== +commander@^2.2.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^2.2.0, commander@^2.20.0: +commander@^2.20.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4243,11 +3843,21 @@ commander@^6.1.0: resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.0.0, commander@^7.2.0: +commander@^7.0.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== + comment-parser@1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" @@ -4306,16 +3916,6 @@ connect-history-api-fallback@^2.0.0: resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -connect@3.6.6: - version "3.6.6" - resolved "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz" - integrity sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - connect@^3.7.0: version "3.7.0" resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" @@ -4326,6 +3926,16 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" +connect@3.6.6: + version "3.6.6" + resolved "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz" + integrity sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" @@ -4361,6 +3971,11 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + cookie@0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" @@ -4371,11 +3986,6 @@ cookie@0.5.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - copy-anything@^2.0.1: version "2.0.6" resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" @@ -4390,18 +4000,6 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - copy-webpack-plugin@^6.4.1: version "6.4.1" resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz" @@ -4419,28 +4017,40 @@ copy-webpack-plugin@^6.4.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" -core-js-compat@^3.21.0, core-js-compat@^3.22.1, core-js-compat@^3.25.1: +copy-webpack-plugin@11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.25.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== dependencies: browserslist "^4.21.5" -core-js@^3.7.0: +core-js@^3.7.0, core-js@^3.8.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + cors@~2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" @@ -4519,20 +4129,6 @@ css-has-pseudo@^3.0.4: dependencies: postcss-selector-parser "^6.0.9" -css-loader@6.7.1: - version "6.7.1" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz" - integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.7" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.5" - css-loader@6.7.3: version "6.7.3" resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz" @@ -4576,7 +4172,7 @@ css-what@^6.0.1: resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^7.0.0, cssdb@^7.1.0: +cssdb@^7.1.0: version "7.5.4" resolved "https://registry.npmjs.org/cssdb/-/cssdb-7.5.4.tgz" integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== @@ -4628,7 +4224,7 @@ cypress-axe@^1.1.0: resolved "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.4.0.tgz" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -cypress@12.9.0: +"cypress@^10 || ^11 || ^12", cypress@12.9.0: version "12.9.0" resolved "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz" integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== @@ -4706,7 +4302,7 @@ date-fns-tz@^1.3.7: resolved "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz" integrity sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ== -date-fns@^2.29.3: +date-fns@^2.29.3, date-fns@>=2.0.0: version "2.29.3" resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== @@ -4721,20 +4317,48 @@ dayjs@^1.10.4: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -debug@2.6.9, debug@^2.2.0: +debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" @@ -4742,13 +4366,6 @@ debug@4.3.2: dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decimal.js@^10.2.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" @@ -4819,19 +4436,6 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" -del@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - integrity sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ== - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -4842,7 +4446,7 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@2.0.0, depd@^2.0.0, depd@~2.0.0: +depd@^2.0.0, depd@~2.0.0, depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -4857,16 +4461,16 @@ dependency-graph@^0.11.0: resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - destroy@~1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" @@ -5104,7 +4708,7 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.13: +encoding@^0.1.0, encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -5158,7 +4762,7 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6: +enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -5311,143 +4915,11 @@ es6-promisify@^6.0.0: resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz" integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== -esbuild-android-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz#3c7b2f2a59017dab3f2c0356188a8dd9cbdc91c8" - integrity sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg== - -esbuild-android-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz#e301db818c5a67b786bf3bb7320e414ac0fcf193" - integrity sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg== - -esbuild-darwin-64@0.15.5: - version "0.15.5" - resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz" - integrity sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ== - -esbuild-darwin-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz#ad89dafebb3613fd374f5a245bb0ce4132413997" - integrity sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg== - -esbuild-freebsd-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz#6bfb52b4a0d29c965aa833e04126e95173289c8a" - integrity sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA== - -esbuild-freebsd-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz#38a3fed8c6398072f9914856c7c3e3444f9ef4dd" - integrity sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w== - -esbuild-linux-32@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz#942dc70127f0c0a7ea91111baf2806e61fc81b32" - integrity sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ== - -esbuild-linux-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz#6d748564492d5daaa7e62420862c31ac3a44aed9" - integrity sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg== - -esbuild-linux-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz#28cd899beb2d2b0a3870fd44f4526835089a318d" - integrity sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA== - -esbuild-linux-arm@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz#6441c256225564d8794fdef5b0a69bc1a43051b5" - integrity sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q== - -esbuild-linux-mips64le@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz#d4927f817290eaffc062446896b2a553f0e11981" - integrity sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ== - -esbuild-linux-ppc64le@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz#b6d660dc6d5295f89ac51c675f1a2f639e2fb474" - integrity sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw== - -esbuild-linux-riscv64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz#2801bf18414dc3d3ad58d1ea83084f00d9d84896" - integrity sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA== - -esbuild-linux-s390x@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz#12a634ae6d3384cacc2b8f4201047deafe596eae" - integrity sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ== - -esbuild-netbsd-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz#951bbf87600512dfcfbe3b8d9d117d684d26c1b8" - integrity sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w== - -esbuild-openbsd-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz#26705b61961d525d79a772232e8b8f211fdbb035" - integrity sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA== - -esbuild-sunos-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz#d794da1ae60e6e2f6194c44d7b3c66bf66c7a141" - integrity sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA== - -esbuild-wasm@0.15.5: - version "0.15.5" - resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz" - integrity sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A== - esbuild-wasm@0.17.8: version "0.17.8" resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz" integrity sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ== -esbuild-windows-32@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz#0670326903f421424be86bc03b7f7b3ff86a9db7" - integrity sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg== - -esbuild-windows-64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz#64f32acb7341f3f0a4d10e8ff1998c2d1ebfc0a9" - integrity sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw== - -esbuild-windows-arm64@0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz#4fe7f333ce22a922906b10233c62171673a3854b" - integrity sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA== - -esbuild@0.15.5: - version "0.15.5" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz" - integrity sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg== - optionalDependencies: - "@esbuild/linux-loong64" "0.15.5" - esbuild-android-64 "0.15.5" - esbuild-android-arm64 "0.15.5" - esbuild-darwin-64 "0.15.5" - esbuild-darwin-arm64 "0.15.5" - esbuild-freebsd-64 "0.15.5" - esbuild-freebsd-arm64 "0.15.5" - esbuild-linux-32 "0.15.5" - esbuild-linux-64 "0.15.5" - esbuild-linux-arm "0.15.5" - esbuild-linux-arm64 "0.15.5" - esbuild-linux-mips64le "0.15.5" - esbuild-linux-ppc64le "0.15.5" - esbuild-linux-riscv64 "0.15.5" - esbuild-linux-s390x "0.15.5" - esbuild-netbsd-64 "0.15.5" - esbuild-openbsd-64 "0.15.5" - esbuild-sunos-64 "0.15.5" - esbuild-windows-32 "0.15.5" - esbuild-windows-64 "0.15.5" - esbuild-windows-arm64 "0.15.5" - esbuild@0.17.8: version "0.17.8" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz" @@ -5491,9 +4963,9 @@ escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: @@ -5591,7 +5063,7 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@^5.1.1, eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5599,7 +5071,15 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.0.0, eslint-scope@^7.1.1: +eslint-scope@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== @@ -5624,7 +5104,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@^8.28.0: +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.20.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.28.0, eslint@>=2, eslint@>=5: version "8.38.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz" integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== @@ -5718,7 +5198,7 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@1.8.1, etag@^1.8.1, etag@~1.8.1: +etag@^1.8.1, etag@~1.8.1, etag@1.8.1: version "1.8.1" resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== @@ -5743,21 +5223,6 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -5773,6 +5238,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" @@ -5792,7 +5272,7 @@ express-static-gzip@^2.1.5: dependencies: serve-static "^1.14.1" -express@^4.17.1, express@^4.17.3, express@^4.18.2: +express@^4.15.2, express@^4.17.1, express@^4.17.3, express@^4.18.2: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -5854,7 +5334,7 @@ extract-zip@2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0, extsprintf@^1.2.0: +extsprintf@^1.2.0, extsprintf@1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== @@ -5880,7 +5360,7 @@ fast-json-patch@^3.0.0-1: resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz" integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== -fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -6085,20 +5565,11 @@ fraction.js@^4.2.0: resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== -fresh@0.5.2, fresh@^0.5.2: +fresh@^0.5.2, fresh@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -6118,6 +5589,15 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" + integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" @@ -6210,7 +5690,14 @@ get-package-type@^0.1.0: resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -6244,7 +5731,14 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6258,45 +5752,18 @@ glob-parent@^6.0.1, glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@8.0.3, glob@^8.0.1: - version "8.0.3" - resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^7.0.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" @@ -6309,7 +5776,28 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^9.3.0, glob@^9.3.1: +glob@^8.0.1, glob@8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^9.3.0: + version "9.3.5" + resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +glob@^9.3.1: version "9.3.5" resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== @@ -6345,7 +5833,19 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.1, globby@^11.1.0: +globby@^11.0.1: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6368,18 +5868,6 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - integrity sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ== - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" @@ -6416,26 +5904,6 @@ handle-thing@^2.0.0: resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" @@ -6596,6 +6064,16 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -6607,16 +6085,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -6651,7 +6119,18 @@ http-proxy-middleware@^1.0.5: is-plain-obj "^3.0.0" micromatch "^4.0.2" -http-proxy-middleware@^2.0.3, http-proxy-middleware@^2.0.6: +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy-middleware@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== @@ -6671,15 +6150,6 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.3.6: version "1.3.6" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" @@ -6689,7 +6159,7 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1, https-proxy-agent@5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6719,7 +6189,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -i18next@^19.5.0: +i18next@^19.5.0, "i18next@>= 19.0.0": version "19.9.2" resolved "https://registry.npmjs.org/i18next/-/i18next-19.9.2.tgz" integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== @@ -6733,20 +6203,27 @@ icomcom-react@^1.0.1: dependencies: prop-types "^15.6.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -6769,7 +6246,7 @@ ignore-walk@^6.0.0: dependencies: minimatch "^7.4.2" -ignore@5.2.4, ignore@^5.2.0: +ignore@^5.2.0, ignore@5.2.4: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -6833,7 +6310,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6853,11 +6330,6 @@ ini@3.0.1: resolved "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz" integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== -ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - inquirer@8.2.4: version "8.2.4" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" @@ -6910,16 +6382,16 @@ ip@^2.0.0: resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - ipaddr.js@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -7069,25 +6541,6 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== - dependencies: - path-is-inside "^1.0.1" - is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" @@ -7314,7 +6767,7 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jasmine-core@^3.6.0, jasmine-core@^3.8.0: +jasmine-core@^3.6.0, jasmine-core@^3.8.0, jasmine-core@>=3.8: version "3.99.1" resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz" integrity sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg== @@ -7335,6 +6788,11 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +"jquery@1.9.1 - 3": + version "3.6.4" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz" + integrity sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ== + js-cookie@2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" @@ -7375,38 +6833,6 @@ jsdoc-type-pratt-parser@~3.1.0: resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz" integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== -jsdom@21.1.0: - version "21.1.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" - integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== - dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" - jsdom@^16.4.0: version "16.7.0" resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" @@ -7440,6 +6866,38 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" +jsdom@21.1.0: + version "21.1.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" + integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -7497,16 +6955,11 @@ json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@3.0.0, jsonc-parser@^3.0.0: +jsonc-parser@^3.0.0, jsonc-parser@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== -jsonc-parser@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz" - integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== - jsonc-parser@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" @@ -7545,16 +6998,6 @@ jsonschema@1.4.0: resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - jsprim@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" @@ -7632,7 +7075,7 @@ jss-rtl@^0.3.0: dependencies: rtl-css-js "^1.13.1" -jss@10.10.0, jss@^10.3.0, jss@^10.5.1: +jss@^10.0.0, jss@^10.3.0, jss@^10.5.1, jss@10.10.0: version "10.10.0" resolved "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz" integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== @@ -7681,7 +7124,7 @@ karma-jasmine-html-reporter@^1.5.0: resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz" integrity sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ== -karma-jasmine@~4.0.0: +karma-jasmine@>=1.1, karma-jasmine@~4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz" integrity sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g== @@ -7704,7 +7147,7 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" -karma@^6.3.14: +karma@*, karma@^6.3.0, karma@^6.3.14, karma@>=0.13, karma@>=0.9: version "6.4.1" resolved "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz" integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== @@ -7767,13 +7210,6 @@ lazy-ass@^1.6.0: resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== -less-loader@11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz" - integrity sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw== - dependencies: - klona "^2.0.4" - less-loader@11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz" @@ -7781,7 +7217,7 @@ less-loader@11.1.0: dependencies: klona "^2.0.4" -less@4.1.3: +"less@^3.5.0 || ^4.0.0", less@4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/less/-/less-4.1.3.tgz" integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== @@ -7857,11 +7293,6 @@ loader-runner@^4.2.0: resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" @@ -7871,6 +7302,11 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" +loader-utils@3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + localtunnel@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz" @@ -7987,6 +7423,13 @@ lru-cache@^9.0.0: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz" integrity sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg== +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + magic-string@0.25.7: version "0.25.7" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" @@ -8001,13 +7444,6 @@ magic-string@0.29.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - make-dir@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" @@ -8016,7 +7452,7 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -8050,7 +7486,28 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1: +make-fetch-happen@^11.0.0: + version "11.0.3" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" + integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +make-fetch-happen@^11.0.1: version "11.0.3" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== @@ -8136,7 +7593,7 @@ memfs@^3.4.12, memfs@^3.4.3: dependencies: fs-monkey "^1.0.3" -"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: +memoize-one@^5.1.1, "memoize-one@>=3.1.1 <6": version "5.2.1" resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== @@ -8179,7 +7636,7 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -8191,33 +7648,31 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, dependencies: mime-db "1.52.0" +mime@^1.4.1, mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.6: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mime@1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.6, mime@^2.5.2: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@2.6.1: - version "2.6.1" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz" - integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== - dependencies: - schema-utils "^4.0.0" - mini-css-extract-plugin@2.7.2: version "2.7.2" resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz" @@ -8230,20 +7685,20 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@5.1.0, minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^7.4.2: version "7.4.6" resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz" @@ -8251,16 +7706,23 @@ minimatch@^7.4.2: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2, minimatch@^8.0.3: +minimatch@^8.0.2: version "8.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimatch@^8.0.3: + version "8.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: @@ -8356,7 +7818,7 @@ mirador-share-plugin@^0.11.0: resolved "https://registry.npmjs.org/mirador-share-plugin/-/mirador-share-plugin-0.11.0.tgz" integrity sha512-fHcdDXyrtfy5pn1zdQNX9BvE5Tjup66eQwyNippE5PMaP8ImUcrFaSL+mStdn+v6agsHcsdRqLhseZ0XWgEuAw== -mirador@^3.3.0: +mirador@^3.0.0-beta.0, mirador@^3.0.0-rc.7, mirador@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/mirador/-/mirador-3.3.0.tgz" integrity sha512-BmGfRnWJ45B+vtiAwcFT7n9nKialfejE9UvuUK0NorO37ShArpsKr3yVSD4jQASwSR4DRRpPEG21jOk4WN7H3w== @@ -8443,16 +7905,16 @@ mrmime@^1.0.0: resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +ms@^2.0.0, ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" @@ -8495,7 +7957,7 @@ needle@^3.1.0: iconv-lite "^0.6.3" sax "^1.2.4" -negotiator@0.6.3, negotiator@^0.6.3: +negotiator@^0.6.3, negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -8530,7 +7992,7 @@ ngx-infinite-scroll@^10.0.1: "@scarf/scarf" "^1.1.0" opencollective-postinstall "^2.0.2" -ngx-mask@^13.1.7: +ngx-mask@^13.0.0, ngx-mask@^13.1.7: version "13.1.15" resolved "https://registry.npmjs.org/ngx-mask/-/ngx-mask-13.1.15.tgz" integrity sha512-fplyzkFa6lFTzPo/AHaI3TBQxTMdcqQClR9BLLAWTvCyDZkV28fLqWkpIpy0VvPc9ADogFpJJj7R1356mszjag== @@ -8662,7 +8124,7 @@ normalize-url@^4.5.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -nouislider@^14.6.3: +nouislider@^14.6.3, nouislider@>=9.x: version "14.7.0" resolved "https://registry.npmjs.org/nouislider/-/nouislider-14.7.0.tgz" integrity sha512-4RtQ1+LHJKesDCNJrXkQcwXAWCrC2aggdLYMstS/G5fEWL+fXZbUA9pwVNHFghMGuFGRATlDLNInRaPeRKzpFQ== @@ -8686,7 +8148,7 @@ npm-normalize-package-bin@^3.0.0: resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz" integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== -npm-package-arg@10.1.0, npm-package-arg@^10.0.0: +npm-package-arg@^10.0.0, npm-package-arg@10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== @@ -8703,7 +8165,7 @@ npm-packlist@^7.0.0: dependencies: ignore-walk "^6.0.0" -npm-pick-manifest@8.0.1, npm-pick-manifest@^8.0.0: +npm-pick-manifest@^8.0.0, npm-pick-manifest@8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== @@ -8755,14 +8217,9 @@ nwsapi@^2.2.0, nwsapi@^2.2.2: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.3.tgz" integrity sha512-jscxIO4/VKScHlbmFBdV1Z6LXnLO+ZR4VMtypudUdfwtKxUN3TQcNFIHLwKtrUbDyHN4/GycY9+oRGZ2XMXYPw== -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.3, object-inspect@^1.9.0: @@ -8812,13 +8269,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" @@ -8826,6 +8276,13 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" @@ -8845,7 +8302,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@8.4.0, open@^8.0.9: +open@^8.0.9: version "8.4.0" resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== @@ -8914,7 +8371,7 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@5.4.1, ora@^5.1.0, ora@^5.4.1: +ora@^5.1.0, ora@^5.4.1, ora@5.4.1: version "5.4.1" resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== @@ -9043,14 +8500,6 @@ parse-srcset@^1.0.2: resolved "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz" integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== -parse5-html-rewriting-stream@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz" - integrity sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg== - dependencies: - parse5 "^6.0.1" - parse5-sax-parser "^6.0.1" - parse5-html-rewriting-stream@7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz" @@ -9067,13 +8516,6 @@ parse5-htmlparser2-tree-adapter@^6.0.1: dependencies: parse5 "^6.0.1" -parse5-sax-parser@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz" - integrity sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg== - dependencies: - parse5 "^6.0.1" - parse5-sax-parser@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz" @@ -9081,23 +8523,35 @@ parse5-sax-parser@^7.0.0: dependencies: parse5 "^7.0.0" -parse5@6.0.1, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^7.0.0, parse5@^7.1.1: +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: version "7.1.2" resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" +parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -9113,11 +8567,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" @@ -9181,9 +8630,14 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: +pify@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: @@ -9191,19 +8645,7 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -piscina@3.2.0, piscina@~3.2.0: +piscina@~3.2.0, piscina@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz" integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== @@ -9221,6 +8663,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + popper.js@1.16.1-lts: version "1.16.1-lts" resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz" @@ -9284,7 +8731,7 @@ postcss-custom-media@^8.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-custom-properties@^12.1.10, postcss-custom-properties@^12.1.8: +postcss-custom-properties@^12.1.10: version "12.1.11" resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz" integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== @@ -9351,15 +8798,6 @@ postcss-image-set-function@^4.0.7: dependencies: postcss-value-parser "^4.2.0" -postcss-import@15.0.0: - version "15.0.0" - resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz" - integrity sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - postcss-import@^14.0.0: version "14.1.0" resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" @@ -9382,24 +8820,6 @@ postcss-lab-function@^4.2.1: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-loader@7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz" - integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.7" - -postcss-loader@7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" - integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.8" - postcss-loader@^4.0.3: version "4.3.0" resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz" @@ -9411,6 +8831,15 @@ postcss-loader@^4.0.3: schema-utils "^3.0.0" semver "^7.3.4" +postcss-loader@7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" + integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.8" + postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" @@ -9449,7 +8878,7 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^10.1.10, postcss-nesting@^10.2.0: +postcss-nesting@^10.2.0: version "10.2.0" resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz" integrity sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA== @@ -9481,61 +8910,6 @@ postcss-place@^7.0.5: dependencies: postcss-value-parser "^4.2.0" -postcss-preset-env@7.8.0: - version "7.8.0" - resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz" - integrity sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA== - dependencies: - "@csstools/postcss-cascade-layers" "^1.0.5" - "@csstools/postcss-color-function" "^1.1.1" - "@csstools/postcss-font-format-keywords" "^1.0.1" - "@csstools/postcss-hwb-function" "^1.0.2" - "@csstools/postcss-ic-unit" "^1.0.1" - "@csstools/postcss-is-pseudo-class" "^2.0.7" - "@csstools/postcss-nested-calc" "^1.0.0" - "@csstools/postcss-normalize-display-values" "^1.0.1" - "@csstools/postcss-oklab-function" "^1.1.1" - "@csstools/postcss-progressive-custom-properties" "^1.3.0" - "@csstools/postcss-stepped-value-functions" "^1.0.1" - "@csstools/postcss-text-decoration-shorthand" "^1.0.0" - "@csstools/postcss-trigonometric-functions" "^1.0.2" - "@csstools/postcss-unset-value" "^1.0.2" - autoprefixer "^10.4.8" - browserslist "^4.21.3" - css-blank-pseudo "^3.0.3" - css-has-pseudo "^3.0.4" - css-prefers-color-scheme "^6.0.3" - cssdb "^7.0.0" - postcss-attribute-case-insensitive "^5.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^4.2.4" - postcss-color-hex-alpha "^8.0.4" - postcss-color-rebeccapurple "^7.1.1" - postcss-custom-media "^8.0.2" - postcss-custom-properties "^12.1.8" - postcss-custom-selectors "^6.0.3" - postcss-dir-pseudo-class "^6.0.5" - postcss-double-position-gradients "^3.1.2" - postcss-env-function "^4.0.6" - postcss-focus-visible "^6.0.4" - postcss-focus-within "^5.0.4" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^3.0.5" - postcss-image-set-function "^4.0.7" - postcss-initial "^4.0.1" - postcss-lab-function "^4.2.1" - postcss-logical "^5.0.4" - postcss-media-minmax "^5.0.0" - postcss-nesting "^10.1.10" - postcss-opacity-percentage "^1.1.2" - postcss-overflow-shorthand "^3.0.4" - postcss-page-break "^3.0.4" - postcss-place "^7.0.5" - postcss-pseudo-class-any-link "^7.1.6" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^6.0.1" - postcss-value-parser "^4.2.0" - postcss-preset-env@^7.4.2: version "7.8.3" resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz" @@ -9630,24 +9004,6 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.16, postcss@^8.4.7: - version "8.4.16" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@8.4.21, postcss@^8.1, postcss@^8.2.14, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4.19: - version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postcss@^6.0.6: version "6.0.23" resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" @@ -9657,6 +9013,15 @@ postcss@^6.0.6: source-map "^0.6.1" supports-color "^5.4.0" +"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.6, postcss@8.4.21: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^7.0.14: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -9711,7 +9076,7 @@ prompts@~2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.5, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9761,17 +9126,12 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -q@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qjobs@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.11.0, qs@^6.11.0: +qs@^6.11.0, qs@6.11.0: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -9785,11 +9145,6 @@ qs@~6.10.3: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" @@ -9817,7 +9172,7 @@ range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1, raw-body@^2.3.2: +raw-body@^2.3.2, raw-body@2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -9908,7 +9263,7 @@ react-dnd@^10.0.2: dnd-core "^10.0.2" hoist-non-react-statics "^3.3.0" -react-dom@^16.14.0: +"react-dom@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react-dom@^16.13.1 || ^17.0.0 || ^18.0.0", react-dom@^16.14.0, react-dom@^16.3.2, "react-dom@^16.8.0 || ^17.0.0", react-dom@^16.8.3, "react-dom@^16.8.5 || ^17.0.0 || ^18.0.0", "react-dom@>= 16.3.0", "react-dom@>= 16.8", react-dom@>=16.3.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@16.x: version "16.14.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz" integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== @@ -9947,7 +9302,12 @@ react-image@^4.0.1: resolved "https://registry.npmjs.org/react-image/-/react-image-4.1.0.tgz" integrity sha512-qwPNlelQe9Zy14K2pGWSwoL+vHsAwmJKS6gkotekDgRpcnRuzXNap00GfibD3eEPYu3WCPlyIUUNzcyHOrLHjw== -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10031,7 +9391,7 @@ react-window@^1.8.5: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^16.14.0: +"react@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react@^15.3.0 || 16 || 17 || 18", "react@^15.6 || ^16", react@^16.0.0, react@^16.13, react@^16.13.1, "react@^16.13.1 || ^17.0.0 || ^18.0.0", react@^16.14.0, react@^16.3.0, react@^16.3.2, react@^16.3.x, "react@^16.8.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^16.8.3, "react@^16.8.3 || ^17 || ^18", "react@^16.8.5 || ^17.0.0 || ^18.0.0", "react@>= 16.3.0", "react@>= 16.8", "react@>= 16.8.0", react@>=0.14, react@>=16.3.0, react@>=16.6.0, react@>=16.8, react@16.x: version "16.14.0" resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz" integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== @@ -10118,7 +9478,7 @@ redux-thunk@^2.3.0: resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz" integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: +"redux@^3.1.0 || ^4.0.0", redux@^4, redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: version "4.2.1" resolved "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz" integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== @@ -10142,11 +9502,6 @@ regenerate@^1.4.2: resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@0.13.9: - version "0.13.9" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.4: version "0.13.11" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" @@ -10199,32 +9554,6 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" -request@^2.87.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -10240,7 +9569,7 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.0.0: +reselect@^4.0.0, reselect@>1.0.0: version "4.1.7" resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz" integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== @@ -10273,15 +9602,6 @@ resolve-url-loader@5.0.0: postcss "^8.2.14" source-map "0.6.1" -resolve@1.22.1: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: version "1.22.2" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" @@ -10291,6 +9611,15 @@ resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@1.22.1: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resp-modifier@6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz" @@ -10327,9 +9656,9 @@ rfdc@^1.3.0: resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" @@ -10390,26 +9719,38 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -rxjs@6.6.7, rxjs@^6.5.5, rxjs@~6.6.0: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.5.1, rxjs@^7.5.5: +"rxjs@^6.5.3 || ^7.4.0", "rxjs@^6.5.3 || ^7.5.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: version "7.8.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" -safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +rxjs@^6.5.5: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@~6.6.0, rxjs@6.6.7: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -10423,7 +9764,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -10440,10 +9781,10 @@ sanitize-html@^2.7.2: parse-srcset "^1.0.2" postcss "^8.3.11" -sass-loader@13.0.2: - version "13.0.2" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz" - integrity sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q== +sass-loader@^12.6.0: + version "12.6.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: klona "^2.0.4" neo-async "^2.6.2" @@ -10456,14 +9797,6 @@ sass-loader@13.2.0: klona "^2.0.4" neo-async "^2.6.2" -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - sass-resources-loader@^2.1.1: version "2.2.5" resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" @@ -10474,14 +9807,12 @@ sass-resources-loader@^2.1.1: glob "^7.1.6" loader-utils "^2.0.0" -sass@1.54.4: - version "1.54.4" - resolved "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz" - integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA== +sass@^1.3.0, sass@~1.33.0: + version "1.33.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" + integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== dependencies: chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" sass@1.58.1: version "1.58.1" @@ -10492,16 +9823,9 @@ sass@1.58.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sass@~1.33.0: - version "1.33.0" - resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" - integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: +sax@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: @@ -10526,16 +9850,25 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== +schema-utils@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: +schema-utils@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -10559,30 +9892,21 @@ select-hose@^2.0.0: resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.0.1, selfsigned@^2.1.1: +selfsigned@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz" integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== dependencies: node-forge "^1" -semver@7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -semver@7.3.8, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^5.3.0, semver@^5.6.0, semver@^5.7.1: +semver@^5.6.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: @@ -10590,7 +9914,42 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: +semver@^7.0.0: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.1.1: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.2: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4: + version "7.4.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5, semver@^7.3.8, semver@7.3.8: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.7: version "7.4.0" resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== @@ -10654,7 +10013,7 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" -serve-index@1.9.1, serve-index@^1.9.1: +serve-index@^1.9.1, serve-index@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== @@ -10667,6 +10026,16 @@ serve-index@1.9.1, serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" +serve-static@^1.14.1, serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + serve-static@1.13.2: version "1.13.2" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz" @@ -10677,16 +10046,6 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" -serve-static@1.15.0, serve-static@^1.14.1: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - server-destroy@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz" @@ -10881,7 +10240,7 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sortablejs@1.13.0: +sortablejs@>=1.7.0, sortablejs@1.13.0: version "1.13.0" resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz" integrity sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg== @@ -10891,20 +10250,11 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-loader@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz" - integrity sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw== - dependencies: - abab "^2.0.6" - iconv-lite "^0.6.3" - source-map-js "^1.0.2" - source-map-loader@4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz" @@ -10914,7 +10264,7 @@ source-map-loader@4.0.1: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20: +source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10922,22 +10272,22 @@ source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.5 buffer-from "^1.0.0" source-map "^0.6.0" +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@0.5.6: version "0.5.6" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@0.7.3: version "0.7.3" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@0.7.4, source-map@^0.7.3: +source-map@0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== @@ -11010,9 +10360,9 @@ sprintf-js@~1.0.2: resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.14.1, sshpk@^1.7.0: +sshpk@^1.14.1: version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" @@ -11059,11 +10409,6 @@ stacktrace-gps@^3.0.2: source-map "0.5.6" stackframe "^1.3.4" -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2", statuses@~1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz" @@ -11079,6 +10424,11 @@ statuses@~1.5.0: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -11103,6 +10453,20 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -11139,27 +10503,6 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" @@ -11184,36 +10527,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -stylus-loader@7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz" - integrity sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A== - dependencies: - fast-glob "^3.2.11" - klona "^2.0.5" - normalize-path "^3.0.0" - -stylus@0.59.0: - version "0.59.0" - resolved "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz" - integrity sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg== - dependencies: - "@adobe/css-tools" "^4.0.1" - debug "^4.3.2" - glob "^7.1.6" - sax "~1.2.4" - source-map "^0.7.3" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== - supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -11228,7 +10546,14 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -11278,10 +10603,10 @@ terser-webpack-plugin@^5.1.3: serialize-javascript "^6.0.1" terser "^5.16.5" -terser@5.14.2: - version "5.14.2" - resolved "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== +terser@^5.16.5: + version "5.16.9" + resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" + integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -11298,16 +10623,6 @@ terser@5.16.3: commander "^2.20.0" source-map-support "~0.5.20" -terser@^5.16.5: - version "5.16.9" - resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" - integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" @@ -11317,7 +10632,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@0.2.0, text-table@^0.2.0: +text-table@^0.2.0, text-table@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== @@ -11352,13 +10667,6 @@ tiny-warning@^1.0.2: resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tmp@0.2.1, tmp@^0.2.1, tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" @@ -11366,6 +10674,27 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -11437,17 +10766,17 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-kill@1.2.2, tree-kill@^1.2.2: +tree-kill@^1.2.2, tree-kill@1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -ts-node@10.2.1, ts-node@^10.0.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" - integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw== +ts-node@^10.0.0: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.6.1" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -11458,6 +10787,7 @@ ts-node@10.2.1, ts-node@^10.0.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-node@^8.10.2: @@ -11471,7 +10801,7 @@ ts-node@^8.10.2: source-map-support "^0.5.17" yn "3.1.1" -tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: +tsconfig-paths@^3.14.1: version "3.14.2" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -11481,25 +10811,34 @@ tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tsconfig-paths@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@2.5.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1: +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tsutils@^3.21.0: version "3.21.0" @@ -11593,16 +10932,16 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" +typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.8.2 <5.0", typescript@~4.8.4: + version "4.8.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + typescript@^2.5.0: version "2.9.2" resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== -typescript@~4.8.4: - version "4.8.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - ua-parser-js@^0.7.30: version "0.7.35" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" @@ -11718,7 +11057,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -11766,7 +11105,12 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.2.1, uuid@^3.3.2: +uuid@^3.2.1: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -11776,6 +11120,11 @@ uuid@^8.1.0, uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + valid-data-url@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" @@ -11810,16 +11159,16 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - void-elements@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" @@ -11875,23 +11224,6 @@ web-resource-inliner@^6.0.1: node-fetch "^2.6.0" valid-data-url "^3.0.0" -webdriver-manager@^12.1.8: - version "12.1.9" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.9.tgz#8d83543b92711b7217b39fef4cda958a4703d2df" - integrity sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ== - dependencies: - adm-zip "^0.5.2" - chalk "^1.1.1" - del "^2.2.0" - glob "^7.0.3" - ini "^1.3.4" - minimist "^1.2.0" - q "^1.4.1" - request "^2.87.0" - rimraf "^2.5.2" - semver "^5.3.0" - xml2js "^0.4.17" - webfontloader@1.6.28: version "1.6.28" resolved "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz" @@ -11933,7 +11265,7 @@ webpack-bundle-analyzer@^4.4.0: sirv "^1.0.7" ws "^7.3.1" -webpack-cli@^4.2.0: +webpack-cli@^4.2.0, webpack-cli@4.x.x: version "4.10.0" resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== @@ -11951,7 +11283,7 @@ webpack-cli@^4.2.0: rechoir "^0.7.0" webpack-merge "^5.7.3" -webpack-dev-middleware@5.3.3, webpack-dev-middleware@^5.3.1: +webpack-dev-middleware@^5.3.1: version "5.3.3" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== @@ -11973,10 +11305,10 @@ webpack-dev-middleware@6.0.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@4.11.0: - version "4.11.0" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz" - integrity sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw== +webpack-dev-server@^4.0.0, webpack-dev-server@^4.5.0: + version "4.13.2" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" + integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -11997,16 +11329,17 @@ webpack-dev-server@4.11.0: html-entities "^2.3.2" http-proxy-middleware "^2.0.3" ipaddr.js "^2.0.1" + launch-editor "^2.6.0" open "^8.0.9" p-retry "^4.5.0" rimraf "^3.0.2" schema-utils "^4.0.0" - selfsigned "^2.0.1" + selfsigned "^2.1.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" webpack-dev-middleware "^5.3.1" - ws "^8.4.2" + ws "^8.13.0" webpack-dev-server@4.11.1: version "4.11.1" @@ -12043,43 +11376,7 @@ webpack-dev-server@4.11.1: webpack-dev-middleware "^5.3.1" ws "^8.4.2" -webpack-dev-server@^4.5.0: - version "4.13.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" - integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-merge@5.8.0, webpack-merge@^5.7.3: +webpack-merge@^5.7.3, webpack-merge@5.8.0: version "5.8.0" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== @@ -12107,6 +11404,36 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.54.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=5, "webpack@4.x.x || 5.x.x": + version "5.78.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" + integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + webpack@5.76.1: version "5.76.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" @@ -12137,37 +11464,7 @@ webpack@5.76.1: watchpack "^2.4.0" webpack-sources "^3.2.3" -webpack@^5.76.0: - version "5.78.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" - integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -12329,7 +11626,12 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.3.1, ws@^7.4.6: +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^7.4.6: version "7.5.9" resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -12359,19 +11661,6 @@ xml-name-validator@^4.0.0: resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== -xml2js@^0.4.17: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" @@ -12417,32 +11706,6 @@ yargs-parser@^21.1.1: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@17.1.1: - version "17.1.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz" - integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@17.6.2: - version "17.6.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yargs@^16.1.1: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" @@ -12469,6 +11732,32 @@ yargs@^17.2.1, yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@17.1.1: + version "17.1.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz" + integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@17.6.2: + version "17.6.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" @@ -12487,7 +11776,7 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zone.js@~0.11.5: +"zone.js@~0.11.4 || ~0.12.0 || ~0.13.0", zone.js@~0.11.5: version "0.11.8" resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" integrity sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA== From 0f22978b2ea0b5f244f79ac257ab82412989c806 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Wed, 12 Apr 2023 09:52:48 -0500 Subject: [PATCH 489/833] Sync changes from Dspace/DSpace#8679 to dspace-angular docker scripts --- docker/docker-compose-rest.yml | 21 +++++++++------------ docker/docker-compose.yml | 1 + 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docker/docker-compose-rest.yml b/docker/docker-compose-rest.yml index b73f1b7a39..e31757527a 100644 --- a/docker/docker-compose-rest.yml +++ b/docker/docker-compose-rest.yml @@ -39,7 +39,7 @@ services: # proxies.trusted.ipranges: This setting is required for a REST API running in Docker to trust requests # from the host machine. This IP range MUST correspond to the 'dspacenet' subnet defined above. proxies__P__trusted__P__ipranges: '172.23.0' - image: dspace/dspace:dspace-7_x-test + image: "${DOCKER_OWNER:-dspace}/dspace:${DSPACE_VER:-dspace-7_x-test}" depends_on: - dspacedb networks: @@ -82,8 +82,7 @@ services: # DSpace Solr container dspacesolr: container_name: dspacesolr - # Uses official Solr image at https://hub.docker.com/_/solr/ - image: solr:8.11-slim + image: "${DOCKER_OWNER:-dspace}/dspace-solr:${DSPACE_VER:-dspace-7_x}" # Needs main 'dspace' container to start first to guarantee access to solr_configs depends_on: - dspace @@ -96,28 +95,26 @@ services: tty: true working_dir: /var/solr/data volumes: - # Mount our "solr_configs" volume available under the Solr's configsets folder (in a 'dspace' subfolder) - # This copies the Solr configs from main 'dspace' container into 'dspacesolr' via that volume - - solr_configs:/opt/solr/server/solr/configsets/dspace # Keep Solr data directory between reboots - solr_data:/var/solr/data # Initialize all DSpace Solr cores using the mounted local configsets (see above), then start Solr # * First, run precreate-core to create the core (if it doesn't yet exist). If exists already, this is a no-op - # * Second, copy updated configs from mounted configsets to this core. If it already existed, this updates core - # to the latest configs. If it's a newly created core, this is a no-op. + # * Second, copy configsets to this core: + # Updates to Solr configs require the container to be rebuilt/restarted: + # `docker-compose -p d7 -f docker/docker-compose.yml -f docker/docker-compose-rest.yml up -d --build dspacesolr` entrypoint: - /bin/bash - '-c' - | init-var-solr precreate-core authority /opt/solr/server/solr/configsets/dspace/authority - cp -r -u /opt/solr/server/solr/configsets/dspace/authority/* authority + cp -r /opt/solr/server/solr/configsets/dspace/authority/* authority precreate-core oai /opt/solr/server/solr/configsets/dspace/oai - cp -r -u /opt/solr/server/solr/configsets/dspace/oai/* oai + cp -r /opt/solr/server/solr/configsets/dspace/oai/* oai precreate-core search /opt/solr/server/solr/configsets/dspace/search - cp -r -u /opt/solr/server/solr/configsets/dspace/search/* search + cp -r /opt/solr/server/solr/configsets/dspace/search/* search precreate-core statistics /opt/solr/server/solr/configsets/dspace/statistics - cp -r -u /opt/solr/server/solr/configsets/dspace/statistics/* statistics + cp -r /opt/solr/server/solr/configsets/dspace/statistics/* statistics exec solr -f volumes: assetstore: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 1387b1de39..053a7af6d3 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -24,6 +24,7 @@ services: DSPACE_REST_HOST: localhost DSPACE_REST_PORT: 8080 DSPACE_REST_NAMESPACE: /server + # NODE_OPTIONS: --max_old_space_size=6144 image: dspace/dspace-angular:dspace-7_x build: context: .. From 72fad0a6c98308a10c54b6ba29a015ddd4cbd148 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Wed, 12 Apr 2023 09:53:45 -0500 Subject: [PATCH 490/833] Update/Enhance Docker README with latest info --- docker/README.md | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/docker/README.md b/docker/README.md index f29071c5cf..42deb793f9 100644 --- a/docker/README.md +++ b/docker/README.md @@ -6,7 +6,20 @@ If you wish to run DSpace on Docker in production, we recommend building your own Docker images. You are welcome to borrow ideas/concepts from the below images in doing so. But, the below images should not be used "as is" in any production scenario. *** -## 'Dockerfile' in root directory +## Overview +The scripts in this directory can be used to start the DSpace User Interface (frontend) in Docker. +Optionally, the backend (REST API) might also be started in Docker. + +For additional options/settings in starting the backend (REST API) in Docker, see the Docker Compose +documentation for the backend: https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/README.md + +## Root directory + +The root directory of this project contains all the Dockerfiles which may be referenced by +the Docker compose scripts in this 'docker' folder. + +### Dockerfile + This Dockerfile is used to build a *development* DSpace 7 Angular UI image, published as 'dspace/dspace-angular' ``` @@ -20,6 +33,8 @@ Admins to our DockerHub repo can manually publish with the following command. docker push dspace/dspace-angular:dspace-7_x ``` +### Dockerfile.dist + The `Dockerfile.dist` is used to generate a *production* build and runtime environment. ```bash @@ -29,7 +44,7 @@ docker build -f Dockerfile.dist -t dspace/dspace-angular:dspace-7_x-dist . A default/demo version of this image is built *automatically*. -## docker directory +## 'docker' directory - docker-compose.yml - Starts DSpace Angular with Docker Compose from the current branch. This file assumes that a DSpace 7 REST instance will also be started in Docker. - docker-compose-rest.yml @@ -54,25 +69,41 @@ docker-compose -f docker/docker-compose.yml build ## To start DSpace (REST and Angular) from your branch +This command provides a quick way to start both the frontend & backend from this single codebase ``` docker-compose -p d7 -f docker/docker-compose.yml -f docker/docker-compose-rest.yml up -d ``` +Keep in mind, you may also start the backend by cloning the 'DSpace/DSpace' GitHub repository separately. See the next section. + + ## Run DSpace REST and DSpace Angular from local branches. + +This section assumes that you have clones *both* the 'DSpace/DSpace' and 'DSpace/dspace-angular' GitHub +repositories. When both are available locally, you can spin up both in Docker and have them work together. + _The system will be started in 2 steps. Each step shares the same docker network._ -From DSpace/DSpace (build as needed) +From 'DSpace/DSpace' clone (build first as needed): ``` docker-compose -p d7 up -d ``` -From DSpace/DSpace-angular +NOTE: More detailed instructions on starting the backend via Docker can be found in the [Docker Compose instructions for the Backend](https://github.com/DSpace/DSpace/blob/main/dspace/src/main/docker-compose/README.md). + +From 'DSpace/dspace-angular' clone (build first as needed) ``` docker-compose -p d7 -f docker/docker-compose.yml up -d ``` +At this point, you should be able to access the UI from http://localhost:4000, +and the backend at http://localhost:8080/server/ + ## Run DSpace Angular dist build with DSpace Demo site backend +This allows you to run the Angular UI in *production* mode, pointing it at the demo backend +(https://api7.dspace.org/server/). + ``` docker-compose -f docker/docker-compose-dist.yml pull docker-compose -f docker/docker-compose-dist.yml build @@ -104,9 +135,10 @@ Load assetstore content and trigger a re-index of the repository docker-compose -p d7 -f docker/cli.yml -f docker/cli.assetstore.yml run --rm dspace-cli ``` -## End to end testing of the rest api (runs in travis). -_In this instance, only the REST api runs in Docker using the Entities dataset. Travis will perform CI testing of Angular using Node to drive the tests._ +## End to end testing of the REST API (runs in GitHub Actions CI). +_In this instance, only the REST api runs in Docker using the Entities dataset. GitHub Actions will perform CI testing of Angular using Node to drive the tests. See `.github/workflows/build.yml` for more details._ +This command is only really useful for testing our Continuous Integration process. ``` -docker-compose -p d7ci -f docker/docker-compose-travis.yml up -d +docker-compose -p d7ci -f docker/docker-compose-ci.yml up -d ``` From 84f1fcbb352212292f6129ed114f38765cb2c3f0 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 17:29:54 +0200 Subject: [PATCH 491/833] 101108: Angular 15 upgrade - resolve fix --- src/app/core/cache/builders/remote-data-build.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/core/cache/builders/remote-data-build.service.ts b/src/app/core/cache/builders/remote-data-build.service.ts index 1124ecfc7a..075bf3ca0c 100644 --- a/src/app/core/cache/builders/remote-data-build.service.ts +++ b/src/app/core/cache/builders/remote-data-build.service.ts @@ -72,8 +72,8 @@ export class RemoteDataBuildService { if (hasValue(obj)) { if (getResourceTypeValueFor((obj as any).type) === PAGINATED_LIST.value) { return this.buildPaginatedList(obj, ...linksToFollow); - } else if (isNotEmpty(linksToFollow) && obj instanceof HALResource) { - return [this.linkService.resolveLinks(obj, ...linksToFollow)]; + } else if (isNotEmpty(linksToFollow)) { + return [this.linkService.resolveLinks(obj as any, ...linksToFollow)]; } } return [obj]; From 4ed6ccebff164113e98d061243f567e50d44f65e Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Wed, 12 Apr 2023 17:47:40 +0200 Subject: [PATCH 492/833] 101108: Angular 15 upgrade - test build & run fixes --- package.json | 8 ++++---- src/app/shared/testing/utils.test.ts | 2 +- src/test.ts | 7 ------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index b1b6060eaf..b7ed6e3d3e 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,9 @@ "build:stats": "ng build --stats-json", "build:prod": "yarn run build:ssr", "build:ssr": "ng build --configuration production && ng run dspace-angular:server:production", - "test": "ng test --sourceMap=true --watch=false --configuration test", - "test:watch": "nodemon --exec \"ng test --sourceMap=true --watch=true --configuration test\"", - "test:headless": "ng test --sourceMap=true --watch=false --configuration test --browsers=ChromeHeadless --code-coverage", + "test": "ng test --source-map=true --watch=false --configuration test", + "test:watch": "nodemon --exec \"ng test --source-map=true --watch=true --configuration test\"", + "test:headless": "ng test --source-map=true --watch=false --configuration test --browsers=ChromeHeadless --code-coverage", "lint": "ng lint", "lint-fix": "ng lint --fix=true", "e2e": "ng e2e", @@ -203,4 +203,4 @@ "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.5.0" } -} \ No newline at end of file +} diff --git a/src/app/shared/testing/utils.test.ts b/src/app/shared/testing/utils.test.ts index 2f3b85d791..e5130d6182 100644 --- a/src/app/shared/testing/utils.test.ts +++ b/src/app/shared/testing/utils.test.ts @@ -72,7 +72,7 @@ export function createPaginatedList(objects?: T[]): PaginatedList { * @param prop The property/function to spy on */ export function spyOnExported(target: T, prop: keyof T): jasmine.Spy { - const spy = jasmine.createSpy(`${prop}Spy`); + const spy = jasmine.createSpy(`${String(prop)}Spy`); spyOnProperty(target, prop).and.returnValue(spy); return spy; } diff --git a/src/test.ts b/src/test.ts index 477195418b..2f07cf0d1d 100644 --- a/src/test.ts +++ b/src/test.ts @@ -9,8 +9,6 @@ import { } from '@angular/platform-browser-dynamic/testing'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -declare const require: any; - // First, initialize the Angular testing environment. getTestBed().initTestEnvironment( BrowserDynamicTestingModule, @@ -24,8 +22,3 @@ jasmine.getEnv().afterEach(() => { // Close any leftover modals getTestBed().inject(NgbModal, null)?.dismissAll?.(); }); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); From 113703ff6b0e38186a34e88e2120737e137417b9 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Wed, 12 Apr 2023 11:42:37 -0500 Subject: [PATCH 493/833] Ensure default Dockerfile starts in dev mode & has appropriate memory allocated. Enhance comments in -dist.yml --- Dockerfile | 15 +++++++++++---- docker/docker-compose-dist.yml | 4 ++++ docker/docker-compose.yml | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 61d960e7d3..8fac7495e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,20 +2,27 @@ # See https://github.com/DSpace/dspace-angular/tree/main/docker for usage details FROM node:18-alpine -WORKDIR /app -ADD . /app/ -EXPOSE 4000 # Ensure Python and other build tools are available # These are needed to install some node modules, especially on linux/arm64 RUN apk add --update python3 make g++ && rm -rf /var/cache/apk/* +WORKDIR /app +ADD . /app/ +EXPOSE 4000 + # We run yarn install with an increased network timeout (5min) to avoid "ESOCKETTIMEDOUT" errors from hub.docker.com # See, for example https://github.com/yarnpkg/yarn/issues/5540 RUN yarn install --network-timeout 300000 +# When running in dev mode, 4GB of memory is required to build & launch the app. +# This default setting can be overridden as needed in your shell, via an env file or in docker-compose. +# See Docker environment var precedence: https://docs.docker.com/compose/environment-variables/envvars-precedence/ +ENV NODE_OPTIONS="--max_old_space_size=4096" + # On startup, run in DEVELOPMENT mode (this defaults to live reloading enabled, etc). # Listen / accept connections from all IP addresses. # NOTE: At this time it is only possible to run Docker container in Production mode -# if you have a public IP. See https://github.com/DSpace/dspace-angular/issues/1485 +# if you have a public URL. See https://github.com/DSpace/dspace-angular/issues/1485 +ENV NODE_ENV development CMD yarn serve --host 0.0.0.0 diff --git a/docker/docker-compose-dist.yml b/docker/docker-compose-dist.yml index 59b5fddab5..1c75539da9 100644 --- a/docker/docker-compose-dist.yml +++ b/docker/docker-compose-dist.yml @@ -19,6 +19,10 @@ services: DSPACE_UI_HOST: dspace-angular DSPACE_UI_PORT: '4000' DSPACE_UI_NAMESPACE: / + # NOTE: When running the UI in production mode (which the -dist image does), + # these DSPACE_REST_* variables MUST point at a public, HTTPS URL. + # This is because Server Side Rendering (SSR) currently requires a public URL, + # see this bug: https://github.com/DSpace/dspace-angular/issues/1485 DSPACE_REST_SSL: 'true' DSPACE_REST_HOST: api7.dspace.org DSPACE_REST_PORT: 443 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 053a7af6d3..1387b1de39 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -24,7 +24,6 @@ services: DSPACE_REST_HOST: localhost DSPACE_REST_PORT: 8080 DSPACE_REST_NAMESPACE: /server - # NODE_OPTIONS: --max_old_space_size=6144 image: dspace/dspace-angular:dspace-7_x build: context: .. From 8136826c6d6c979d6c20a8c2b0ec3d0936dcf064 Mon Sep 17 00:00:00 2001 From: lotte Date: Thu, 13 Apr 2023 16:12:49 +0200 Subject: [PATCH 494/833] Added missing typedoc --- .../shared/badges/badges.component.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/app/shared/object-collection/shared/badges/badges.component.ts b/src/app/shared/object-collection/shared/badges/badges.component.ts index f1e2302815..c66fed35fc 100644 --- a/src/app/shared/object-collection/shared/badges/badges.component.ts +++ b/src/app/shared/object-collection/shared/badges/badges.component.ts @@ -2,6 +2,9 @@ import { Component, Input } from '@angular/core'; import { Context } from 'src/app/core/shared/context.model'; import { DSpaceObject } from '../../../../core/shared/dspace-object.model'; +/** + * List of MyDSpace Status Contexts + */ const MY_DSPACE_STATUS_CONTEXTS = [ Context.MyDSpaceArchived, Context.MyDSpaceWorkspace, @@ -11,15 +14,33 @@ const MY_DSPACE_STATUS_CONTEXTS = [ Context.MyDSpaceWaitingController, Context.MyDSpaceValidation ]; + +/** + * Component that renders all the badges for a listable object + */ @Component({ selector: 'ds-badges', templateUrl: './badges.component.html', styleUrls: ['./badges.component.scss'] }) export class BadgesComponent { + /** + * The DSpaceObject to render the badge for + */ @Input() object: DSpaceObject; + /** + * The context that the badge is rendered in + */ @Input() context?: Context; + + /** + * Whether or not to show the access status + */ @Input() showAccessStatus = false; + + /** + * Returns whether or not this context is a MyDSpace status context + */ get isMyDSpaceStatus(): boolean { return MY_DSPACE_STATUS_CONTEXTS.includes(this.context); } From f73fbc270f23a18fb26f1bbd7738d9cf8e2819f3 Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Thu, 13 Apr 2023 14:16:33 -0500 Subject: [PATCH 495/833] Fix solr configset directories --- docker/docker-compose-rest.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docker/docker-compose-rest.yml b/docker/docker-compose-rest.yml index e31757527a..e5f62600e7 100644 --- a/docker/docker-compose-rest.yml +++ b/docker/docker-compose-rest.yml @@ -107,14 +107,14 @@ services: - '-c' - | init-var-solr - precreate-core authority /opt/solr/server/solr/configsets/dspace/authority - cp -r /opt/solr/server/solr/configsets/dspace/authority/* authority - precreate-core oai /opt/solr/server/solr/configsets/dspace/oai - cp -r /opt/solr/server/solr/configsets/dspace/oai/* oai - precreate-core search /opt/solr/server/solr/configsets/dspace/search - cp -r /opt/solr/server/solr/configsets/dspace/search/* search - precreate-core statistics /opt/solr/server/solr/configsets/dspace/statistics - cp -r /opt/solr/server/solr/configsets/dspace/statistics/* statistics + precreate-core authority /opt/solr/server/solr/configsets/authority + cp -r /opt/solr/server/solr/configsets/authority/* authority + precreate-core oai /opt/solr/server/solr/configsets/oai + cp -r /opt/solr/server/solr/configsets/oai/* oai + precreate-core search /opt/solr/server/solr/configsets/search + cp -r /opt/solr/server/solr/configsets/search/* search + precreate-core statistics /opt/solr/server/solr/configsets/statistics + cp -r /opt/solr/server/solr/configsets/statistics/* statistics exec solr -f volumes: assetstore: From f4efe00671aed5cbff39571d45cf5ce49d60c631 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 14 Apr 2023 17:02:06 +0200 Subject: [PATCH 496/833] 101127: Create BrowseByTaxonomyPageComponent --- src/app/browse-by/browse-by-routing.module.ts | 8 ++++++ .../browse-by-taxonomy-page.component.html | 1 + .../browse-by-taxonomy-page.component.scss | 0 .../browse-by-taxonomy-page.component.spec.ts | 25 +++++++++++++++++++ .../browse-by-taxonomy-page.component.ts | 13 ++++++++++ src/app/browse-by/browse-by.module.ts | 6 ++++- 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.scss create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts create mode 100644 src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index 5788d3cc70..0bf61957ef 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -4,6 +4,7 @@ import { BrowseByGuard } from './browse-by-guard'; import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolver'; import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; +import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse-by-taxonomy-page.component'; @NgModule({ imports: [ @@ -12,6 +13,13 @@ import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-bro path: '', resolve: { breadcrumb: BrowseByDSOBreadcrumbResolver }, children: [ + { + path: 'srsc', + component: BrowseByTaxonomyPageComponent, + canActivate: [BrowseByGuard], + resolve: { breadcrumb: BrowseByI18nBreadcrumbResolver }, + data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata' } + }, { path: ':id', component: ThemedBrowseBySwitcherComponent, diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html new file mode 100644 index 0000000000..04f39bf727 --- /dev/null +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -0,0 +1 @@ +

    browse-by-taxonomy-page works!

    diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.scss b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts new file mode 100644 index 0000000000..b1ce257ef6 --- /dev/null +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.component'; + +describe('BrowseByTaxonomyPageComponent', () => { + let component: BrowseByTaxonomyPageComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BrowseByTaxonomyPageComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BrowseByTaxonomyPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts new file mode 100644 index 0000000000..97402843f5 --- /dev/null +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'ds-browse-by-taxonomy-page', + templateUrl: './browse-by-taxonomy-page.component.html', + styleUrls: ['./browse-by-taxonomy-page.component.scss'] +}) +/** + * Component for browsing items by metadata in a hierarchical controlled vocabulary + */ +export class BrowseByTaxonomyPageComponent { + +} diff --git a/src/app/browse-by/browse-by.module.ts b/src/app/browse-by/browse-by.module.ts index 14e21f8b4c..8cd52c887d 100644 --- a/src/app/browse-by/browse-by.module.ts +++ b/src/app/browse-by/browse-by.module.ts @@ -5,11 +5,13 @@ import { SharedModule } from '../shared/shared.module'; import { BrowseByMetadataPageComponent } from './browse-by-metadata-page/browse-by-metadata-page.component'; import { BrowseByDatePageComponent } from './browse-by-date-page/browse-by-date-page.component'; import { BrowseBySwitcherComponent } from './browse-by-switcher/browse-by-switcher.component'; +import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse-by-taxonomy-page.component'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; import { ComcolModule } from '../shared/comcol/comcol.module'; import { ThemedBrowseByMetadataPageComponent } from './browse-by-metadata-page/themed-browse-by-metadata-page.component'; import { ThemedBrowseByDatePageComponent } from './browse-by-date-page/themed-browse-by-date-page.component'; import { ThemedBrowseByTitlePageComponent } from './browse-by-title-page/themed-browse-by-title-page.component'; +import { FormModule } from '../shared/form/form.module'; const ENTRY_COMPONENTS = [ // put only entry components that use custom decorator @@ -27,11 +29,13 @@ const ENTRY_COMPONENTS = [ imports: [ CommonModule, ComcolModule, - SharedModule + SharedModule, + FormModule, ], declarations: [ BrowseBySwitcherComponent, ThemedBrowseBySwitcherComponent, + BrowseByTaxonomyPageComponent, ...ENTRY_COMPONENTS ], exports: [ From d6147e52364a3533d1b843f166470fe2fd6ae741 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 8 Feb 2023 15:21:07 +0100 Subject: [PATCH 497/833] Fixed default @Input() values not working for themed components --- src/app/shared/theme-support/themed.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/theme-support/themed.component.ts b/src/app/shared/theme-support/themed.component.ts index 2ff0713f46..3a0bc36886 100644 --- a/src/app/shared/theme-support/themed.component.ts +++ b/src/app/shared/theme-support/themed.component.ts @@ -103,7 +103,7 @@ export abstract class ThemedComponent implements OnInit, OnDestroy, OnChanges protected connectInputsAndOutputs(): void { if (isNotEmpty(this.inAndOutputNames) && hasValue(this.compRef) && hasValue(this.compRef.instance)) { - this.inAndOutputNames.forEach((name: any) => { + this.inAndOutputNames.filter((name: any) => this[name] !== undefined).forEach((name: any) => { this.compRef.instance[name] = this[name]; }); } From 1752b1afd4d49d68f0264f9e1d189bc2bb27e0b0 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Fri, 24 Mar 2023 16:47:42 +0100 Subject: [PATCH 498/833] 100479: Removed the default input values to make it possible to override them in themes --- src/app/footer/themed-footer.component.ts | 4 ++-- .../themed-header-navbar-wrapper.component.ts | 6 +++--- src/app/home-page/themed-home-page.component.ts | 2 -- .../my-dspace-page/themed-my-dspace-page.component.ts | 1 - .../themed-configuration-search-page.component.ts | 9 ++++----- src/app/shared/search/search.component.ts | 2 +- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/app/footer/themed-footer.component.ts b/src/app/footer/themed-footer.component.ts index c52a0af29f..e8f64f3434 100644 --- a/src/app/footer/themed-footer.component.ts +++ b/src/app/footer/themed-footer.component.ts @@ -7,7 +7,7 @@ import { FooterComponent } from './footer.component'; */ @Component({ selector: 'ds-themed-footer', - styleUrls: ['footer.component.scss'], + styleUrls: [], templateUrl: '../shared/theme-support/themed.component.html', }) export class ThemedFooterComponent extends ThemedComponent { @@ -20,6 +20,6 @@ export class ThemedFooterComponent extends ThemedComponent { } protected importUnthemedComponent(): Promise { - return import(`./footer.component`); + return import('./footer.component'); } } diff --git a/src/app/header-nav-wrapper/themed-header-navbar-wrapper.component.ts b/src/app/header-nav-wrapper/themed-header-navbar-wrapper.component.ts index 7f9c181fe2..02d09c44ef 100644 --- a/src/app/header-nav-wrapper/themed-header-navbar-wrapper.component.ts +++ b/src/app/header-nav-wrapper/themed-header-navbar-wrapper.component.ts @@ -3,11 +3,11 @@ import { ThemedComponent } from '../shared/theme-support/themed.component'; import { HeaderNavbarWrapperComponent } from './header-navbar-wrapper.component'; /** - * Themed wrapper for BreadcrumbsComponent + * Themed wrapper for {@link HeaderNavbarWrapperComponent} */ @Component({ selector: 'ds-themed-header-navbar-wrapper', - styleUrls: ['./themed-header-navbar-wrapper.component.scss'], + styleUrls: [], templateUrl: '../shared/theme-support/themed.component.html', }) export class ThemedHeaderNavbarWrapperComponent extends ThemedComponent { @@ -20,6 +20,6 @@ export class ThemedHeaderNavbarWrapperComponent extends ThemedComponent { - return import(`./header-navbar-wrapper.component`); + return import('./header-navbar-wrapper.component'); } } diff --git a/src/app/home-page/themed-home-page.component.ts b/src/app/home-page/themed-home-page.component.ts index e50f955cb1..c0ef723b38 100644 --- a/src/app/home-page/themed-home-page.component.ts +++ b/src/app/home-page/themed-home-page.component.ts @@ -8,8 +8,6 @@ import { Component } from '@angular/core'; templateUrl: '../shared/theme-support/themed.component.html', }) export class ThemedHomePageComponent extends ThemedComponent { - protected inAndOutputNames: (keyof HomePageComponent & keyof this)[]; - protected getComponentName(): string { return 'HomePageComponent'; diff --git a/src/app/my-dspace-page/themed-my-dspace-page.component.ts b/src/app/my-dspace-page/themed-my-dspace-page.component.ts index 2c74da052e..55ebc51c8d 100644 --- a/src/app/my-dspace-page/themed-my-dspace-page.component.ts +++ b/src/app/my-dspace-page/themed-my-dspace-page.component.ts @@ -11,7 +11,6 @@ import { MyDSpacePageComponent } from './my-dspace-page.component'; templateUrl: './../shared/theme-support/themed.component.html' }) export class ThemedMyDSpacePageComponent extends ThemedComponent { - protected inAndOutputNames: (keyof MyDSpacePageComponent & keyof this)[]; protected getComponentName(): string { return 'MyDSpacePageComponent'; diff --git a/src/app/search-page/themed-configuration-search-page.component.ts b/src/app/search-page/themed-configuration-search-page.component.ts index e4d6e93402..e367ee5238 100644 --- a/src/app/search-page/themed-configuration-search-page.component.ts +++ b/src/app/search-page/themed-configuration-search-page.component.ts @@ -28,19 +28,18 @@ export class ThemedConfigurationSearchPageComponent extends ThemedComponent { - return import(`./configuration-search-page.component`); + return import('./configuration-search-page.component'); } } diff --git a/src/app/shared/search/search.component.ts b/src/app/shared/search/search.component.ts index c017a5065b..b04575f546 100644 --- a/src/app/shared/search/search.component.ts +++ b/src/app/shared/search/search.component.ts @@ -127,7 +127,7 @@ export class SearchComponent implements OnInit { /** * List of available view mode */ - @Input() useUniquePageId: false; + @Input() useUniquePageId: boolean; /** * List of available view mode From 3da2b3c0ef9f8f47a2cb3ad79f5dd3d76a5030c4 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Mon, 17 Apr 2023 10:13:14 +0200 Subject: [PATCH 499/833] 101127: Put modal from VocabularyTreeview in VocabularyTreeviewModal --- .../models/onebox/dynamic-onebox.component.ts | 4 +- src/app/shared/form/form.module.ts | 4 +- .../vocabulary-treeview-modal.component.html | 15 ++ .../vocabulary-treeview-modal.component.scss | 0 ...ocabulary-treeview-modal.component.spec.ts | 25 ++++ .../vocabulary-treeview-modal.component.ts | 38 +++++ .../vocabulary-treeview.component.html | 136 ++++++++---------- .../vocabulary-treeview.component.ts | 9 +- .../search-hierarchy-filter.component.ts | 8 +- 9 files changed, 156 insertions(+), 83 deletions(-) create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.scss create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts create mode 100644 src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts index 008328bf73..63eca80dfe 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.ts @@ -30,8 +30,8 @@ import { VocabularyEntry } from '../../../../../../core/submission/vocabularies/ import { PageInfo } from '../../../../../../core/shared/page-info.model'; import { DsDynamicVocabularyComponent } from '../dynamic-vocabulary.component'; import { Vocabulary } from '../../../../../../core/submission/vocabularies/models/vocabulary.model'; -import { VocabularyTreeviewComponent } from '../../../../vocabulary-treeview/vocabulary-treeview.component'; import { VocabularyEntryDetail } from '../../../../../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; +import { VocabularyTreeviewModalComponent } from '../../../../vocabulary-treeview-modal/vocabulary-treeview-modal.component'; /** * Component representing a onebox input field. @@ -222,7 +222,7 @@ export class DsDynamicOneboxComponent extends DsDynamicVocabularyComponent imple map((vocabulary: Vocabulary) => vocabulary.preloadLevel), take(1) ).subscribe((preloadLevel) => { - const modalRef: NgbModalRef = this.modalService.open(VocabularyTreeviewComponent, { size: 'lg', windowClass: 'treeview' }); + const modalRef: NgbModalRef = this.modalService.open(VocabularyTreeviewModalComponent, { size: 'lg', windowClass: 'treeview' }); modalRef.componentInstance.vocabularyOptions = this.model.vocabularyOptions; modalRef.componentInstance.preloadLevel = preloadLevel; modalRef.componentInstance.selectedItem = this.currentValue ? this.currentValue : ''; diff --git a/src/app/shared/form/form.module.ts b/src/app/shared/form/form.module.ts index 61fc7e3c39..6e3fc33832 100644 --- a/src/app/shared/form/form.module.ts +++ b/src/app/shared/form/form.module.ts @@ -33,6 +33,7 @@ import { AuthorityConfidenceStateDirective } from './directives/authority-confid import { SortablejsModule } from 'ngx-sortablejs'; import { VocabularyTreeviewComponent } from './vocabulary-treeview/vocabulary-treeview.component'; import { VocabularyTreeviewService } from './vocabulary-treeview/vocabulary-treeview.service'; +import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal/vocabulary-treeview-modal.component'; import { FormBuilderService } from './builder/form-builder.service'; import { DsDynamicTypeBindRelationService } from './builder/ds-dynamic-form-ui/ds-dynamic-type-bind-relation.service'; import { FormService } from './form.service'; @@ -67,7 +68,8 @@ const COMPONENTS = [ ChipsComponent, NumberPickerComponent, VocabularyTreeviewComponent, - ThemedExternalSourceEntryImportModalComponent + VocabularyTreeviewModalComponent, + ThemedExternalSourceEntryImportModalComponent, ]; const DIRECTIVES = [ diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html new file mode 100644 index 0000000000..55f5ab5092 --- /dev/null +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html @@ -0,0 +1,15 @@ + + diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.scss b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts new file mode 100644 index 0000000000..989375fd13 --- /dev/null +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VocabularyTreeviewModalComponent } from './vocabulary-treeview-modal.component'; + +describe('VocabularyTreeviewModalComponent', () => { + let component: VocabularyTreeviewModalComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ VocabularyTreeviewModalComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(VocabularyTreeviewModalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts new file mode 100644 index 0000000000..48ff82f499 --- /dev/null +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts @@ -0,0 +1,38 @@ +import { Component, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; +import { VocabularyOptions } from '../../../core/submission/vocabularies/models/vocabulary-options.model'; + +@Component({ + selector: 'ds-vocabulary-treeview-modal', + templateUrl: './vocabulary-treeview-modal.component.html', + styleUrls: ['./vocabulary-treeview-modal.component.scss'] +}) +/** + * Component that contains a modal to display a VocabularyTreeviewComponent + */ +export class VocabularyTreeviewModalComponent { + + /** + * The {@link VocabularyOptions} object + */ + @Input() vocabularyOptions: VocabularyOptions; + + /** + * Representing how many tree level load at initialization + */ + @Input() preloadLevel = 2; + + /** + * The vocabulary entry already selected, if any + */ + @Input() selectedItem: any = null; + + /** + * Initialize instance variables + * + * @param {NgbActiveModal} activeModal + */ + constructor( + public activeModal: NgbActiveModal, + ) { } +} diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 39c62d6e53..18a61b73d7 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -1,77 +1,67 @@ - -
    diff --git a/src/app/search-navbar/search-navbar.component.scss b/src/app/search-navbar/search-navbar.component.scss index c1ccd289b2..d5bef9bc47 100644 --- a/src/app/search-navbar/search-navbar.component.scss +++ b/src/app/search-navbar/search-navbar.component.scss @@ -10,7 +10,7 @@ input[type="text"] { } } -a.submit-icon { +.submit-icon { cursor: pointer; position: sticky; top: 0; diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss index 930384cf64..b030928815 100644 --- a/src/styles/_global-styles.scss +++ b/src/styles/_global-styles.scss @@ -1,206 +1,222 @@ html { - position: relative; - min-height: 100%; + position: relative; + min-height: 100%; } body { - overflow-x: hidden; + overflow-x: hidden; } // Sticky Footer .outer-wrapper { - display: flex; - margin: 0; + display: flex; + margin: 0; } .inner-wrapper { - flex: 1 1 auto; - flex-flow: column nowrap; - display: flex; - min-height: 100vh; - flex-direction: column; - width: 100%; - position: relative; + flex: 1 1 auto; + flex-flow: column nowrap; + display: flex; + min-height: 100vh; + flex-direction: column; + width: 100%; + position: relative; } .main-content { - z-index: var(--ds-main-z-index); - flex: 1 1 100%; - margin-top: var(--ds-content-spacing); - margin-bottom: var(--ds-content-spacing); + z-index: var(--ds-main-z-index); + flex: 1 1 100%; + margin-top: var(--ds-content-spacing); + margin-bottom: var(--ds-content-spacing); } .alert.hide { - padding: 0; - margin: 0; + padding: 0; + margin: 0; } ds-admin-sidebar { - position: fixed; - z-index: var(--ds-sidebar-z-index); + position: fixed; + z-index: var(--ds-sidebar-z-index); } .sticky-top { - z-index: 0; + z-index: 0; } .media-viewer - .change-gallery - .ngx-gallery - ngx-gallery-preview.ngx-gallery-active { - right: 0; - left: auto; - width: calc(100% - 53px); +.change-gallery +.ngx-gallery +ngx-gallery-preview.ngx-gallery-active { + right: 0; + left: auto; + width: calc(100% - 53px); } .ds-submission-reorder-dragging { - .ds-hint, - button { - display: none; - } + .ds-hint, + button { + display: none; + } } ngb-modal-backdrop { - // ng-bootsrap animates opacity, causing the fully opaque background to flash briefly before the transition starts - // animating background-color between transparent & a RGBA color instead looks smoother - &.fade { - opacity: 1 !important; - background-color: transparent; - transition: background-color 0.15s linear; + // ng-bootsrap animates opacity, causing the fully opaque background to flash briefly before the transition starts + // animating background-color between transparent & a RGBA color instead looks smoother + &.fade { + opacity: 1 !important; + background-color: transparent; + transition: background-color 0.15s linear; - &.show { - background-color: rgba(0, 0, 0, 0.5); + &.show { + background-color: rgba(0, 0, 0, 0.5); + } } - } } .dont-break-out { - /* These are technically the same, but use both */ - overflow-wrap: break-word; - word-wrap: break-word; + /* These are technically the same, but use both */ + overflow-wrap: break-word; + word-wrap: break-word; - -ms-word-break: break-all; - /* This is the dangerous one in WebKit, as it breaks things wherever */ - word-break: break-all; - /* Instead use this non-standard one: */ - word-break: break-word; + -ms-word-break: break-all; + /* This is the dangerous one in WebKit, as it breaks things wherever */ + word-break: break-all; + /* Instead use this non-standard one: */ + word-break: break-word; - /* Adds a hyphen where the word breaks, if supported (No Blink) */ - -ms-hyphens: auto; - -moz-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; + /* Adds a hyphen where the word breaks, if supported (No Blink) */ + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; } -.researcher-profile-switch button:focus{ - outline: none !important; +.researcher-profile-switch button:focus { + outline: none !important; } -.researcher-profile-switch .switch.checked{ - color: #fff; + +.researcher-profile-switch .switch.checked { + color: #fff; } /* Replicate default spacing look ~ preserveWhitespace=true To be used e.g. on a div containing buttons that should have a bit of spacing in between */ .space-children-mr > :not(:last-child) { - margin-right: var(--ds-gap); + margin-right: var(--ds-gap); } /* Complement .space-children-mr when spaced elements are not on the same level */ .mr-gap { - margin-right: var(--ds-gap); + margin-right: var(--ds-gap); } .ml-gap { - margin-left: var(--ds-gap); + margin-left: var(--ds-gap); } .custom-accordion .card-header button { - -webkit-box-shadow: none!important; - box-shadow: none!important; - width: 100%; + -webkit-box-shadow: none !important; + box-shadow: none !important; + width: 100%; } + .custom-accordion .card:first-of-type { - border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color) !important; - border-bottom-left-radius: var(--bs-card-border-radius) !important; - border-bottom-right-radius: var(--bs-card-border-radius) !important; + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color) !important; + border-bottom-left-radius: var(--bs-card-border-radius) !important; + border-bottom-right-radius: var(--bs-card-border-radius) !important; } ds-dynamic-form-control-container.d-none { - /* Ensures that form-control containers hidden and disabled by type binding collapse and let other fields in - the same row expand accordingly - */ - visibility: collapse; + /* Ensures that form-control containers hidden and disabled by type binding collapse and let other fields in + the same row expand accordingly + */ + visibility: collapse; } /* Used for dso administrative functionality */ .btn-dark { - background-color: var(--ds-admin-sidebar-bg); + background-color: var(--ds-admin-sidebar-bg); } .preserve-line-breaks { - white-space: pre-line; + white-space: pre-line; } /* Thumbnail styles */ .hide-placeholder-text { - .thumbnail-placeholder { - color: transparent !important; - } + .thumbnail-placeholder { + color: transparent !important; + } } /* Used to hide the thumbnail column in modals. */ .hide-modal-thumbnail-column { - .modal-body ds-listable-object-component-loader div.row > div:first-child { - display: none; - } - .modal-body ds-listable-object-component-loader div.row > div:nth-child(2) { - flex: 0 0 100%; - max-width: 100%; - } + .modal-body ds-listable-object-component-loader div.row > div:first-child { + display: none; + } + + .modal-body ds-listable-object-component-loader div.row > div:nth-child(2) { + flex: 0 0 100%; + max-width: 100%; + } } /* The font sizes used in "no thumbnail" placeholder */ .thumb-font-0 { - .thumbnail-placeholder { - @media screen and (max-width: map-get($grid-breakpoints, lg)) { - font-size: 0.7rem; - padding: 0.2rem; + .thumbnail-placeholder { + @media screen and (max-width: map-get($grid-breakpoints, lg)) { + font-size: 0.7rem; + padding: 0.2rem; + } + @media screen and (max-width: map-get($grid-breakpoints, sm)) { + font-size: 0.6rem; + padding: 0.1rem; + } + font-size: 0.4rem; + padding: 0.1rem; } - @media screen and (max-width: map-get($grid-breakpoints, sm)) { - font-size: 0.6rem; - padding: 0.1rem; - } - font-size: 0.4rem; - padding: 0.1rem; - } } + .thumb-font-1 { - .thumbnail-placeholder { - @media screen and (max-width: map-get($grid-breakpoints, sm)) { - font-size: 0.9rem; - padding: 0.1rem; + .thumbnail-placeholder { + @media screen and (max-width: map-get($grid-breakpoints, sm)) { + font-size: 0.9rem; + padding: 0.1rem; + } + @media screen and (max-width: 950px) { + font-size: 0.4rem; + padding: 0.1rem; + } + font-size: 0.5rem; + padding: 0.125rem; } - @media screen and (max-width: 950px) { - font-size: 0.4rem; - padding: 0.1rem; - } - font-size: 0.5rem; - padding: 0.125rem; - } } + .thumb-font-2 { - .thumbnail-placeholder { - font-size: 0.9rem; - padding: 0.125rem; - } + .thumbnail-placeholder { + font-size: 0.9rem; + padding: 0.125rem; + } } + .thumb-font-3 { - .thumbnail-placeholder { - font-size: 1.25rem; - padding: 0.5rem; - } + .thumbnail-placeholder { + font-size: 1.25rem; + padding: 0.5rem; + } } +.btn.btn-link.btn-link-inline { + display: inline; + padding: 0; + &:not(:disabled){ + &:hover, &:focus { + box-shadow: none; + } + } + +} From 290a89909e20f7cfd200abbbe86f24376593e22b Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Wed, 5 Apr 2023 19:44:46 -0700 Subject: [PATCH 509/833] Added check for external auth and page refresh --- src/app/core/auth/auth.actions.ts | 15 +++++++++++++ src/app/core/auth/auth.effects.spec.ts | 2 ++ src/app/core/auth/auth.effects.ts | 1 + src/app/core/auth/auth.reducer.spec.ts | 23 +++++++++++++++++++ src/app/core/auth/auth.reducer.ts | 10 ++++++++- src/app/core/auth/auth.service.ts | 13 +++++++++-- src/app/core/auth/selectors.ts | 12 ++++++++++ src/app/shared/testing/auth-service.stub.ts | 7 ++++++ src/modules/app/browser-init.service.ts | 25 ++++++++++++++++++++- 9 files changed, 104 insertions(+), 4 deletions(-) diff --git a/src/app/core/auth/auth.actions.ts b/src/app/core/auth/auth.actions.ts index 60440d371e..6bc4565682 100644 --- a/src/app/core/auth/auth.actions.ts +++ b/src/app/core/auth/auth.actions.ts @@ -17,6 +17,7 @@ export const AuthActionTypes = { AUTHENTICATED_SUCCESS: type('dspace/auth/AUTHENTICATED_SUCCESS'), CHECK_AUTHENTICATION_TOKEN: type('dspace/auth/CHECK_AUTHENTICATION_TOKEN'), CHECK_AUTHENTICATION_TOKEN_COOKIE: type('dspace/auth/CHECK_AUTHENTICATION_TOKEN_COOKIE'), + SET_AUTH_COOKIE_STATUS: type('dspace/auth/SET_AUTH_COOKIE_STATUS'), RETRIEVE_AUTH_METHODS: type('dspace/auth/RETRIEVE_AUTH_METHODS'), RETRIEVE_AUTH_METHODS_SUCCESS: type('dspace/auth/RETRIEVE_AUTH_METHODS_SUCCESS'), RETRIEVE_AUTH_METHODS_ERROR: type('dspace/auth/RETRIEVE_AUTH_METHODS_ERROR'), @@ -150,6 +151,19 @@ export class CheckAuthenticationTokenCookieAction implements Action { public type: string = AuthActionTypes.CHECK_AUTHENTICATION_TOKEN_COOKIE; } +/** + * Sets the authentication cookie status to flag an external authentication response. + */ +export class SetAuthCookieStatus implements Action { + public type: string = AuthActionTypes.SET_AUTH_COOKIE_STATUS; + + payload = false; + + constructor(exists: boolean) { + this.payload = exists; + } +} + /** * Sign out. * @class LogOutAction @@ -425,6 +439,7 @@ export type AuthActions | AuthenticationSuccessAction | CheckAuthenticationTokenAction | CheckAuthenticationTokenCookieAction + | SetAuthCookieStatus | RedirectWhenAuthenticationIsRequiredAction | RedirectWhenTokenExpiredAction | AddAuthenticationMessageAction diff --git a/src/app/core/auth/auth.effects.spec.ts b/src/app/core/auth/auth.effects.spec.ts index f09db04d99..7153c5ebbd 100644 --- a/src/app/core/auth/auth.effects.spec.ts +++ b/src/app/core/auth/auth.effects.spec.ts @@ -214,12 +214,14 @@ describe('AuthEffects', () => { authenticated: true }) ); + spyOn((authEffects as any).authService, 'setExternalAuthStatus'); actions = hot('--a-', { a: { type: AuthActionTypes.CHECK_AUTHENTICATION_TOKEN_COOKIE } }); const expected = cold('--b-', { b: new RetrieveTokenAction() }); expect(authEffects.checkTokenCookie$).toBeObservable(expected); authEffects.checkTokenCookie$.subscribe(() => { + expect(authServiceStub.setExternalAuthStatus).toHaveBeenCalledWith(true); expect((authEffects as any).authorizationsService.invalidateAuthorizationsRequestCache).toHaveBeenCalled(); }); }); diff --git a/src/app/core/auth/auth.effects.ts b/src/app/core/auth/auth.effects.ts index 22d1bf35e7..281355b769 100644 --- a/src/app/core/auth/auth.effects.ts +++ b/src/app/core/auth/auth.effects.ts @@ -153,6 +153,7 @@ export class AuthEffects { return this.authService.checkAuthenticationCookie().pipe( map((response: AuthStatus) => { if (response.authenticated) { + this.authService.setExternalAuthStatus(true); this.authorizationsService.invalidateAuthorizationsRequestCache(); return new RetrieveTokenAction(); } else { diff --git a/src/app/core/auth/auth.reducer.spec.ts b/src/app/core/auth/auth.reducer.spec.ts index 8ebc9f6cb0..c0619adf79 100644 --- a/src/app/core/auth/auth.reducer.spec.ts +++ b/src/app/core/auth/auth.reducer.spec.ts @@ -8,6 +8,7 @@ import { AuthenticationErrorAction, AuthenticationSuccessAction, CheckAuthenticationTokenAction, + SetAuthCookieStatus, CheckAuthenticationTokenCookieAction, LogOutAction, LogOutErrorAction, @@ -219,6 +220,28 @@ describe('authReducer', () => { expect(newState).toEqual(state); }); + it('should set the authentication cookie status in response to a SET_AUTH_COOKIE_STATUS action', () => { + initialState = { + authenticated: true, + loaded: false, + blocking: false, + loading: true, + externalAuth: false, + idle: false + }; + const action = new SetAuthCookieStatus(true); + const newState = authReducer(initialState, action); + state = { + authenticated: true, + loaded: false, + blocking: false, + loading: true, + externalAuth: true, + idle: false + }; + expect(newState).toEqual(state); + }); + it('should properly set the state, in response to a LOG_OUT action', () => { initialState = { authenticated: true, diff --git a/src/app/core/auth/auth.reducer.ts b/src/app/core/auth/auth.reducer.ts index acdb8ef812..ba9c41326a 100644 --- a/src/app/core/auth/auth.reducer.ts +++ b/src/app/core/auth/auth.reducer.ts @@ -10,7 +10,7 @@ import { RedirectWhenTokenExpiredAction, RefreshTokenSuccessAction, RetrieveAuthenticatedEpersonSuccessAction, - RetrieveAuthMethodsSuccessAction, + RetrieveAuthMethodsSuccessAction, SetAuthCookieStatus, SetRedirectUrlAction } from './auth.actions'; // import models @@ -59,6 +59,8 @@ export interface AuthState { // all authentication Methods enabled at the backend authMethods?: AuthMethod[]; + externalAuth?: boolean, + // true when the current user is idle idle: boolean; @@ -73,6 +75,7 @@ const initialState: AuthState = { blocking: true, loading: false, authMethods: [], + externalAuth: false, idle: false }; @@ -104,6 +107,11 @@ export function authReducer(state: any = initialState, action: AuthActions): Aut loading: true, }); + case AuthActionTypes.SET_AUTH_COOKIE_STATUS: + return Object.assign({}, state, { + externalAuth: (action as SetAuthCookieStatus).payload + }); + case AuthActionTypes.AUTHENTICATED_ERROR: case AuthActionTypes.RETRIEVE_AUTHENTICATED_EPERSON_ERROR: return Object.assign({}, state, { diff --git a/src/app/core/auth/auth.service.ts b/src/app/core/auth/auth.service.ts index 3034c00197..fae5872c89 100644 --- a/src/app/core/auth/auth.service.ts +++ b/src/app/core/auth/auth.service.ts @@ -25,7 +25,7 @@ import { import { CookieService } from '../services/cookie.service'; import { getAuthenticatedUserId, - getAuthenticationToken, + getAuthenticationToken, getExternalAuthCookieStatus, getRedirectUrl, isAuthenticated, isAuthenticatedLoaded, @@ -36,7 +36,7 @@ import { AppState } from '../../app.reducer'; import { CheckAuthenticationTokenAction, RefreshTokenAction, - ResetAuthenticationMessagesAction, + ResetAuthenticationMessagesAction, SetAuthCookieStatus, SetRedirectUrlAction, SetUserAsIdleAction, UnsetUserAsIdleAction @@ -156,6 +156,15 @@ export class AuthService { return this.store.pipe(select(isAuthenticatedLoaded)); } + public setExternalAuthStatus(external: boolean) { + this.store.dispatch(new SetAuthCookieStatus(external)); + } + + public isExternalAuthentication(): Observable { + return this.store.pipe( + select(getExternalAuthCookieStatus)); + } + /** * Returns the href link to authenticated user * @returns {string} diff --git a/src/app/core/auth/selectors.ts b/src/app/core/auth/selectors.ts index ce8d38d6ba..16246fb14c 100644 --- a/src/app/core/auth/selectors.ts +++ b/src/app/core/auth/selectors.ts @@ -116,6 +116,8 @@ const _getRedirectUrl = (state: AuthState) => state.redirectUrl; const _getAuthenticationMethods = (state: AuthState) => state.authMethods; +const _getExternalAuthCookieStatus = (state: AuthState) => state.externalAuth; + /** * Returns true if the user is idle. * @function _isIdle @@ -178,6 +180,16 @@ export const isAuthenticated = createSelector(getAuthState, _isAuthenticated); */ export const isAuthenticatedLoaded = createSelector(getAuthState, _isAuthenticatedLoaded); +/** + * Returns the authentication cookie status. Expect to be ture when external authentication + * is used. + * @function getExternalAuthCookieStatus + * @param {AuthState} state + * @param {any} props + * @return {boolean} + */ +export const getExternalAuthCookieStatus = createSelector(getAuthState, _getExternalAuthCookieStatus); + /** * Returns true if the authentication request is loading. * @function isAuthenticationLoading diff --git a/src/app/shared/testing/auth-service.stub.ts b/src/app/shared/testing/auth-service.stub.ts index b8d822252d..e5ae355658 100644 --- a/src/app/shared/testing/auth-service.stub.ts +++ b/src/app/shared/testing/auth-service.stub.ts @@ -122,6 +122,13 @@ export class AuthServiceStub { checkAuthenticationCookie() { return; } + setExternalAuthStatus(externalCookie: boolean) { + return; + } + + isExternalAuthentication(): Observable { + return; + } retrieveAuthMethodsFromAuthStatus(status: AuthStatus) { return observableOf(authMethodsMock); diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 687ecf0547..c7559363a3 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -26,10 +26,11 @@ import { AuthService } from '../../app/core/auth/auth.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { StoreAction, StoreActionTypes } from '../../app/store.actions'; import { coreSelector } from '../../app/core/core.selectors'; -import { find, map } from 'rxjs/operators'; +import { filter, find, map, switchMap } from 'rxjs/operators'; import { isNotEmpty } from '../../app/shared/empty.util'; import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; +import { RootDataService } from '../../app/core/data/root-data.service'; /** * Performs client-side initialization. @@ -51,6 +52,7 @@ export class BrowserInitService extends InitService { protected authService: AuthService, protected themeService: ThemeService, protected menuService: MenuService, + private rootDatatService: RootDataService ) { super( store, @@ -80,6 +82,7 @@ export class BrowserInitService extends InitService { return async () => { await this.loadAppState(); this.checkAuthenticationToken(); + this.externalAuthCheck(); this.initCorrelationId(); this.checkEnvironment(); @@ -134,4 +137,24 @@ export class BrowserInitService extends InitService { protected initGoogleAnalytics() { this.googleAnalyticsService.addTrackingIdToPage(); } + + /** + * When authenticated during the external authentication flow invalidate + * the cache so the app is rehydrated with fresh data. + * @private + */ + private externalAuthCheck() { + + this.authenticationReady$().pipe( + switchMap(() => this.authService.isExternalAuthentication().pipe( + filter((externalAuth: boolean) => externalAuth) + )) + ).subscribe(() => { + this.authService.setExternalAuthStatus(false); + this.rootDatatService.invalidateRootCache(); + } + ); + + } + } From 4c2a7a10c71145435ab2795f30da45c6555ff657 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 6 Apr 2023 07:33:46 -0700 Subject: [PATCH 510/833] updated auth-cookie check --- src/modules/app/browser-init.service.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index c7559363a3..60e6223ebb 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -139,19 +139,18 @@ export class BrowserInitService extends InitService { } /** - * When authenticated during the external authentication flow invalidate - * the cache so the app is rehydrated with fresh data. + * During the external authentication flow invalidates the SSR transferState + * data in the cache. This allows the app to fetch fresh content. * @private */ private externalAuthCheck() { - this.authenticationReady$().pipe( - switchMap(() => this.authService.isExternalAuthentication().pipe( - filter((externalAuth: boolean) => externalAuth) - )) + this.authService.isExternalAuthentication().pipe( + filter((externalAuth: boolean) => externalAuth) ).subscribe(() => { - this.authService.setExternalAuthStatus(false); + // Clear the transferState data. this.rootDatatService.invalidateRootCache(); + this.authService.setExternalAuthStatus(false); } ); From 0bf095a1d9f0c2d4b3af481ad6ce7194e9f30564 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 6 Apr 2023 07:53:34 -0700 Subject: [PATCH 511/833] removed unused import --- src/modules/app/browser-init.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 60e6223ebb..a1b41c8ea2 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -26,7 +26,7 @@ import { AuthService } from '../../app/core/auth/auth.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { StoreAction, StoreActionTypes } from '../../app/store.actions'; import { coreSelector } from '../../app/core/core.selectors'; -import { filter, find, map, switchMap } from 'rxjs/operators'; +import { filter, find, map } from 'rxjs/operators'; import { isNotEmpty } from '../../app/shared/empty.util'; import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; From d8ee1f55f170cc21c6d73f12e18036e2a704b88d Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 6 Apr 2023 09:26:36 -0700 Subject: [PATCH 512/833] closing auth check subscription --- src/modules/app/browser-init.service.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index a1b41c8ea2..f5b48fd902 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -31,12 +31,16 @@ import { isNotEmpty } from '../../app/shared/empty.util'; import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; import { RootDataService } from '../../app/core/data/root-data.service'; +import { firstValueFrom, Subscription } from 'rxjs'; /** * Performs client-side initialization. */ @Injectable() export class BrowserInitService extends InitService { + + sub: Subscription; + constructor( protected store: Store, protected correlationIdService: CorrelationIdService, @@ -139,13 +143,13 @@ export class BrowserInitService extends InitService { } /** - * During the external authentication flow invalidates the SSR transferState + * During an external authentication flow invalidate the SSR transferState * data in the cache. This allows the app to fetch fresh content. * @private */ private externalAuthCheck() { - this.authService.isExternalAuthentication().pipe( + this.sub = this.authService.isExternalAuthentication().pipe( filter((externalAuth: boolean) => externalAuth) ).subscribe(() => { // Clear the transferState data. @@ -154,6 +158,19 @@ export class BrowserInitService extends InitService { } ); + this.closeAuthCheckSubscription(); + } + + /** + * Unsubscribe the external authentication subscription + * when authentication is no longer blocking. + * @private + */ + private closeAuthCheckSubscription() { + firstValueFrom(this.authenticationReady$()).then(() => { + this.sub.unsubscribe(); + } + ) } } From e336660cdd6aab7bf4dd171ad0fda9a4609f52b2 Mon Sep 17 00:00:00 2001 From: Michael Spalti Date: Thu, 6 Apr 2023 10:01:00 -0700 Subject: [PATCH 513/833] lint fix --- src/modules/app/browser-init.service.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index f5b48fd902..254406dc7e 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -169,8 +169,7 @@ export class BrowserInitService extends InitService { private closeAuthCheckSubscription() { firstValueFrom(this.authenticationReady$()).then(() => { this.sub.unsubscribe(); - } - ) + }); } } From b1f3b785e1cf27ad7cfe9db893489c655535f940 Mon Sep 17 00:00:00 2001 From: Michael W Spalti Date: Wed, 19 Apr 2023 11:36:42 -0700 Subject: [PATCH 514/833] Added typedoc and minor test update --- src/app/core/auth/auth.effects.spec.ts | 3 ++- src/app/core/auth/auth.service.ts | 9 +++++++++ src/app/core/auth/selectors.ts | 2 +- src/app/shared/testing/auth-service.stub.ts | 5 +++-- src/modules/app/browser-init.service.ts | 4 ++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/app/core/auth/auth.effects.spec.ts b/src/app/core/auth/auth.effects.spec.ts index 7153c5ebbd..2e6ba917aa 100644 --- a/src/app/core/auth/auth.effects.spec.ts +++ b/src/app/core/auth/auth.effects.spec.ts @@ -221,7 +221,8 @@ describe('AuthEffects', () => { expect(authEffects.checkTokenCookie$).toBeObservable(expected); authEffects.checkTokenCookie$.subscribe(() => { - expect(authServiceStub.setExternalAuthStatus).toHaveBeenCalledWith(true); + expect(authServiceStub.setExternalAuthStatus).toHaveBeenCalled(); + expect(authServiceStub.isExternalAuthentication).toBeTrue(); expect((authEffects as any).authorizationsService.invalidateAuthorizationsRequestCache).toHaveBeenCalled(); }); }); diff --git a/src/app/core/auth/auth.service.ts b/src/app/core/auth/auth.service.ts index fae5872c89..6604936cde 100644 --- a/src/app/core/auth/auth.service.ts +++ b/src/app/core/auth/auth.service.ts @@ -156,10 +156,19 @@ export class AuthService { return this.store.pipe(select(isAuthenticatedLoaded)); } + /** + * Used to set the external authentication status when authenticating via an + * external authentication system (e.g. Shibboleth). + * @param external + */ public setExternalAuthStatus(external: boolean) { this.store.dispatch(new SetAuthCookieStatus(external)); } + /** + * Returns true if an external authentication system (e.g. Shibboleth) is being used + * for authentication. Returns false otherwise. + */ public isExternalAuthentication(): Observable { return this.store.pipe( select(getExternalAuthCookieStatus)); diff --git a/src/app/core/auth/selectors.ts b/src/app/core/auth/selectors.ts index 16246fb14c..aba739edf6 100644 --- a/src/app/core/auth/selectors.ts +++ b/src/app/core/auth/selectors.ts @@ -181,7 +181,7 @@ export const isAuthenticated = createSelector(getAuthState, _isAuthenticated); export const isAuthenticatedLoaded = createSelector(getAuthState, _isAuthenticatedLoaded); /** - * Returns the authentication cookie status. Expect to be ture when external authentication + * Returns the authentication cookie status. Expect to be true when external authentication * is used. * @function getExternalAuthCookieStatus * @param {AuthState} state diff --git a/src/app/shared/testing/auth-service.stub.ts b/src/app/shared/testing/auth-service.stub.ts index e5ae355658..7f3d040042 100644 --- a/src/app/shared/testing/auth-service.stub.ts +++ b/src/app/shared/testing/auth-service.stub.ts @@ -17,6 +17,7 @@ export class AuthServiceStub { token: AuthTokenInfo = new AuthTokenInfo('token_test'); impersonating: string; private _tokenExpired = false; + private _isExternalAuth = false; private redirectUrl; constructor() { @@ -123,11 +124,11 @@ export class AuthServiceStub { return; } setExternalAuthStatus(externalCookie: boolean) { - return; + this._isExternalAuth = externalCookie; } isExternalAuthentication(): Observable { - return; + return observableOf(this._isExternalAuth); } retrieveAuthMethodsFromAuthStatus(status: AuthStatus) { diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 254406dc7e..61d57f10f9 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -56,7 +56,7 @@ export class BrowserInitService extends InitService { protected authService: AuthService, protected themeService: ThemeService, protected menuService: MenuService, - private rootDatatService: RootDataService + private rootDataService: RootDataService ) { super( store, @@ -153,7 +153,7 @@ export class BrowserInitService extends InitService { filter((externalAuth: boolean) => externalAuth) ).subscribe(() => { // Clear the transferState data. - this.rootDatatService.invalidateRootCache(); + this.rootDataService.invalidateRootCache(); this.authService.setExternalAuthStatus(false); } ); From 73b2c0b29fc724cd92080891c348bc92860e185d Mon Sep 17 00:00:00 2001 From: Sean Kalynuk Date: Wed, 19 Apr 2023 16:44:04 -0500 Subject: [PATCH 515/833] Fix #2197 authority key lookup Avoid an authority key lookup when it starts with "will be generated::" --- .../models/dynamic-vocabulary.component.ts | 2 +- .../builder/models/form-field-metadata-value.model.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts index 4c24443633..a58e674462 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/dynamic-vocabulary.component.ts @@ -53,7 +53,7 @@ export abstract class DsDynamicVocabularyComponent extends DynamicFormControlCom */ getInitValueFromModel(): Observable { let initValue$: Observable; - if (isNotEmpty(this.model.value) && (this.model.value instanceof FormFieldMetadataValueObject)) { + if (isNotEmpty(this.model.value) && (this.model.value instanceof FormFieldMetadataValueObject) && !this.model.value.hasAuthorityToGenerate()) { let initEntry$: Observable; if (this.model.value.hasAuthority()) { initEntry$ = this.vocabularyService.getVocabularyEntryByID(this.model.value.authority, this.model.vocabularyOptions); diff --git a/src/app/shared/form/builder/models/form-field-metadata-value.model.ts b/src/app/shared/form/builder/models/form-field-metadata-value.model.ts index b58844a537..9b18084e40 100644 --- a/src/app/shared/form/builder/models/form-field-metadata-value.model.ts +++ b/src/app/shared/form/builder/models/form-field-metadata-value.model.ts @@ -11,6 +11,10 @@ export interface OtherInformation { * A class representing a specific input-form field's value */ export class FormFieldMetadataValueObject implements MetadataValueInterface { + + static readonly AUTHORITY_SPLIT: string = '::'; + static readonly AUTHORITY_GENERATE: string = 'will be generated' + FormFieldMetadataValueObject.AUTHORITY_SPLIT; + metadata?: string; value: any; display: string; @@ -58,6 +62,13 @@ export class FormFieldMetadataValueObject implements MetadataValueInterface { return isNotEmpty(this.authority); } + /** + * Returns true if this object has an authority value that needs to be generated + */ + hasAuthorityToGenerate(): boolean { + return isNotEmpty(this.authority) && this.authority.startsWith(FormFieldMetadataValueObject.AUTHORITY_GENERATE); + } + /** * Returns true if this this object has a value */ From 41e4e870619e1c5a30b9d740dafa693107e4d88d Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 20 Apr 2023 10:13:55 +0200 Subject: [PATCH 516/833] 100414: Add entities to allowed object route --- src/app/search-page/search-tracker.component.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/app/search-page/search-tracker.component.ts b/src/app/search-page/search-tracker.component.ts index eb7ac6fcc3..6aa043cb54 100644 --- a/src/app/search-page/search-tracker.component.ts +++ b/src/app/search-page/search-tracker.component.ts @@ -42,6 +42,13 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit, O */ uuidRegex = /\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g; + /** + * List of paths that are considered to be the start of a route to an object page (excluding "/", e.g. "items") + * These are expected to end on an object UUID + * If they match the route we're navigating to, an object property will be added to the search event sent + */ + allowedObjectPaths: string[] = ['entities', ITEM_MODULE_PATH, COLLECTION_MODULE_PATH, COMMUNITY_MODULE_PATH]; + /** * Array to track all subscriptions and unsubscribe them onDestroy * @type {Array} @@ -142,12 +149,12 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit, O /** * Get the UUID from a DSO url - * Return null if the url isn't a community, collection or item page or the UUID couldn't be found + * Return null if the url isn't an object page (allowedObjectPaths) or the UUID couldn't be found * @param url */ getDsoUUIDFromUrl(url: string): string { if (isNotEmpty(url)) { - if (url.startsWith(`/${ITEM_MODULE_PATH}`) || url.startsWith(`/${COLLECTION_MODULE_PATH}`) || url.startsWith(`/${COMMUNITY_MODULE_PATH}`)) { + if (this.allowedObjectPaths.some((path) => url.startsWith(`/${path}`))) { const uuid = url.substring(url.lastIndexOf('/') + 1); if (uuid.match(this.uuidRegex)) { return uuid; From 9de002120dc9fdcf90fe992d21e5c4f02dd9ec51 Mon Sep 17 00:00:00 2001 From: aroman-arvo Date: Thu, 20 Apr 2023 11:12:37 +0200 Subject: [PATCH 517/833] #8636 Request a Copy's "helpdesk" strategy requires authentication to respond --- src/app/app-routing.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index b69e47c82c..deb68f1ea9 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -209,7 +209,7 @@ import { ThemedPageErrorComponent } from './page-error/themed-page-error.compone { path: REQUEST_COPY_MODULE_PATH, loadChildren: () => import('./request-copy/request-copy.module').then((m) => m.RequestCopyModule), - canActivate: [AuthenticatedGuard, EndUserAgreementCurrentUserGuard] + canActivate: [EndUserAgreementCurrentUserGuard] }, { path: FORBIDDEN_PATH, From e0fb0e14a345c71d83fcb9aeb6cdb93d07bb3fcb Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Wed, 19 Apr 2023 21:17:04 +0200 Subject: [PATCH 518/833] Show N/A when submitter has been removed --- .../item-submitter.component.html | 11 +++++++++-- .../item-submitter.component.spec.ts | 18 +++++++++++++----- src/assets/i18n/en.json5 | 1 + 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html index f259fed7e9..0f9cdf846e 100644 --- a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html +++ b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.html @@ -1,6 +1,13 @@ -
    +
    {{'submission.workflow.tasks.generic.submitter' | translate}}: - {{ dsoNameService.getName(submitter$ | async)}} + + + {{ dsoNameService.getName(submitter) }} + + + {{ 'submitter.empty' | translate }} + +
    diff --git a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.spec.ts b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.spec.ts index cf1de597f6..abaf029155 100644 --- a/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.spec.ts +++ b/src/app/shared/object-collection/shared/mydspace-item-submitter/item-submitter.component.spec.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA } from '@angular/core'; +import { ChangeDetectionStrategy, NO_ERRORS_SCHEMA, DebugElement } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; @@ -60,10 +60,18 @@ describe('ItemSubmitterComponent', () => { })); }); - it('should show a badge with submitter name', () => { - const badge = fixture.debugElement.query(By.css('.badge')); + it('should show N/A when submitter is null', () => { + component.submitter$ = observableOf(null); + fixture.detectChanges(); - expect(badge).not.toBeNull(); - expect(badge.nativeElement.innerHTML).toBe(EPersonMock.name); + const badge: DebugElement = fixture.debugElement.query(By.css('.badge')); + + expect(badge.nativeElement.innerText).toBe('submitter.empty'); + }); + + it('should show a badge with submitter name', () => { + const badge: DebugElement = fixture.debugElement.query(By.css('.badge')); + + expect(badge.nativeElement.innerText).toBe(EPersonMock.name); }); }); diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index dc096b2031..61c950e267 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4776,6 +4776,7 @@ "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + "submitter.empty": "N/A", "subscriptions.title": "Subscriptions", From 7f7ed17d6e54e965b899f472ffa9689fc3665af9 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 21 Apr 2023 09:11:28 +0200 Subject: [PATCH 519/833] 101127: Add multiSelect tests in VocabularyTreeviewComponent --- .../vocabulary-treeview.component.spec.ts | 60 ++++++++++++++++--- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts index 043ff9ea56..29e80cfc94 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts @@ -12,7 +12,7 @@ import { createTestComponent } from '../../testing/utils.test'; import { VocabularyTreeviewComponent } from './vocabulary-treeview.component'; import { VocabularyTreeviewService } from './vocabulary-treeview.service'; import { VocabularyEntryDetail } from '../../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; -import { TreeviewFlatNode } from './vocabulary-treeview-node.model'; +import { TreeviewFlatNode, TreeviewNode } from './vocabulary-treeview-node.model'; import { FormFieldMetadataValueObject } from '../builder/models/form-field-metadata-value.model'; import { VocabularyOptions } from '../../../core/submission/vocabularies/models/vocabulary-options.model'; import { PageInfo } from '../../../core/shared/page-info.model'; @@ -20,6 +20,7 @@ import { VocabularyEntry } from '../../../core/submission/vocabularies/models/vo import { AuthTokenInfo } from '../../../core/auth/models/auth-token-info.model'; import { authReducer } from '../../../core/auth/auth.reducer'; import { storeModuleConfig } from '../../../app.reducer'; +import { By } from '@angular/platform-browser'; describe('VocabularyTreeviewComponent test suite', () => { @@ -27,6 +28,7 @@ describe('VocabularyTreeviewComponent test suite', () => { let compAsAny: any; let fixture: ComponentFixture; let initialState; + let de; const item = new VocabularyEntryDetail(); item.id = 'node1'; @@ -87,6 +89,12 @@ describe('VocabularyTreeviewComponent test suite', () => { }); })); + afterEach(() => { + fixture.destroy(); + comp = null; + compAsAny = null; + }); + describe('', () => { let testComp: TestComponent; let testFixture: ComponentFixture; @@ -120,12 +128,6 @@ describe('VocabularyTreeviewComponent test suite', () => { comp.selectedItems = []; }); - afterEach(() => { - fixture.destroy(); - comp = null; - compAsAny = null; - }); - it('should should init component properly', () => { fixture.detectChanges(); expect(comp.dataSource.data).toEqual([]); @@ -229,6 +231,50 @@ describe('VocabularyTreeviewComponent test suite', () => { expect(vocabularyTreeviewServiceStub.cleanTree).toHaveBeenCalled(); }); }); + + describe('', () => { + beforeEach(() => { + vocabularyTreeviewServiceStub.getData.and.returnValue(observableOf([ + { + 'item': { + 'id': 'srsc:SCB11', + 'display': 'HUMANITIES and RELIGION' + } + } as TreeviewNode, + { + 'item': { + 'id': 'srsc:SCB12', + 'display': 'LAW/JURISPRUDENCE' + } + } as TreeviewNode, + { + 'item': { + 'id': 'srsc:SCB13', + 'display': 'SOCIAL SCIENCES' + } + } as TreeviewNode, + ])); + fixture = TestBed.createComponent(VocabularyTreeviewComponent); + comp = fixture.componentInstance; + compAsAny = comp; + comp.vocabularyOptions = vocabularyOptions; + comp.selectedItems = []; + de = fixture.debugElement; + }); + + it('should not display checkboxes by default', async () => { + fixture.detectChanges(); + expect(de.query(By.css('input[checkbox]'))).toBeNull(); + expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); + }); + + it('should display checkboxes if multiSelect is true', async () => { + comp.multiSelect = true; + fixture.detectChanges(); + expect(de.queryAll(By.css('#leaf-node-checkbox')).length).toEqual(3); + expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); + }); + }); }); // declare a test component From 4f83eaa53d0df45b01d9465512d8435a42fe65d4 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 21 Apr 2023 09:47:18 -0400 Subject: [PATCH 520/833] Tidy up interface declarations. --- .../sections/upload/file/section-upload-file.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/submission/sections/upload/file/section-upload-file.component.ts b/src/app/submission/sections/upload/file/section-upload-file.component.ts index a8e05fcf40..fb6f499833 100644 --- a/src/app/submission/sections/upload/file/section-upload-file.component.ts +++ b/src/app/submission/sections/upload/file/section-upload-file.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, Input, OnChanges, OnInit, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; import { filter } from 'rxjs/operators'; @@ -27,7 +27,7 @@ import { NgbModalOptions } from '@ng-bootstrap/ng-bootstrap/modal/modal-config'; styleUrls: ['./section-upload-file.component.scss'], templateUrl: './section-upload-file.component.html', }) -export class SubmissionSectionUploadFileComponent implements OnChanges, OnInit { +export class SubmissionSectionUploadFileComponent implements OnChanges, OnInit, OnDestroy { /** * The list of available access condition From 6adc9a1742b24bcf22da14bf73aad53161e97098 Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Fri, 21 Apr 2023 09:55:18 -0400 Subject: [PATCH 521/833] Make theme-able. --- .../themed-section-upload-file.component.ts | 93 +++++++++++++++++++ .../upload/section-upload.component.html | 4 +- src/app/submission/submission.module.ts | 2 + 3 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/app/submission/sections/upload/file/themed-section-upload-file.component.ts diff --git a/src/app/submission/sections/upload/file/themed-section-upload-file.component.ts b/src/app/submission/sections/upload/file/themed-section-upload-file.component.ts new file mode 100644 index 0000000000..9e0a265c3c --- /dev/null +++ b/src/app/submission/sections/upload/file/themed-section-upload-file.component.ts @@ -0,0 +1,93 @@ +import { Component, Input } from '@angular/core'; +import { SubmissionFormsModel } from 'src/app/core/config/models/config-submission-forms.model'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; +import { SubmissionSectionUploadFileComponent } from './section-upload-file.component'; + +@Component({ + selector: 'ds-themed-submission-upload-section-file', + styleUrls: [], + templateUrl: '../../../../shared/theme-support/themed.component.html' +}) +export class ThemedSubmissionSectionUploadFileComponent + extends ThemedComponent { + + /** + * The list of available access condition + * @type {Array} + */ + @Input() availableAccessConditionOptions: any[]; + + /** + * The submission id + * @type {string} + */ + @Input() collectionId: string; + + /** + * Define if collection access conditions policy type : + * POLICY_DEFAULT_NO_LIST : is not possible to define additional access group/s for the single file + * POLICY_DEFAULT_WITH_LIST : is possible to define additional access group/s for the single file + * @type {number} + */ + @Input() collectionPolicyType: number; + + /** + * The configuration for the bitstream's metadata form + * @type {SubmissionFormsModel} + */ + @Input() configMetadataForm: SubmissionFormsModel; + + /** + * The bitstream id + * @type {string} + */ + @Input() fileId: string; + + /** + * The bitstream array key + * @type {string} + */ + @Input() fileIndex: string; + + /** + * The bitstream id + * @type {string} + */ + @Input() fileName: string; + + /** + * The section id + * @type {string} + */ + @Input() sectionId: string; + + /** + * The submission id + * @type {string} + */ + @Input() submissionId: string; + + protected inAndOutputNames: (keyof SubmissionSectionUploadFileComponent & keyof this)[] = [ + 'availableAccessConditionOptions', + 'collectionId', + 'collectionPolicyType', + 'configMetadataForm', + 'fileId', + 'fileIndex', + 'fileName', + 'sectionId', + 'submissionId' + ]; + + protected getComponentName(): string { + return 'SubmissionSectionUploadFileComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/submission/sections/upload/file/section-upload-file.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./section-upload-file.component`); + } +} diff --git a/src/app/submission/sections/upload/section-upload.component.html b/src/app/submission/sections/upload/section-upload.component.html index 8a19f66220..b57b454288 100644 --- a/src/app/submission/sections/upload/section-upload.component.html +++ b/src/app/submission/sections/upload/section-upload.component.html @@ -28,7 +28,7 @@
    - + [submissionId]="submissionId">

    diff --git a/src/app/submission/submission.module.ts b/src/app/submission/submission.module.ts index 91f782225a..cf0ab2b369 100644 --- a/src/app/submission/submission.module.ts +++ b/src/app/submission/submission.module.ts @@ -49,6 +49,7 @@ import { ResearchEntitiesModule } from '../entity-groups/research-entities/resea import { ThemedSubmissionEditComponent } from './edit/themed-submission-edit.component'; import { ThemedSubmissionSubmitComponent } from './submit/themed-submission-submit.component'; import { ThemedSubmissionImportExternalComponent } from './import-external/themed-submission-import-external.component'; +import { ThemedSubmissionSectionUploadFileComponent } from './sections/upload/file/themed-section-upload-file.component'; import { FormModule } from '../shared/form/form.module'; import { NgbAccordionModule, NgbCollapseModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap'; import { SubmissionSectionAccessesComponent } from './sections/accesses/section-accesses.component'; @@ -104,6 +105,7 @@ const DECLARATIONS = [ PublisherPolicyComponent, PublicationInformationComponent, MetadataInformationComponent, + ThemedSubmissionSectionUploadFileComponent, ]; @NgModule({ From 1ba642719d4939d3c9788a4a56320b8ef63a6a68 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 24 Apr 2023 10:31:37 +0200 Subject: [PATCH 522/833] 101108: Automatic ng update ng-mocks --- package.json | 4 +- yarn.lock | 2112 +++++++++++++++++++++++++------------------------- 2 files changed, 1062 insertions(+), 1054 deletions(-) diff --git a/package.json b/package.json index b7ed6e3d3e..d3085d1d07 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "mirador-dl-plugin": "^0.13.0", "mirador-share-plugin": "^0.11.0", "morgan": "^1.10.0", - "ng-mocks": "^13.1.1", + "ng-mocks": "^14.10.0", "ng2-file-upload": "1.4.0", "ng2-nouislider": "^1.8.3", "ngx-infinite-scroll": "^10.0.1", @@ -203,4 +203,4 @@ "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.5.0" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 70d5b7f49d..edf28de782 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@ampproject/remapping@2.2.0": version "2.2.0" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" @@ -18,6 +10,14 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@ampproject/remapping@^2.1.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@angular-builders/custom-webpack@~15.0.0": version "15.0.0" resolved "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-15.0.0.tgz" @@ -31,6 +31,14 @@ tsconfig-paths "^4.1.0" webpack-merge "^5.7.3" +"@angular-devkit/architect@0.1502.5", "@angular-devkit/architect@>=0.1500.0 < 0.1600.0", "@angular-devkit/architect@~0.1502.0": + version "0.1502.5" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" + integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== + dependencies: + "@angular-devkit/core" "15.2.5" + rxjs "6.6.7" + "@angular-devkit/architect@^0.1202.10": version "0.1202.18" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.18.tgz" @@ -39,14 +47,6 @@ "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/architect@>=0.1500.0 < 0.1600.0", "@angular-devkit/architect@~0.1502.0", "@angular-devkit/architect@0.1502.5": - version "0.1502.5" - resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.5.tgz" - integrity sha512-6KVrXQ/X7W88WSJvYe69ed/2QzQNlObKpj3BWzmcKnA+IvJB37/mvw8VaGFP9y+pDa/b1D1yCDtAJLeP5QY3xg== - dependencies: - "@angular-devkit/core" "15.2.5" - rxjs "6.6.7" - "@angular-devkit/build-angular@^15.0.0", "@angular-devkit/build-angular@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.5.tgz" @@ -123,7 +123,7 @@ "@angular-devkit/architect" "0.1502.5" rxjs "6.6.7" -"@angular-devkit/core@^12.2.17", "@angular-devkit/core@12.2.18": +"@angular-devkit/core@12.2.18", "@angular-devkit/core@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" integrity sha512-GDLHGe9HEY5SRS+NrKr14C8aHsRCiBFkBFSSbeohgLgcgSXzZHFoU84nDWrl3KZNP8oqcUSv5lHu6dLcf2fnww== @@ -135,7 +135,7 @@ rxjs "6.6.7" source-map "0.7.3" -"@angular-devkit/core@^15.0.0", "@angular-devkit/core@~15.2.0", "@angular-devkit/core@15.2.5": +"@angular-devkit/core@15.2.5", "@angular-devkit/core@^15.0.0", "@angular-devkit/core@~15.2.0": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.5.tgz" integrity sha512-ZfjEkAe2yYeekc3xjZ/U4pK9nb+w6BFwAEjou6mE8PWZH7iYskm0YCCXkmu+B+zViEcCLhAkJAxu9MwX4efd8g== @@ -146,7 +146,7 @@ rxjs "6.6.7" source-map "0.7.4" -"@angular-devkit/schematics@^12.2.17", "@angular-devkit/schematics@12.2.18": +"@angular-devkit/schematics@12.2.18", "@angular-devkit/schematics@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" integrity sha512-bZ9NS5PgoVfetRC6WeQBHCY5FqPZ9y2TKHUo12sOB2YSL3tgWgh1oXyP8PtX34gasqsLjNULxEQsAQYEsiX/qQ== @@ -223,7 +223,7 @@ "@angular-eslint/bundled-angular-compiler" "15.2.1" "@typescript-eslint/utils" "5.48.2" -"@angular/animations@^15.2.6", "@angular/animations@>=10.0.0", "@angular/animations@>=13.0.0 <14", "@angular/animations@15.2.6": +"@angular/animations@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/animations/-/animations-15.2.6.tgz" integrity sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ== @@ -239,7 +239,7 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@^15.2.5", "@angular/cli@>= 15.0.0 < 16.0.0", "@angular/cli@>=12": +"@angular/cli@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@angular/cli/-/cli-15.2.5.tgz" integrity sha512-TmkkeJkdfDkC6b2SNQcLlr1rsl2anc5rrrY3gawOVXYXBExMxAi2SNJsHZzUXfiitW52aZkAyajF1VFazs8PRw== @@ -263,14 +263,14 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@*", "@angular/common@^11.0.0", "@angular/common@^13.0.0", "@angular/common@^13.0.0 || ^14.0.0-0", "@angular/common@^15.0.0", "@angular/common@^15.2.6", "@angular/common@>=10.0.0", "@angular/common@>=13.0.0 <14", "@angular/common@>=13.0.0-0", "@angular/common@>=2.x", "@angular/common@>=5.0.0", "@angular/common@15.2.6", "@angular/common@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/common@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.6", "@angular/compiler-cli@15.2.6": +"@angular/compiler-cli@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" integrity sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw== @@ -286,21 +286,21 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@^15.2.6", "@angular/compiler@15.2.6": +"@angular/compiler@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.6.tgz" integrity sha512-6oBAIY5KcC1UNsrnWGLcopZ9RD7c0HzpTCQY46N6HytHtUjBvzLbGWZu5MfahPtIjKz9FMVYBX9hugcbVpWnTA== dependencies: tslib "^2.3.0" -"@angular/core@*", "@angular/core@^11.0.0", "@angular/core@^13.0.0", "@angular/core@^13.0.0 || ^14.0.0-0", "@angular/core@^15.0.0", "@angular/core@^15.2.6", "@angular/core@>=10.0.0", "@angular/core@>=12", "@angular/core@>=13.0.0 <14", "@angular/core@>=13.0.0-0", "@angular/core@>=2.x", "@angular/core@>=5.0.0", "@angular/core@15.2.6", "@angular/core@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/core@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== dependencies: tslib "^2.3.0" -"@angular/forms@^13.0.0", "@angular/forms@^15.2.6", "@angular/forms@>=10.0.0", "@angular/forms@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/forms@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/forms/-/forms-15.2.6.tgz" integrity sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw== @@ -312,7 +312,7 @@ resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.6.tgz" integrity sha512-q6u4XhFReJ3GtA7dC5rJaEBQPjJUjOz9PlwHSOxZxugFP99ddDNBBFd0caa446G54kQdZFG7j7w7BiAp2/srmQ== -"@angular/localize@^13.0.0", "@angular/localize@^15.0.0", "@angular/localize@15.2.6": +"@angular/localize@15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/localize/-/localize-15.2.6.tgz" integrity sha512-2WJBYRJ6aulo0fS9BUGr4fsdyk+5WcbZoiFURgs0sNrJtYCd51I9rQNwl3OGyYReNmFx8GgLc4K7+rEKhKfSbA== @@ -321,21 +321,21 @@ glob "8.1.0" yargs "^17.2.1" -"@angular/platform-browser-dynamic@^15.2.6", "@angular/platform-browser-dynamic@15.2.6": +"@angular/platform-browser-dynamic@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.6.tgz" integrity sha512-ZSyiigpxBWIM5f8t/a28Y3BCzHn1FtI2KsJysE7di5UUflOzwbxbfycVlpiZp0girbDYRyF18vvefvitNh17Gw== dependencies: tslib "^2.3.0" -"@angular/platform-browser@^15.2.6", "@angular/platform-browser@>=10.0.0", "@angular/platform-browser@15.2.6", "@angular/platform-browser@5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14": +"@angular/platform-browser@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.6.tgz" integrity sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA== dependencies: tslib "^2.3.0" -"@angular/platform-server@^15.0.0", "@angular/platform-server@^15.2.6": +"@angular/platform-server@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== @@ -344,7 +344,7 @@ tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^15.0.0", "@angular/router@^15.2.6": +"@angular/router@^15.2.6": version "15.2.6" resolved "https://registry.npmjs.org/@angular/router/-/router-15.2.6.tgz" integrity sha512-yB9uc9Xi9N0dErsugleywBA1KYG+GQ9WWSlri34oe2VsCqZazImn71n4wKPtrm2Xiy/mI23wJcr+jiCAtzp49Q== @@ -368,27 +368,6 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - "@babel/core@7.19.3": version "7.19.3" resolved "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" @@ -431,6 +410,36 @@ json5 "^2.2.2" semver "^6.3.0" +"@babel/core@^7.12.3": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@7.20.14", "@babel/generator@^7.20.7": + version "7.20.14" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/generator@^7.18.9", "@babel/generator@^7.19.3", "@babel/generator@^7.21.4": version "7.21.4" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz" @@ -441,16 +450,7 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.20.7", "@babel/generator@7.20.14": - version "7.20.14" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@7.18.6": +"@babel/helper-annotate-as-pure@7.18.6", "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== @@ -613,7 +613,7 @@ dependencies: "@babel/types" "^7.20.0" -"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@7.18.6": +"@babel/helper-split-export-declaration@7.18.6", "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== @@ -684,7 +684,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@7.20.7": +"@babel/plugin-proposal-async-generator-functions@7.20.7", "@babel/plugin-proposal-async-generator-functions@^7.20.1": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== @@ -925,7 +925,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.20.7": +"@babel/plugin-transform-async-to-generator@7.20.7", "@babel/plugin-transform-async-to-generator@^7.18.6": version "7.20.7" resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== @@ -1278,7 +1278,7 @@ resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2", "@babel/runtime@>=7", "@babel/runtime@7.17.2": +"@babel/runtime@7.17.2", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.17.2" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -1292,7 +1292,7 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7", "@babel/template@7.20.7": +"@babel/template@7.20.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -1331,12 +1331,17 @@ resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960" + integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg== dependencies: - "@jridgewell/trace-mapping" "0.3.9" + "@cspotcode/source-map-consumer" "0.8.0" "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" @@ -1488,7 +1493,7 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@0.5.7": +"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== @@ -1512,11 +1517,116 @@ esquery "^1.4.0" jsdoc-type-pratt-parser "~3.1.0" +"@esbuild/android-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.8.tgz#b3d5b65a3b2e073a6c7ee36b1f3c30c8f000315b" + integrity sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ== + +"@esbuild/android-arm@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.8.tgz#c41e496af541e175369d48164d0cf01a5f656cf6" + integrity sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w== + +"@esbuild/android-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.8.tgz#080fa67c29be77f5a3ca5ee4cc78d5bf927e3a3b" + integrity sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg== + +"@esbuild/darwin-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.8.tgz#053622bf9a82f43d5c075b7818e02618f7b4a397" + integrity sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg== + "@esbuild/darwin-x64@0.17.8": version "0.17.8" resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz" integrity sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw== +"@esbuild/freebsd-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.8.tgz#e6738d0081ba0721a5c6c674e84c6e7fcea61989" + integrity sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A== + +"@esbuild/freebsd-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.8.tgz#1855e562f2b730f4483f6e94086e9e2597feb4c3" + integrity sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q== + +"@esbuild/linux-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.8.tgz#481da38952721a3fdb77c17a36ceaacc4270b5c5" + integrity sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww== + +"@esbuild/linux-arm@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.8.tgz#18127072b270bb6321c6d11be20bfd30e0d6ad17" + integrity sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA== + +"@esbuild/linux-ia32@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.8.tgz#ee400af7b3bc69e8ca2e593ca35156ffb9abd54f" + integrity sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA== + +"@esbuild/linux-loong64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.8.tgz#8c509d8a454693d39824b83b3f66c400872fce82" + integrity sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA== + +"@esbuild/linux-mips64el@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.8.tgz#f2b0d36e63fb26bc3f95b203b6a80638292101ca" + integrity sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA== + +"@esbuild/linux-ppc64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.8.tgz#1e628be003e036e90423716028cc884fe5ba25bd" + integrity sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw== + +"@esbuild/linux-riscv64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.8.tgz#419a815cb4c3fb9f1b78ef5295f5b48b8bf6427a" + integrity sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw== + +"@esbuild/linux-s390x@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.8.tgz#291c49ae5c3d11d226352755c0835911fe1a9e5c" + integrity sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw== + +"@esbuild/linux-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.8.tgz#03199d91c76faf80bd54104f5cbf0a489bc39f6a" + integrity sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA== + +"@esbuild/netbsd-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.8.tgz#b436d767e1b21852f9ed212e2bb57f77203b0ae2" + integrity sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q== + +"@esbuild/openbsd-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.8.tgz#d1481d8539e21d4729cd04a0450a26c2c8789e89" + integrity sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg== + +"@esbuild/sunos-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.8.tgz#2cfb8126e079b2c00fd1bf095541e9f5c47877e4" + integrity sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw== + +"@esbuild/win32-arm64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.8.tgz#7c6ecfd097ca23b82119753bf7072bbaefe51e3a" + integrity sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg== + +"@esbuild/win32-ia32@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.8.tgz#cffec63c3cb0ef8563a04df4e09fa71056171d00" + integrity sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w== + +"@esbuild/win32-x64@0.17.8": + version "0.17.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz#200a0965cf654ac28b971358ecdca9cc5b44c335" + integrity sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -1616,7 +1726,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -1634,16 +1744,16 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" @@ -1652,14 +1762,6 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@kolkov/ngx-gallery@^2.0.1": version "2.0.1" resolved "https://registry.npmjs.org/@kolkov/ngx-gallery/-/ngx-gallery-2.0.1.tgz" @@ -1672,7 +1774,7 @@ resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@material-ui/core@^4.0.0", "@material-ui/core@^4.11.0", "@material-ui/core@^4.12.1", "@material-ui/core@^4.7.2": +"@material-ui/core@^4.11.0": version "4.12.4" resolved "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz" integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== @@ -1690,7 +1792,7 @@ react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" -"@material-ui/icons@^4.5.1", "@material-ui/icons@^4.9.1": +"@material-ui/icons@^4.9.1": version "4.11.3" resolved "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz" integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== @@ -1796,14 +1898,14 @@ dependencies: tslib "^2.0.0" -"@ngrx/store@^15.4.0", "@ngrx/store@15.4.0": +"@ngrx/store@^15.4.0": version "15.4.0" resolved "https://registry.npmjs.org/@ngrx/store/-/store-15.4.0.tgz" integrity sha512-OvCuNBHL8mAUnRTS6QSFm+IunspsYNu2cCwDovBNn7EGhxRuGihBeNoX47jCqWPHBFtokj4BlatDfpJ/yCh4xQ== dependencies: tslib "^2.0.0" -"@ngtools/webpack@^15.2.5", "@ngtools/webpack@15.2.5": +"@ngtools/webpack@15.2.5", "@ngtools/webpack@^15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== @@ -1864,7 +1966,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2035,15 +2137,6 @@ resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz" integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== -"@schematics/angular@^12.2.17": - version "12.2.18" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz" - integrity sha512-niRS9Ly9y8uI0YmTSbo8KpdqCCiZ/ATMZWeS2id5M8JZvfXbngwiqJvojdSol0SWU+n1W4iA+lJBdt4gSKlD5w== - dependencies: - "@angular-devkit/core" "12.2.18" - "@angular-devkit/schematics" "12.2.18" - jsonc-parser "3.0.0" - "@schematics/angular@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" @@ -2053,6 +2146,15 @@ "@angular-devkit/schematics" "15.2.5" jsonc-parser "3.2.0" +"@schematics/angular@^12.2.17": + version "12.2.18" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.18.tgz" + integrity sha512-niRS9Ly9y8uI0YmTSbo8KpdqCCiZ/ATMZWeS2id5M8JZvfXbngwiqJvojdSol0SWU+n1W4iA+lJBdt4gSKlD5w== + dependencies: + "@angular-devkit/core" "12.2.18" + "@angular-devkit/schematics" "12.2.18" + jsonc-parser "3.0.0" + "@sigstore/protobuf-specs@^0.1.0": version "0.1.0" resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz" @@ -2253,7 +2355,7 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -"@types/node@*", "@types/node@^14.14.31", "@types/node@^14.14.9", "@types/node@>=10.0.0": +"@types/node@*", "@types/node@>=10.0.0", "@types/node@^14.14.31", "@types/node@^14.14.9": version "14.18.42" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.42.tgz" integrity sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg== @@ -2295,7 +2397,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.8.6 || ^17.0.0": +"@types/react@*": version "17.0.57" resolved "https://registry.npmjs.org/@types/react/-/react-17.0.57.tgz" integrity sha512-e4msYpu5QDxzNrXDHunU/VPyv2M1XemGG/p7kfCjUiPtlLDCWLGQfgAMng6YyisWYxZ09mYdQlmMnyS0NfZdEg== @@ -2377,7 +2479,7 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@^5.43.0": +"@typescript-eslint/eslint-plugin@^5.43.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz" integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== @@ -2393,7 +2495,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.43.0": +"@typescript-eslint/parser@^5.43.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz" integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== @@ -2475,20 +2577,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@^5.57.0", "@typescript-eslint/utils@5.58.0": - version "5.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" - integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/typescript-estree" "5.58.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - "@typescript-eslint/utils@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz" @@ -2503,6 +2591,20 @@ eslint-utils "^3.0.0" semver "^7.3.7" +"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.57.0": + version "5.58.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" + integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.58.0" + "@typescript-eslint/types" "5.58.0" + "@typescript-eslint/typescript-estree" "5.58.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + "@typescript-eslint/visitor-keys@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz" @@ -2687,7 +2789,7 @@ abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@^1.0.0, abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -2731,31 +2833,21 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.0.0: +acorn-walk@^8.0.0, acorn-walk@^8.0.2, acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn-walk@^8.0.2: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + adjust-sourcemap-loader@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" @@ -2764,7 +2856,12 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@^6.0.2, agent-base@6: +adm-zip@^0.5.2: + version "0.5.10" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.10.tgz#4a51d5ab544b1f5ce51e1b9043139b639afff45b" + integrity sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ== + +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -2788,13 +2885,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-formats@^2.1.1, ajv-formats@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - ajv-formats@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.0.tgz" @@ -2802,6 +2892,13 @@ ajv-formats@2.1.0: dependencies: ajv "^8.0.0" +ajv-formats@2.1.1, ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" @@ -2814,17 +2911,17 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@8.12.0, ajv@^8.8.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^8.0.0, ajv@8.6.2: +ajv@8.6.2, ajv@^8.0.0: version "8.6.2" resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== @@ -2834,24 +2931,14 @@ ajv@^8.0.0, ajv@8.6.2: require-from-string "^2.0.2" uri-js "^4.2.2" -ajv@^8.8.0, ajv@^8.8.2: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@8.12.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" uri-js "^4.2.2" angular-idle-preload@3.0.0: @@ -2866,7 +2953,7 @@ angulartics2@^12.0.0: dependencies: tslib "^2.3.0" -ansi-colors@^4.1.1, ansi-colors@4.1.3: +ansi-colors@4.1.3, ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== @@ -2883,6 +2970,11 @@ ansi-html-community@^0.0.8: resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + ansi-regex@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz" @@ -2893,6 +2985,11 @@ ansi-regex@^5.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -2900,14 +2997,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -2972,16 +3062,16 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + array-includes@^3.1.6: version "3.1.6" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" @@ -2993,11 +3083,23 @@ array-includes@^3.1.6: get-intrinsic "^1.1.3" is-string "^1.0.7" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array.prototype.flat@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" @@ -3018,6 +3120,11 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + asn1@~0.2.3: version "0.2.6" resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" @@ -3025,7 +3132,7 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -assert-plus@^1.0.0, assert-plus@1.0.0: +assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -3062,18 +3169,6 @@ at-least-node@^1.0.0: resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@^10.4.13: - version "10.4.14" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" - integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== - dependencies: - browserslist "^4.21.5" - caniuse-lite "^1.0.30001464" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - autoprefixer@10.4.13: version "10.4.13" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" @@ -3086,6 +3181,18 @@ autoprefixer@10.4.13: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@^10.4.13: + version "10.4.14" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + available-typed-arrays@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -3101,11 +3208,18 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -"axe-core@^3 || ^4", axe-core@^4.4.3: +axe-core@^4.4.3: version "4.6.3" resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== +axios@0.21.4: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + axios@^0.27.2: version "0.27.2" resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" @@ -3114,13 +3228,6 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@0.21.4: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - axobject-query@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz" @@ -3181,7 +3288,7 @@ base64-js@^1.2.0, base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@~2.0.0, base64id@2.0.0: +base64id@2.0.0, base64id@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== @@ -3248,7 +3355,7 @@ bluebird@^3.7.2: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@^1.19.0, body-parser@1.20.1: +body-parser@1.20.1, body-parser@^1.19.0: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== @@ -3281,7 +3388,7 @@ boolbase@^1.0.0: resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -bootstrap@^4.0.0, bootstrap@^4.6.1: +bootstrap@^4.6.1: version "4.6.2" resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz" integrity sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ== @@ -3372,7 +3479,7 @@ browser-sync@^2.27.10: ua-parser-js "^1.0.33" yargs "^17.3.1" -browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4.21.0", browserslist@4.21.5: +browserslist@4.21.5, browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -3432,6 +3539,25 @@ bytesish@^0.4.1: resolved "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== +cacache@17.0.4: + version "17.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" + integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^8.0.1" + lru-cache "^7.7.1" + minipass "^4.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cacache@^15.0.5: version "15.3.0" resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" @@ -3499,25 +3625,6 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -cacache@17.0.4: - version "17.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" - integrity sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^8.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" @@ -3558,6 +3665,25 @@ cerialize@0.1.18: dependencies: typescript "^2.5.0" +chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@~4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -3567,54 +3693,6 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@~4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" @@ -3654,7 +3732,7 @@ cheerio@1.0.0-rc.10: parse5-htmlparser2-tree-adapter "^6.0.1" tslib "^2.2.0" -chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@3.5.3: +chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.5.1, chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3791,16 +3869,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" @@ -3823,12 +3901,12 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.2.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== -commander@^2.20.0: +commander@^2.2.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -3843,21 +3921,11 @@ commander@^6.1.0: resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commander@^7.0.0: +commander@^7.0.0, commander@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== - comment-parser@1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" @@ -3916,16 +3984,6 @@ connect-history-api-fallback@^2.0.0: resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -connect@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - connect@3.6.6: version "3.6.6" resolved "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz" @@ -3936,6 +3994,16 @@ connect@3.6.6: parseurl "~1.3.2" utils-merge "1.0.1" +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" @@ -3971,11 +4039,6 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - cookie@0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" @@ -3986,6 +4049,11 @@ cookie@0.5.0: resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + copy-anything@^2.0.1: version "2.0.6" resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" @@ -4000,6 +4068,18 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" +copy-webpack-plugin@11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + copy-webpack-plugin@^6.4.1: version "6.4.1" resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz" @@ -4017,18 +4097,6 @@ copy-webpack-plugin@^6.4.1: serialize-javascript "^5.0.1" webpack-sources "^1.4.3" -copy-webpack-plugin@11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - core-js-compat@^3.25.1: version "3.30.0" resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz" @@ -4036,21 +4104,21 @@ core-js-compat@^3.25.1: dependencies: browserslist "^4.21.5" -core-js@^3.7.0, core-js@^3.8.1: +core-js@^3.7.0: version "3.30.0" resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@~2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" @@ -4224,7 +4292,7 @@ cypress-axe@^1.1.0: resolved "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.4.0.tgz" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -"cypress@^10 || ^11 || ^12", cypress@12.9.0: +cypress@12.9.0: version "12.9.0" resolved "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz" integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== @@ -4302,7 +4370,7 @@ date-fns-tz@^1.3.7: resolved "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz" integrity sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ== -date-fns@^2.29.3, date-fns@>=2.0.0: +date-fns@^2.29.3: version "2.29.3" resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== @@ -4317,48 +4385,20 @@ dayjs@^1.10.4: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== -debug@^2.2.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.6: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" @@ -4366,6 +4406,13 @@ debug@4.3.2: dependencies: ms "2.1.2" +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + decimal.js@^10.2.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" @@ -4436,6 +4483,19 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ== + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -4446,7 +4506,7 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@^2.0.0, depd@~2.0.0, depd@2.0.0: +depd@2.0.0, depd@^2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -4461,16 +4521,16 @@ dependency-graph@^0.11.0: resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== - destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== + detect-node@^2.0.4: version "2.1.0" resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" @@ -4708,7 +4768,7 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.0, encoding@^0.1.13: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -4762,7 +4822,7 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -4963,9 +5023,9 @@ escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: @@ -5063,7 +5123,7 @@ eslint-rule-composer@^0.3.0: resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz" integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== -eslint-scope@^5.1.1, eslint-scope@5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5071,15 +5131,7 @@ eslint-scope@^5.1.1, eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-scope@^7.1.1: +eslint-scope@^7.0.0, eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== @@ -5104,7 +5156,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.20.0 || ^8.0.0", eslint@^8.0.0, eslint@^8.28.0, eslint@>=2, eslint@>=5: +eslint@^8.28.0: version "8.38.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz" integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== @@ -5198,7 +5250,7 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@^1.8.1, etag@~1.8.1, etag@1.8.1: +etag@1.8.1, etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== @@ -5223,21 +5275,6 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - execa@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" @@ -5253,6 +5290,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" @@ -5272,7 +5324,7 @@ express-static-gzip@^2.1.5: dependencies: serve-static "^1.14.1" -express@^4.15.2, express@^4.17.1, express@^4.17.3, express@^4.18.2: +express@^4.17.1, express@^4.17.3, express@^4.18.2: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -5334,7 +5386,7 @@ extract-zip@2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@^1.2.0, extsprintf@1.3.0: +extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== @@ -5360,7 +5412,7 @@ fast-json-patch@^3.0.0-1: resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz" integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@2.1.0: +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5565,11 +5617,20 @@ fraction.js@^4.2.0: resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== -fresh@^0.5.2, fresh@0.5.2: +fresh@0.5.2, fresh@^0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" + integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -5589,15 +5650,6 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - integrity sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" @@ -5690,14 +5742,7 @@ get-package-type@^0.1.0: resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -5731,14 +5776,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^5.1.2: +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5752,18 +5790,34 @@ glob-parent@^6.0.1, glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== +glob@8.1.0, glob@^8.0.1: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^7.0.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" @@ -5776,28 +5830,7 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@~7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1, glob@8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^9.3.0: - version "9.3.5" - resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -glob@^9.3.1: +glob@^9.3.0, glob@^9.3.1: version "9.3.5" resolved "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== @@ -5833,19 +5866,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.1: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^11.1.0: +globby@^11.0.1, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5868,6 +5889,18 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ== + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" @@ -5904,6 +5937,26 @@ handle-thing@^2.0.0: resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" @@ -6064,16 +6117,6 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -6085,6 +6128,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -6119,18 +6172,7 @@ http-proxy-middleware@^1.0.5: is-plain-obj "^3.0.0" micromatch "^4.0.2" -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy-middleware@^2.0.6: +http-proxy-middleware@^2.0.3, http-proxy-middleware@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== @@ -6150,6 +6192,15 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + http-signature@~1.3.6: version "1.3.6" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" @@ -6159,7 +6210,7 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1, https-proxy-agent@5.0.1: +https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -6189,7 +6240,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -i18next@^19.5.0, "i18next@>= 19.0.0": +i18next@^19.5.0: version "19.9.2" resolved "https://registry.npmjs.org/i18next/-/i18next-19.9.2.tgz" integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== @@ -6203,27 +6254,20 @@ icomcom-react@^1.0.1: dependencies: prop-types "^15.6.0" -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" @@ -6246,7 +6290,7 @@ ignore-walk@^6.0.0: dependencies: minimatch "^7.4.2" -ignore@^5.2.0, ignore@5.2.4: +ignore@5.2.4, ignore@^5.2.0: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -6310,7 +6354,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6330,6 +6374,11 @@ ini@3.0.1: resolved "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz" integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inquirer@8.2.4: version "8.2.4" resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" @@ -6382,16 +6431,16 @@ ip@^2.0.0: resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -6541,6 +6590,25 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" @@ -6767,7 +6835,7 @@ jake@^10.8.5: filelist "^1.0.1" minimatch "^3.0.4" -jasmine-core@^3.6.0, jasmine-core@^3.8.0, jasmine-core@>=3.8: +jasmine-core@^3.6.0, jasmine-core@^3.8.0: version "3.99.1" resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz" integrity sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg== @@ -6788,11 +6856,6 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -"jquery@1.9.1 - 3": - version "3.6.4" - resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz" - integrity sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ== - js-cookie@2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" @@ -6833,6 +6896,38 @@ jsdoc-type-pratt-parser@~3.1.0: resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz" integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== +jsdom@21.1.0: + version "21.1.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" + integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + jsdom@^16.4.0: version "16.7.0" resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" @@ -6866,38 +6961,6 @@ jsdom@^16.4.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@21.1.0: - version "21.1.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-21.1.0.tgz" - integrity sha512-m0lzlP7qOtthD918nenK3hdItSd2I+V3W9IrBcB36sqDwG+KnUs66IF5GY7laGWUnlM9vTsD0W1QwSEBYWWcJg== - dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -6955,7 +7018,7 @@ json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@^3.0.0, jsonc-parser@3.0.0: +jsonc-parser@3.0.0, jsonc-parser@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== @@ -6998,6 +7061,16 @@ jsonschema@1.4.0: resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + jsprim@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" @@ -7075,7 +7148,7 @@ jss-rtl@^0.3.0: dependencies: rtl-css-js "^1.13.1" -jss@^10.0.0, jss@^10.3.0, jss@^10.5.1, jss@10.10.0: +jss@10.10.0, jss@^10.3.0, jss@^10.5.1: version "10.10.0" resolved "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz" integrity sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw== @@ -7124,7 +7197,7 @@ karma-jasmine-html-reporter@^1.5.0: resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz" integrity sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ== -karma-jasmine@>=1.1, karma-jasmine@~4.0.0: +karma-jasmine@~4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz" integrity sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g== @@ -7147,7 +7220,7 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" -karma@*, karma@^6.3.0, karma@^6.3.14, karma@>=0.13, karma@>=0.9: +karma@^6.3.14: version "6.4.1" resolved "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz" integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== @@ -7217,7 +7290,7 @@ less-loader@11.1.0: dependencies: klona "^2.0.4" -"less@^3.5.0 || ^4.0.0", less@4.1.3: +less@4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/less/-/less-4.1.3.tgz" integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== @@ -7293,6 +7366,11 @@ loader-runner@^4.2.0: resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== +loader-utils@3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" @@ -7302,11 +7380,6 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" -loader-utils@3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - localtunnel@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz" @@ -7423,13 +7496,6 @@ lru-cache@^9.0.0: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.0.1.tgz" integrity sha512-C8QsKIN1UIXeOs3iWmiZ1lQY+EnKDojWd37fXy1aSbJvH4iSma1uy2OWuoB3m4SYRli5+CUjDv3Dij5DVoetmg== -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - magic-string@0.25.7: version "0.25.7" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" @@ -7444,6 +7510,13 @@ magic-string@0.29.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" @@ -7486,28 +7559,7 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -make-fetch-happen@^11.0.0: - version "11.0.3" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" - integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^4.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -make-fetch-happen@^11.0.1: +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1: version "11.0.3" resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.3.tgz" integrity sha512-oPLh5m10lRNNZDjJ2kP8UpboUx2uFXVaVweVe/lWut4iHWcQEmfqSVJt2ihZsFI8HbpwyyocaXbCAWf0g1ukIA== @@ -7593,7 +7645,7 @@ memfs@^3.4.12, memfs@^3.4.3: dependencies: fs-monkey "^1.0.3" -memoize-one@^5.1.1, "memoize-one@>=3.1.1 <6": +"memoize-one@>=3.1.1 <6", memoize-one@^5.1.1: version "5.2.1" resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== @@ -7636,7 +7688,7 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -7648,26 +7700,21 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, dependencies: mime-db "1.52.0" -mime@^1.4.1, mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.6: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - -mime@^2.5.2: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mime@1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.6, mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" @@ -7685,7 +7732,7 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7706,23 +7753,16 @@ minimatch@^7.4.2: dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.2: +minimatch@^8.0.2, minimatch@^8.0.3: version "8.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== dependencies: brace-expansion "^2.0.1" -minimatch@^8.0.3: - version "8.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: @@ -7818,7 +7858,7 @@ mirador-share-plugin@^0.11.0: resolved "https://registry.npmjs.org/mirador-share-plugin/-/mirador-share-plugin-0.11.0.tgz" integrity sha512-fHcdDXyrtfy5pn1zdQNX9BvE5Tjup66eQwyNippE5PMaP8ImUcrFaSL+mStdn+v6agsHcsdRqLhseZ0XWgEuAw== -mirador@^3.0.0-beta.0, mirador@^3.0.0-rc.7, mirador@^3.3.0: +mirador@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/mirador/-/mirador-3.3.0.tgz" integrity sha512-BmGfRnWJ45B+vtiAwcFT7n9nKialfejE9UvuUK0NorO37ShArpsKr3yVSD4jQASwSR4DRRpPEG21jOk4WN7H3w== @@ -7905,16 +7945,16 @@ mrmime@^1.0.0: resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== -ms@^2.0.0, ms@^2.1.1, ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@2.1.3: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" @@ -7957,7 +7997,7 @@ needle@^3.1.0: iconv-lite "^0.6.3" sax "^1.2.4" -negotiator@^0.6.3, negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -7967,10 +8007,10 @@ neo-async@^2.6.2: resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -ng-mocks@^13.1.1: - version "13.5.2" - resolved "https://registry.npmjs.org/ng-mocks/-/ng-mocks-13.5.2.tgz" - integrity sha512-mn9qkef166cKmg5k1/jY4AlXEGEPx/cdWXKDdSrs/Fett+nLEAx70uD1LJrpQ35PY6k0v6AUd4fbZX5OaoFNRg== +ng-mocks@^14.10.0: + version "14.10.0" + resolved "https://registry.yarnpkg.com/ng-mocks/-/ng-mocks-14.10.0.tgz#36064650c52f6e01be5c810228a0c9585109bb27" + integrity sha512-gUnrSH4ejlkSpd9wgEe7PNKEyADJCriemSIbyebS0SQjyotSZfp/8jBuMl7Euvk0sPanV2IGhOv6W9e6hNRe/A== ng2-file-upload@1.4.0: version "1.4.0" @@ -7992,7 +8032,7 @@ ngx-infinite-scroll@^10.0.1: "@scarf/scarf" "^1.1.0" opencollective-postinstall "^2.0.2" -ngx-mask@^13.0.0, ngx-mask@^13.1.7: +ngx-mask@^13.1.7: version "13.1.15" resolved "https://registry.npmjs.org/ngx-mask/-/ngx-mask-13.1.15.tgz" integrity sha512-fplyzkFa6lFTzPo/AHaI3TBQxTMdcqQClR9BLLAWTvCyDZkV28fLqWkpIpy0VvPc9ADogFpJJj7R1356mszjag== @@ -8124,7 +8164,7 @@ normalize-url@^4.5.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -nouislider@^14.6.3, nouislider@>=9.x: +nouislider@^14.6.3: version "14.7.0" resolved "https://registry.npmjs.org/nouislider/-/nouislider-14.7.0.tgz" integrity sha512-4RtQ1+LHJKesDCNJrXkQcwXAWCrC2aggdLYMstS/G5fEWL+fXZbUA9pwVNHFghMGuFGRATlDLNInRaPeRKzpFQ== @@ -8148,7 +8188,7 @@ npm-normalize-package-bin@^3.0.0: resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz" integrity sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q== -npm-package-arg@^10.0.0, npm-package-arg@10.1.0: +npm-package-arg@10.1.0, npm-package-arg@^10.0.0: version "10.1.0" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== @@ -8165,7 +8205,7 @@ npm-packlist@^7.0.0: dependencies: ignore-walk "^6.0.0" -npm-pick-manifest@^8.0.0, npm-pick-manifest@8.0.1: +npm-pick-manifest@8.0.1, npm-pick-manifest@^8.0.0: version "8.0.1" resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== @@ -8217,9 +8257,14 @@ nwsapi@^2.2.0, nwsapi@^2.2.2: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.3.tgz" integrity sha512-jscxIO4/VKScHlbmFBdV1Z6LXnLO+ZR4VMtypudUdfwtKxUN3TQcNFIHLwKtrUbDyHN4/GycY9+oRGZ2XMXYPw== -object-assign@^4, object-assign@^4.1.1: +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.3, object-inspect@^1.9.0: @@ -8269,13 +8314,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" @@ -8283,6 +8321,13 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" @@ -8302,19 +8347,19 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9: - version "8.4.0" - resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== +open@8.4.1: + version "8.4.1" + resolved "https://registry.npmjs.org/open/-/open-8.4.1.tgz" + integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" is-wsl "^2.2.0" -open@8.4.1: - version "8.4.1" - resolved "https://registry.npmjs.org/open/-/open-8.4.1.tgz" - integrity sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg== +open@^8.0.9: + version "8.4.0" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" @@ -8371,7 +8416,7 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -ora@^5.1.0, ora@^5.4.1, ora@5.4.1: +ora@5.4.1, ora@^5.1.0, ora@^5.4.1: version "5.4.1" resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== @@ -8523,35 +8568,23 @@ parse5-sax-parser@^7.0.0: dependencies: parse5 "^7.0.0" +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parse5@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^7.0.0: +parse5@^7.0.0, parse5@^7.1.1: version "7.1.2" resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" -parse5@^7.1.1: - version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -8567,6 +8600,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" @@ -8630,14 +8668,9 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.2.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: @@ -8645,7 +8678,19 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -piscina@~3.2.0, piscina@3.2.0: +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +piscina@3.2.0, piscina@~3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz" integrity sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA== @@ -8663,11 +8708,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -popper.js@^1.16.1: - version "1.16.1" - resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - popper.js@1.16.1-lts: version "1.16.1-lts" resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz" @@ -8820,6 +8860,15 @@ postcss-lab-function@^4.2.1: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" +postcss-loader@7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" + integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.8" + postcss-loader@^4.0.3: version "4.3.0" resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz" @@ -8831,15 +8880,6 @@ postcss-loader@^4.0.3: schema-utils "^3.0.0" semver "^7.3.4" -postcss-loader@7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" - integrity sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.8" - postcss-logical@^5.0.4: version "5.0.4" resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" @@ -9004,6 +9044,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@8.4.21, postcss@^8.1, postcss@^8.2.14, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4.19: + version "8.4.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^6.0.6: version "6.0.23" resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz" @@ -9013,15 +9062,6 @@ postcss@^6.0.6: source-map "^0.6.1" supports-color "^5.4.0" -"postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.0, postcss@^8.0.3, postcss@^8.1, postcss@^8.1.0, postcss@^8.2, postcss@^8.2.14, postcss@^8.3, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4, postcss@^8.4.19, postcss@^8.4.6, postcss@8.4.21: - version "8.4.21" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - postcss@^7.0.14: version "7.0.39" resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" @@ -9076,7 +9116,7 @@ prompts@~2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9126,12 +9166,17 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + qjobs@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@^6.11.0, qs@6.11.0: +qs@6.11.0, qs@^6.11.0: version "6.11.0" resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -9145,6 +9190,11 @@ qs@~6.10.3: dependencies: side-channel "^1.0.4" +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" @@ -9172,7 +9222,7 @@ range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@^2.3.2, raw-body@2.5.1: +raw-body@2.5.1, raw-body@^2.3.2: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== @@ -9263,7 +9313,7 @@ react-dnd@^10.0.2: dnd-core "^10.0.2" hoist-non-react-statics "^3.3.0" -"react-dom@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react-dom@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react-dom@^16.13.1 || ^17.0.0 || ^18.0.0", react-dom@^16.14.0, react-dom@^16.3.2, "react-dom@^16.8.0 || ^17.0.0", react-dom@^16.8.3, "react-dom@^16.8.5 || ^17.0.0 || ^18.0.0", "react-dom@>= 16.3.0", "react-dom@>= 16.8", react-dom@>=16.3.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@16.x: +react-dom@^16.14.0: version "16.14.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz" integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== @@ -9302,12 +9352,7 @@ react-image@^4.0.1: resolved "https://registry.npmjs.org/react-image/-/react-image-4.1.0.tgz" integrity sha512-qwPNlelQe9Zy14K2pGWSwoL+vHsAwmJKS6gkotekDgRpcnRuzXNap00GfibD3eEPYu3WCPlyIUUNzcyHOrLHjw== -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -9391,7 +9436,7 @@ react-window@^1.8.5: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -"react@^0.14.0 || ^15.0.0-0 || ^16.0.0", "react@^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc", "react@^15.3.0 || 16 || 17 || 18", "react@^15.6 || ^16", react@^16.0.0, react@^16.13, react@^16.13.1, "react@^16.13.1 || ^17.0.0 || ^18.0.0", react@^16.14.0, react@^16.3.0, react@^16.3.2, react@^16.3.x, "react@^16.8.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^16.8.3, "react@^16.8.3 || ^17 || ^18", "react@^16.8.5 || ^17.0.0 || ^18.0.0", "react@>= 16.3.0", "react@>= 16.8", "react@>= 16.8.0", react@>=0.14, react@>=16.3.0, react@>=16.6.0, react@>=16.8, react@16.x: +react@^16.14.0: version "16.14.0" resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz" integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== @@ -9478,7 +9523,7 @@ redux-thunk@^2.3.0: resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz" integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== -"redux@^3.1.0 || ^4.0.0", redux@^4, redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: +redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: version "4.2.1" resolved "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz" integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== @@ -9554,6 +9599,32 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" +request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -9569,7 +9640,7 @@ requires-port@^1.0.0: resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.0.0, reselect@>1.0.0: +reselect@^4.0.0: version "4.1.7" resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz" integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== @@ -9602,15 +9673,6 @@ resolve-url-loader@5.0.0: postcss "^8.2.14" source-map "0.6.1" -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: - version "1.22.2" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@1.22.1: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" @@ -9620,6 +9682,15 @@ resolve@1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resp-modifier@6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz" @@ -9656,9 +9727,9 @@ rfdc@^1.3.0: resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" @@ -9719,38 +9790,26 @@ rxjs-spy@^8.0.2: rxjs-report-usage "^1.0.4" stacktrace-gps "^3.0.2" -"rxjs@^6.5.3 || ^7.4.0", "rxjs@^6.5.3 || ^7.5.0", rxjs@^7.0.0, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@>=6.5.3: +rxjs@6.6.7, rxjs@^6.5.5, rxjs@~6.6.0: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^7.5.1, rxjs@^7.5.5: version "7.8.0" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" -rxjs@^6.5.5: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@~6.6.0, rxjs@6.6.7: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2: +safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -9764,7 +9823,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -9781,14 +9840,6 @@ sanitize-html@^2.7.2: parse-srcset "^1.0.2" postcss "^8.3.11" -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - sass-loader@13.2.0: version "13.2.0" resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz" @@ -9797,6 +9848,14 @@ sass-loader@13.2.0: klona "^2.0.4" neo-async "^2.6.2" +sass-loader@^12.6.0: + version "12.6.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + sass-resources-loader@^2.1.1: version "2.2.5" resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" @@ -9807,13 +9866,6 @@ sass-resources-loader@^2.1.1: glob "^7.1.6" loader-utils "^2.0.0" -sass@^1.3.0, sass@~1.33.0: - version "1.33.0" - resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" - integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== - dependencies: - chokidar ">=3.0.0 <4.0.0" - sass@1.58.1: version "1.58.1" resolved "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz" @@ -9823,9 +9875,16 @@ sass@1.58.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sax@^1.2.4: +sass@~1.33.0: + version "1.33.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" + integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: @@ -9850,25 +9909,7 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== @@ -9899,14 +9940,16 @@ selfsigned@^2.1.1: dependencies: node-forge "^1" -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.3.8, semver@^7.3.5, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" -semver@^5.7.1: +semver@^5.3.0, semver@^5.6.0, semver@^5.7.1: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: @@ -9914,42 +9957,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.1.1: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.4: - version "7.4.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" - integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5, semver@^7.3.8, semver@7.3.8: - version "7.3.8" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7: version "7.4.0" resolved "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz" integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== @@ -10013,7 +10021,7 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" -serve-index@^1.9.1, serve-index@1.9.1: +serve-index@1.9.1, serve-index@^1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== @@ -10026,16 +10034,6 @@ serve-index@^1.9.1, serve-index@1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@^1.14.1, serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - serve-static@1.13.2: version "1.13.2" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz" @@ -10046,6 +10044,16 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" +serve-static@1.15.0, serve-static@^1.14.1: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + server-destroy@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz" @@ -10240,7 +10248,7 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sortablejs@>=1.7.0, sortablejs@1.13.0: +sortablejs@1.13.0: version "1.13.0" resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz" integrity sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg== @@ -10250,7 +10258,7 @@ source-list-map@^2.0.0: resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -10264,7 +10272,7 @@ source-map-loader@4.0.1: iconv-lite "^0.6.3" source-map-js "^1.0.2" -source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: +source-map-support@0.5.21, source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -10272,16 +10280,16 @@ source-map-support@^0.5.17, source-map-support@^0.5.5, source-map-support@~0.5.2 buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@0.5.6: version "0.5.6" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@0.7.3: version "0.7.3" resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" @@ -10360,9 +10368,9 @@ sprintf-js@~1.0.2: resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.14.1: +sshpk@^1.14.1, sshpk@^1.7.0: version "1.17.0" - resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" @@ -10409,6 +10417,11 @@ stacktrace-gps@^3.0.2: source-map "0.5.6" stackframe "^1.3.4" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + "statuses@>= 1.4.0 < 2", statuses@~1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz" @@ -10424,11 +10437,6 @@ statuses@~1.5.0: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - stop-iteration-iterator@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz" @@ -10453,20 +10461,6 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -10503,6 +10497,27 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" @@ -10527,11 +10542,16 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -10546,14 +10566,7 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -10603,20 +10616,20 @@ terser-webpack-plugin@^5.1.3: serialize-javascript "^6.0.1" terser "^5.16.5" -terser@^5.16.5: - version "5.16.9" - resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" - integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== +terser@5.16.3: + version "5.16.3" + resolved "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz" + integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" commander "^2.20.0" source-map-support "~0.5.20" -terser@5.16.3: - version "5.16.3" - resolved "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz" - integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== +terser@^5.16.5: + version "5.16.9" + resolved "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz" + integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -10632,7 +10645,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0, text-table@0.2.0: +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== @@ -10667,6 +10680,13 @@ tiny-warning@^1.0.2: resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tmp@0.2.1, tmp@^0.2.1, tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" @@ -10674,27 +10694,6 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmp@0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -10766,17 +10765,17 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -tree-kill@^1.2.2, tree-kill@1.2.2: +tree-kill@1.2.2, tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -ts-node@^10.0.0: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== +ts-node@10.2.1, ts-node@^10.0.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" + integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw== dependencies: - "@cspotcode/source-map-support" "^0.8.0" + "@cspotcode/source-map-support" "0.6.1" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -10787,7 +10786,6 @@ ts-node@^10.0.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-node@^8.10.2: @@ -10820,26 +10818,21 @@ tsconfig-paths@^4.1.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1, tslib@2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - tslib@2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@2.5.0, tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0, tslib@^2.3.1: + version "2.5.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -10932,16 +10925,16 @@ typescript-tuple@^2.2.1: dependencies: typescript-compare "^0.0.2" -typescript@*, "typescript@^3.7.5 || ^4.0.0 || ^5.0.0", typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.2.x || >= 4.x", typescript@>=3.7.5, "typescript@>=4.8.2 <5.0", typescript@~4.8.4: - version "4.8.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== - typescript@^2.5.0: version "2.9.2" resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== +typescript@~4.8.4: + version "4.8.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz" + integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== + ua-parser-js@^0.7.30: version "0.7.35" resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz" @@ -11057,7 +11050,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -11105,12 +11098,7 @@ utils-merge@1.0.1: resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.2.1: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^3.3.2: +uuid@^3.2.1, uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -11120,11 +11108,6 @@ uuid@^8.1.0, uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - valid-data-url@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz" @@ -11159,16 +11142,16 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" - integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== - void-elements@3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" @@ -11224,6 +11207,23 @@ web-resource-inliner@^6.0.1: node-fetch "^2.6.0" valid-data-url "^3.0.0" +webdriver-manager@^12.1.8: + version "12.1.9" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.9.tgz#8d83543b92711b7217b39fef4cda958a4703d2df" + integrity sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ== + dependencies: + adm-zip "^0.5.2" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + webfontloader@1.6.28: version "1.6.28" resolved "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz" @@ -11265,7 +11265,7 @@ webpack-bundle-analyzer@^4.4.0: sirv "^1.0.7" ws "^7.3.1" -webpack-cli@^4.2.0, webpack-cli@4.x.x: +webpack-cli@^4.2.0: version "4.10.0" resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== @@ -11283,17 +11283,6 @@ webpack-cli@^4.2.0, webpack-cli@4.x.x: rechoir "^0.7.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - webpack-dev-middleware@6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz" @@ -11305,41 +11294,16 @@ webpack-dev-middleware@6.0.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.0.0, webpack-dev-server@^4.5.0: - version "4.13.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" - integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" webpack-dev-server@4.11.1: version "4.11.1" @@ -11376,7 +11340,43 @@ webpack-dev-server@4.11.1: webpack-dev-middleware "^5.3.1" ws "^8.4.2" -webpack-merge@^5.7.3, webpack-merge@5.8.0: +webpack-dev-server@^4.5.0: + version "4.13.2" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" + integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@5.8.0, webpack-merge@^5.7.3: version "5.8.0" resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== @@ -11404,36 +11404,6 @@ webpack-subresource-integrity@5.1.0: dependencies: typed-assert "^1.0.8" -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.12.0, webpack@^5.30.0, webpack@^5.54.0, webpack@^5.72.1, webpack@^5.76.0, webpack@>=5, "webpack@4.x.x || 5.x.x": - version "5.78.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" - integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - webpack@5.76.1: version "5.76.1" resolved "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" @@ -11464,7 +11434,37 @@ webpack@5.76.1: watchpack "^2.4.0" webpack-sources "^3.2.3" -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: +webpack@^5.76.0: + version "5.78.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" + integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -11626,12 +11626,7 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^7.4.6: +ws@^7.3.1, ws@^7.4.6: version "7.5.9" resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== @@ -11661,6 +11656,19 @@ xml-name-validator@^4.0.0: resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" @@ -11706,32 +11714,6 @@ yargs-parser@^21.1.1: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.2.1, yargs@^17.3.1: - version "17.7.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yargs@17.1.1: version "17.1.1" resolved "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz" @@ -11758,6 +11740,32 @@ yargs@17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.2.1, yargs@^17.3.1: + version "17.7.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" @@ -11776,7 +11784,7 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -"zone.js@~0.11.4 || ~0.12.0 || ~0.13.0", zone.js@~0.11.5: +zone.js@~0.11.5: version "0.11.8" resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" integrity sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA== From ee4da3f541c62d5f018401a1f8d50f9908a287da Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 24 Apr 2023 10:34:49 +0200 Subject: [PATCH 523/833] 101108: Automatic ng update @ngx-translate/core --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index d3085d1d07..46dc18e7bd 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "@ngrx/router-store": "^15.4.0", "@ngrx/store": "^15.4.0", "@nguniversal/express-engine": "^15.2.0", - "@ngx-translate/core": "^13.0.0", + "@ngx-translate/core": "^14.0.0", "@nicky-lenaers/ngx-scroll-to": "^13.0.0", "@types/grecaptcha": "^3.0.4", "angular-idle-preload": "3.0.0", diff --git a/yarn.lock b/yarn.lock index edf28de782..89ba40ce95 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1944,12 +1944,12 @@ "@nguniversal/common" "15.2.0" tslib "^2.3.0" -"@ngx-translate/core@^13.0.0": - version "13.0.0" - resolved "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz" - integrity sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg== +"@ngx-translate/core@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-14.0.0.tgz#af421d0e1a28376843f0fed375cd2fae7630a5ff" + integrity sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w== dependencies: - tslib "^2.0.0" + tslib "^2.3.0" "@nicky-lenaers/ngx-scroll-to@^13.0.0": version "13.0.0" From d6da06506864e9a5c8c428e058a971436f24f418 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Mon, 24 Apr 2023 11:54:35 +0200 Subject: [PATCH 524/833] 101108: Automatic ng update ngx-pagination --- package.json | 2 +- yarn.lock | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 46dc18e7bd..0e130e1faf 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "ng2-file-upload": "1.4.0", "ng2-nouislider": "^1.8.3", "ngx-infinite-scroll": "^10.0.1", - "ngx-pagination": "5.0.0", + "ngx-pagination": "6.0.3", "ngx-sortablejs": "^11.1.0", "ngx-ui-switch": "^14.0.3", "nouislider": "^14.6.3", diff --git a/yarn.lock b/yarn.lock index 89ba40ce95..c5c6e705fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8039,10 +8039,12 @@ ngx-mask@^13.1.7: dependencies: tslib "^2.3.0" -ngx-pagination@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ngx-pagination/-/ngx-pagination-5.0.0.tgz" - integrity sha512-Ur0pTWRe2ZXoJ8impEzo0IZKxY5aEcQfSmL5uBqW1rHI2J6nfzgZAHsSLagKHFGchXq0PkRlDVVMcIaNxYJwvQ== +ngx-pagination@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ngx-pagination/-/ngx-pagination-6.0.3.tgz#083f77a5c9c3ebf5800fb57a280da71aacc10a18" + integrity sha512-lONjTQ7hFPh1SyhwDrRd5ZwM4NMGQ7bNR6vLrs6mrU0Z8Q1zCcWbf/pvyp4DOlGyd9uyZxRy2wUsSZLeIPjbAw== + dependencies: + tslib "^2.3.0" ngx-sortablejs@^11.1.0: version "11.1.0" From 0ceeeaf33fdbc5437d77ca8efedeb66a8d9d0e71 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 25 Apr 2023 10:35:40 +0200 Subject: [PATCH 525/833] 101108: Automatic ng update @angular/cdk@14 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0e130e1faf..48c4904a1c 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ }, "dependencies": { "@angular/animations": "^15.2.6", - "@angular/cdk": "^13.2.6", + "@angular/cdk": "^14.2.7", "@angular/common": "^15.2.6", "@angular/compiler": "^15.2.6", "@angular/core": "^15.2.6", diff --git a/yarn.lock b/yarn.lock index c5c6e705fd..8d290dc82f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -230,10 +230,10 @@ dependencies: tslib "^2.3.0" -"@angular/cdk@^13.2.6": - version "13.3.9" - resolved "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.9.tgz" - integrity sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA== +"@angular/cdk@^14.2.7": + version "14.2.7" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-14.2.7.tgz#65eb6fbbeed6120fad4e3913aa66f8b74c853ac3" + integrity sha512-/tEsYaUbDSnfEmKVvAMramIptmhI67O+9STjOV0i+74XR2NospeK0fkbywIANu1n3w6AHGMotvRWJrjmbCElFg== dependencies: tslib "^2.3.0" optionalDependencies: From 41a265f75599f1243b8a249056781283553c60b6 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 25 Apr 2023 10:38:18 +0200 Subject: [PATCH 526/833] 101108: Automatic ng update @angular/cdk@15 --- package.json | 2 +- yarn.lock | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 48c4904a1c..7142c66bac 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ }, "dependencies": { "@angular/animations": "^15.2.6", - "@angular/cdk": "^14.2.7", + "@angular/cdk": "^15.2.8", "@angular/common": "^15.2.6", "@angular/compiler": "^15.2.6", "@angular/core": "^15.2.6", diff --git a/yarn.lock b/yarn.lock index 8d290dc82f..9516e9196a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -230,14 +230,14 @@ dependencies: tslib "^2.3.0" -"@angular/cdk@^14.2.7": - version "14.2.7" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-14.2.7.tgz#65eb6fbbeed6120fad4e3913aa66f8b74c853ac3" - integrity sha512-/tEsYaUbDSnfEmKVvAMramIptmhI67O+9STjOV0i+74XR2NospeK0fkbywIANu1n3w6AHGMotvRWJrjmbCElFg== +"@angular/cdk@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-15.2.8.tgz#f7da13abd6fb6a1355c02f5c02dc32bc679c4b1d" + integrity sha512-jiCoxfBFMH29IZIiPmVUzIWetfUNpMIvC20xYVF8RMM819vPogoObzwK4DN/sXcp/6oVbBzZFaYdijhhIt9soQ== dependencies: tslib "^2.3.0" optionalDependencies: - parse5 "^5.0.0" + parse5 "^7.1.2" "@angular/cli@^15.2.5": version "15.2.5" @@ -8575,14 +8575,9 @@ parse5@6.0.1, parse5@^6.0.1: resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^7.0.0, parse5@^7.1.1: +parse5@^7.0.0, parse5@^7.1.1, parse5@^7.1.2: version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" From e037d8708411d2cf95e7976ee7c619f443274518 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 25 Apr 2023 11:24:11 +0200 Subject: [PATCH 527/833] 101108: Automatic ng update ngx-infinite-scroll --- package.json | 2 +- yarn.lock | 21 +++++---------------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 7142c66bac..6105902db6 100644 --- a/package.json +++ b/package.json @@ -117,7 +117,7 @@ "ng-mocks": "^14.10.0", "ng2-file-upload": "1.4.0", "ng2-nouislider": "^1.8.3", - "ngx-infinite-scroll": "^10.0.1", + "ngx-infinite-scroll": "^15.0.0", "ngx-pagination": "6.0.3", "ngx-sortablejs": "^11.1.0", "ngx-ui-switch": "^14.0.3", diff --git a/yarn.lock b/yarn.lock index 9516e9196a..dac4be1cdf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2132,11 +2132,6 @@ resolved "https://registry.npmjs.org/@researchgate/react-intersection-observer/-/react-intersection-observer-1.3.5.tgz" integrity sha512-aYlsex5Dd6BAHMJvJrUoFp8gzgMSL27xFvrxkVYW0bV1RMAapVsO+QeYLtTaSF/QCflktODodvv+wJm49oMnnQ== -"@scarf/scarf@^1.1.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz" - integrity sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ== - "@schematics/angular@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" @@ -8024,13 +8019,12 @@ ng2-nouislider@^1.8.3: resolved "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-1.8.3.tgz" integrity sha512-Vl8tHCcJ/ioJLAs2t6FBC35sZq1P/O5ZdqdFwYxOCOMVbILGWNg+2gWZIjFstvv9pqb/mVvVUYe6qGG/mA/RBQ== -ngx-infinite-scroll@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-10.0.1.tgz" - integrity sha512-7is0eJZ9kJPsaHohRmMhJ/QFHAW9jp9twO5HcHRvFM/Yl/R8QCiokgjwmH0/CR3MuxUanxfHZMfO3PbYTwlBEg== +ngx-infinite-scroll@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/ngx-infinite-scroll/-/ngx-infinite-scroll-15.0.0.tgz#61bbf89f121a796880a4ad67fe785b406532b220" + integrity sha512-FSP5UphRdl47vW8f/dRnPAU+napzruAKizBX2HS7MH292Ca+va6IU0J5+UQQmO5rXod2RZV7UhJ6+7g4xLfs1A== dependencies: - "@scarf/scarf" "^1.1.0" - opencollective-postinstall "^2.0.2" + tslib "^2.3.0" ngx-mask@^13.1.7: version "13.1.15" @@ -8367,11 +8361,6 @@ open@^8.0.9: is-docker "^2.1.1" is-wsl "^2.2.0" -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - opener@^1.5.2: version "1.5.2" resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" From 36f6110e5851fdb5513530b0900a94743cd775d6 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 25 Apr 2023 11:35:41 +0200 Subject: [PATCH 528/833] 101108: Automatic ng update @nicky-lenaers/ngx-scroll-to --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6105902db6..3be96cb993 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@ngrx/store": "^15.4.0", "@nguniversal/express-engine": "^15.2.0", "@ngx-translate/core": "^14.0.0", - "@nicky-lenaers/ngx-scroll-to": "^13.0.0", + "@nicky-lenaers/ngx-scroll-to": "^14.0.0", "@types/grecaptcha": "^3.0.4", "angular-idle-preload": "3.0.0", "angulartics2": "^12.0.0", diff --git a/yarn.lock b/yarn.lock index dac4be1cdf..a657aad0ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1951,10 +1951,10 @@ dependencies: tslib "^2.3.0" -"@nicky-lenaers/ngx-scroll-to@^13.0.0": - version "13.0.0" - resolved "https://registry.npmjs.org/@nicky-lenaers/ngx-scroll-to/-/ngx-scroll-to-13.0.0.tgz" - integrity sha512-sF/F4yoHvOtEGkt58VJYbQVITbW0ivmQA+CJGzc9mnJS6XHFnc4be9rlCX3mz7mOn3FfEs+K80MnUivZ/EHfkQ== +"@nicky-lenaers/ngx-scroll-to@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@nicky-lenaers/ngx-scroll-to/-/ngx-scroll-to-14.0.0.tgz#178cb2c1781dd565841d940e1a678d6eda0796fc" + integrity sha512-nORagPmAQYDjB5jyQ3awGhbnKTKVARZUCK8FJIe46XjPQX2CI9+WBYvsdqq0CsNWVzCjhnC0Om6krzjOTrTHYQ== dependencies: tslib "^2.3.0" From 051b17e0e4be320f801db801bc8b2745c29b34a4 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 25 Apr 2023 14:38:49 +0200 Subject: [PATCH 529/833] 101108: Automatic npx npm-check-updates --interactive --- package.json | 122 ++++---- yarn.lock | 833 +++++++++++++++++++++++++++++++++++---------------- 2 files changed, 636 insertions(+), 319 deletions(-) diff --git a/package.json b/package.json index 3be96cb993..4035fea1ad 100644 --- a/package.json +++ b/package.json @@ -55,61 +55,61 @@ "ts-node": "10.2.1" }, "dependencies": { - "@angular/animations": "^15.2.6", + "@angular/animations": "^15.2.8", "@angular/cdk": "^15.2.8", - "@angular/common": "^15.2.6", - "@angular/compiler": "^15.2.6", - "@angular/core": "^15.2.6", - "@angular/forms": "^15.2.6", - "@angular/localize": "15.2.6", - "@angular/platform-browser": "^15.2.6", - "@angular/platform-browser-dynamic": "^15.2.6", - "@angular/platform-server": "^15.2.6", - "@angular/router": "^15.2.6", - "@babel/runtime": "7.17.2", + "@angular/common": "^15.2.8", + "@angular/compiler": "^15.2.8", + "@angular/core": "^15.2.8", + "@angular/forms": "^15.2.8", + "@angular/localize": "15.2.8", + "@angular/platform-browser": "^15.2.8", + "@angular/platform-browser-dynamic": "^15.2.8", + "@angular/platform-server": "^15.2.8", + "@angular/router": "^15.2.8", + "@babel/runtime": "7.21.0", "@kolkov/ngx-gallery": "^2.0.1", "@material-ui/core": "^4.11.0", - "@material-ui/icons": "^4.9.1", + "@material-ui/icons": "^4.11.3", "@ng-bootstrap/ng-bootstrap": "^11.0.0", "@ng-dynamic-forms/core": "^15.0.0", "@ng-dynamic-forms/ui-ng-bootstrap": "^15.0.0", "@ngrx/effects": "^15.4.0", "@ngrx/router-store": "^15.4.0", "@ngrx/store": "^15.4.0", - "@nguniversal/express-engine": "^15.2.0", + "@nguniversal/express-engine": "^15.2.1", "@ngx-translate/core": "^14.0.0", "@nicky-lenaers/ngx-scroll-to": "^14.0.0", "@types/grecaptcha": "^3.0.4", "angular-idle-preload": "3.0.0", - "angulartics2": "^12.0.0", + "angulartics2": "^12.2.0", "axios": "^0.27.2", "bootstrap": "^4.6.1", "cerialize": "0.1.18", - "cli-progress": "^3.8.0", + "cli-progress": "^3.12.0", "colors": "^1.4.0", "compression": "^1.7.4", - "cookie-parser": "1.4.5", - "core-js": "^3.7.0", + "cookie-parser": "1.4.6", + "core-js": "^3.30.1", "date-fns": "^2.29.3", "date-fns-tz": "^1.3.7", - "deepmerge": "^4.2.2", - "ejs": "^3.1.8", - "express": "^4.17.1", + "deepmerge": "^4.3.1", + "ejs": "^3.1.9", + "express": "^4.18.2", "express-rate-limit": "^5.1.3", - "fast-json-patch": "^3.0.0-1", + "fast-json-patch": "^3.1.1", "filesize": "^6.1.0", "http-proxy-middleware": "^1.0.5", - "isbot": "^3.6.5", + "isbot": "^3.6.10", "js-cookie": "2.2.1", "js-yaml": "^4.1.0", - "json5": "^2.2.2", - "jsonschema": "1.4.0", + "json5": "^2.2.3", + "jsonschema": "1.4.1", "jwt-decode": "^3.1.2", "klaro": "^0.7.18", "lodash": "^4.17.21", "lru-cache": "^7.14.1", "markdown-it": "^13.0.1", - "markdown-it-mathjax3": "^4.3.1", + "markdown-it-mathjax3": "^4.3.2", "mirador": "^3.3.0", "mirador-dl-plugin": "^0.13.0", "mirador-share-plugin": "^0.11.0", @@ -122,68 +122,68 @@ "ngx-sortablejs": "^11.1.0", "ngx-ui-switch": "^14.0.3", "nouislider": "^14.6.3", - "pem": "1.14.4", - "prop-types": "^15.7.2", - "react-copy-to-clipboard": "^5.0.1", + "pem": "1.14.7", + "prop-types": "^15.8.1", + "react-copy-to-clipboard": "^5.1.0", "reflect-metadata": "^0.1.13", - "rxjs": "^7.5.5", - "sanitize-html": "^2.7.2", - "sortablejs": "1.13.0", + "rxjs": "^7.8.0", + "sanitize-html": "^2.10.0", + "sortablejs": "1.15.0", "uuid": "^8.3.2", "webfontloader": "1.6.28", "zone.js": "~0.11.5" }, "devDependencies": { "@angular-builders/custom-webpack": "~15.0.0", - "@angular-devkit/build-angular": "^15.2.5", + "@angular-devkit/build-angular": "^15.2.6", "@angular-eslint/builder": "15.2.1", "@angular-eslint/eslint-plugin": "15.2.1", "@angular-eslint/eslint-plugin-template": "15.2.1", "@angular-eslint/schematics": "15.2.1", "@angular-eslint/template-parser": "15.2.1", - "@angular/cli": "^15.2.5", - "@angular/compiler-cli": "^15.2.6", - "@angular/language-service": "^15.2.6", + "@angular/cli": "^15.2.6", + "@angular/compiler-cli": "^15.2.8", + "@angular/language-service": "^15.2.8", "@cypress/schematic": "^1.5.0", - "@fortawesome/fontawesome-free": "^6.2.1", + "@fortawesome/fontawesome-free": "^6.4.0", "@ngrx/store-devtools": "^15.4.0", - "@ngtools/webpack": "^15.2.5", - "@nguniversal/builders": "^15.2.0", + "@ngtools/webpack": "^15.2.6", + "@nguniversal/builders": "^15.2.1", "@types/deep-freeze": "0.1.2", - "@types/ejs": "^3.1.1", - "@types/express": "^4.17.9", + "@types/ejs": "^3.1.2", + "@types/express": "^4.17.17", "@types/jasmine": "~3.6.0", "@types/js-cookie": "2.2.6", - "@types/lodash": "^4.14.165", + "@types/lodash": "^4.14.194", "@types/node": "^14.14.9", - "@types/sanitize-html": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.43.0", - "@typescript-eslint/parser": "^5.43.0", - "axe-core": "^4.4.3", + "@types/sanitize-html": "^2.9.0", + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "axe-core": "^4.7.0", "compression-webpack-plugin": "^9.2.0", "copy-webpack-plugin": "^6.4.1", "cross-env": "^7.0.3", - "cypress": "12.9.0", - "cypress-axe": "^1.1.0", + "cypress": "12.10.0", + "cypress-axe": "^1.4.0", "deep-freeze": "0.0.1", - "eslint": "^8.28.0", - "eslint-plugin-deprecation": "^1.3.2", - "eslint-plugin-import": "^2.25.4", + "eslint": "^8.39.0", + "eslint-plugin-deprecation": "^1.4.1", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-lodash": "^7.4.0", "eslint-plugin-unused-imports": "^2.0.0", - "express-static-gzip": "^2.1.5", + "express-static-gzip": "^2.1.7", "jasmine-core": "^3.8.0", "jasmine-marbles": "0.9.2", - "karma": "^6.3.14", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage-istanbul-reporter": "~3.0.2", + "karma": "^6.4.2", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage-istanbul-reporter": "~3.0.3", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "karma-mocha-reporter": "2.2.5", "ngx-mask": "^13.1.7", - "nodemon": "^2.0.20", - "postcss": "^8.1", + "nodemon": "^2.0.22", + "postcss": "^8.4", "postcss-apply": "0.12.0", "postcss-import": "^14.0.0", "postcss-loader": "^4.0.3", @@ -193,14 +193,14 @@ "react-dom": "^16.14.0", "rimraf": "^3.0.2", "rxjs-spy": "^8.0.2", - "sass": "~1.33.0", + "sass": "~1.62.0", "sass-loader": "^12.6.0", - "sass-resources-loader": "^2.1.1", + "sass-resources-loader": "^2.2.5", "ts-node": "^8.10.2", "typescript": "~4.8.4", - "webpack": "^5.76.0", - "webpack-bundle-analyzer": "^4.4.0", + "webpack": "^5.80.0", + "webpack-bundle-analyzer": "^4.8.0", "webpack-cli": "^4.2.0", - "webpack-dev-server": "^4.5.0" + "webpack-dev-server": "^4.13.3" } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index a657aad0ba..51a236e219 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,6 +39,14 @@ "@angular-devkit/core" "15.2.5" rxjs "6.6.7" +"@angular-devkit/architect@0.1502.6": + version "0.1502.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1502.6.tgz#bf9452610f128ee312ee836510700152993a2447" + integrity sha512-n4oJ9vzFWwabf+AfgqqevVzdJhNKNCav7ytefjD/Y01vkNwlXqWnHcvyyHCLkVibJ6WR8J9lK4t77j/HFlDvWQ== + dependencies: + "@angular-devkit/core" "15.2.6" + rxjs "6.6.7" + "@angular-devkit/architect@^0.1202.10": version "0.1202.18" resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.18.tgz" @@ -47,7 +55,7 @@ "@angular-devkit/core" "12.2.18" rxjs "6.6.7" -"@angular-devkit/build-angular@^15.0.0", "@angular-devkit/build-angular@^15.2.5": +"@angular-devkit/build-angular@^15.0.0": version "15.2.5" resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.5.tgz" integrity sha512-D2LxjBtUlgJnPxybOIN0XsENEGkVkqCGBBii5oK84HvgBHXO/EyP1WXpOdb2lOYSUZyjhOOs0q42LCobJoaxUw== @@ -115,6 +123,74 @@ optionalDependencies: esbuild "0.17.8" +"@angular-devkit/build-angular@^15.2.6": + version "15.2.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-15.2.6.tgz#15f15c27eed465c8becc7a313d4909a7ee66f959" + integrity sha512-OmMcdXXUrAdZNxwxDE8SUx1FMcq9FyMnrSv1PmP9sHPBoxAdBVc/qNdGA9V7C5yHvWHGgzsx7ZK5TDuvifzS5g== + dependencies: + "@ampproject/remapping" "2.2.0" + "@angular-devkit/architect" "0.1502.6" + "@angular-devkit/build-webpack" "0.1502.6" + "@angular-devkit/core" "15.2.6" + "@babel/core" "7.20.12" + "@babel/generator" "7.20.14" + "@babel/helper-annotate-as-pure" "7.18.6" + "@babel/helper-split-export-declaration" "7.18.6" + "@babel/plugin-proposal-async-generator-functions" "7.20.7" + "@babel/plugin-transform-async-to-generator" "7.20.7" + "@babel/plugin-transform-runtime" "7.19.6" + "@babel/preset-env" "7.20.2" + "@babel/runtime" "7.20.13" + "@babel/template" "7.20.7" + "@discoveryjs/json-ext" "0.5.7" + "@ngtools/webpack" "15.2.6" + ansi-colors "4.1.3" + autoprefixer "10.4.13" + babel-loader "9.1.2" + babel-plugin-istanbul "6.1.1" + browserslist "4.21.5" + cacache "17.0.4" + chokidar "3.5.3" + copy-webpack-plugin "11.0.0" + critters "0.0.16" + css-loader "6.7.3" + esbuild-wasm "0.17.8" + glob "8.1.0" + https-proxy-agent "5.0.1" + inquirer "8.2.4" + jsonc-parser "3.2.0" + karma-source-map-support "1.4.0" + less "4.1.3" + less-loader "11.1.0" + license-webpack-plugin "4.0.2" + loader-utils "3.2.1" + magic-string "0.29.0" + mini-css-extract-plugin "2.7.2" + open "8.4.1" + ora "5.4.1" + parse5-html-rewriting-stream "7.0.0" + piscina "3.2.0" + postcss "8.4.21" + postcss-loader "7.0.2" + resolve-url-loader "5.0.0" + rxjs "6.6.7" + sass "1.58.1" + sass-loader "13.2.0" + semver "7.3.8" + source-map-loader "4.0.1" + source-map-support "0.5.21" + terser "5.16.3" + text-table "0.2.0" + tree-kill "1.2.2" + tslib "2.5.0" + webpack "5.76.1" + webpack-dev-middleware "6.0.1" + webpack-dev-server "4.11.1" + webpack-merge "5.8.0" + webpack-subresource-integrity "5.1.0" + optionalDependencies: + esbuild "0.17.8" + "@angular-devkit/build-webpack@0.1502.5": version "0.1502.5" resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1502.5.tgz" @@ -123,6 +199,14 @@ "@angular-devkit/architect" "0.1502.5" rxjs "6.6.7" +"@angular-devkit/build-webpack@0.1502.6": + version "0.1502.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1502.6.tgz#5fb444fc54d816e57458d36f3c280b522e5f5cfc" + integrity sha512-X7XQ11QDz2Bs5qpJ3a5glIytvI+S74ORQxdzvT6a6KB8ayW0SgZEhTwD+GF7pa5My8draIaXBGzzQR1qmpWK5Q== + dependencies: + "@angular-devkit/architect" "0.1502.6" + rxjs "6.6.7" + "@angular-devkit/core@12.2.18", "@angular-devkit/core@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.18.tgz" @@ -146,6 +230,17 @@ rxjs "6.6.7" source-map "0.7.4" +"@angular-devkit/core@15.2.6": + version "15.2.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-15.2.6.tgz#9118faadbc5e3613283da1774826d2b41883330f" + integrity sha512-YVTWZ+M+xNKdFX4EnY9QX49PZraawiaA0iTd2CUW8ZoTUvU7yOGMKZLSdz6aokTMRVfm0449wt6YL994ibOo1g== + dependencies: + ajv "8.12.0" + ajv-formats "2.1.1" + jsonc-parser "3.2.0" + rxjs "6.6.7" + source-map "0.7.4" + "@angular-devkit/schematics@12.2.18", "@angular-devkit/schematics@^12.2.17": version "12.2.18" resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.18.tgz" @@ -155,12 +250,12 @@ ora "5.4.1" rxjs "6.6.7" -"@angular-devkit/schematics@15.2.5": - version "15.2.5" - resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.2.5.tgz" - integrity sha512-zm7chQRQtPXQzzSAvK/mbZ+RJ3eP7hlU53yyJ/i6kjWAh3Y5uiSHNYGmqhhAHFuzw4Jhb4OC2S9iycxrqmI8TA== +"@angular-devkit/schematics@15.2.6": + version "15.2.6" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-15.2.6.tgz#fb5b7530f21586dbdec45cac56f8a418bcfd053d" + integrity sha512-f7VgnAcok7AwR/DhX0ZWskB0rFBo/KsvtIUA2qZSrpKMf8eFiwu03dv/b2mI0vnf+1FBfIQzJvO0ww45zRp6dA== dependencies: - "@angular-devkit/core" "15.2.5" + "@angular-devkit/core" "15.2.6" jsonc-parser "3.2.0" magic-string "0.29.0" ora "5.4.1" @@ -223,10 +318,10 @@ "@angular-eslint/bundled-angular-compiler" "15.2.1" "@typescript-eslint/utils" "5.48.2" -"@angular/animations@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/animations/-/animations-15.2.6.tgz" - integrity sha512-2fEhhj7xTzWHD61B502eXwDclsurkOK7CU+iRdl8EAtEobLRt62sG/XHmJ71UaaniWyI/H0sUSEJuF8TIPcaoQ== +"@angular/animations@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-15.2.8.tgz#11de2b0e7fc50918056bdc6d7545ea1864a8592d" + integrity sha512-I3xh8EASQ04s3qXQYpIORI0jFiFmvBQERBqS70TieTCIML7banOf9R3K7sAWB9frG5J0CEUwr+wtF47DCs/7eQ== dependencies: tslib "^2.3.0" @@ -239,15 +334,15 @@ optionalDependencies: parse5 "^7.1.2" -"@angular/cli@^15.2.5": - version "15.2.5" - resolved "https://registry.npmjs.org/@angular/cli/-/cli-15.2.5.tgz" - integrity sha512-TmkkeJkdfDkC6b2SNQcLlr1rsl2anc5rrrY3gawOVXYXBExMxAi2SNJsHZzUXfiitW52aZkAyajF1VFazs8PRw== +"@angular/cli@^15.2.6": + version "15.2.6" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-15.2.6.tgz#d5994fbd4d02e71017d4dd28ba06dc1c3cb7a976" + integrity sha512-wNkQ/qCVbd4pERaGVagKJPifEvjRNY5otwsd4iRVubY/XOcIHcYChUThZwgQdVfNAImfJPMZNrhbGxejuWLA9w== dependencies: - "@angular-devkit/architect" "0.1502.5" - "@angular-devkit/core" "15.2.5" - "@angular-devkit/schematics" "15.2.5" - "@schematics/angular" "15.2.5" + "@angular-devkit/architect" "0.1502.6" + "@angular-devkit/core" "15.2.6" + "@angular-devkit/schematics" "15.2.6" + "@schematics/angular" "15.2.6" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.3" ini "3.0.1" @@ -263,17 +358,17 @@ symbol-observable "4.0.0" yargs "17.6.2" -"@angular/common@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/common/-/common-15.2.6.tgz" - integrity sha512-kPGJoSkFPXsIeHzcjlal8JC8/jYK9qAr+wv+HDX8O1J2FEzQjwoX4SYvpnvVk5WTqUkxMkRCTMu2YFAAmU1+qg== +"@angular/common@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-15.2.8.tgz#7d60a4d906b41a852f31c63116ede1b87c84a7ad" + integrity sha512-yLDQihiRcVl38HrWMPbqgzOaSUw85AQH5BsGdjbS6BpoBQj3EXOpccCMFsuxOKxPG4toatgawNqrEnK0Jpv9Mw== dependencies: tslib "^2.3.0" -"@angular/compiler-cli@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.6.tgz" - integrity sha512-GHwL4l+NkaUGGdypF+nMFWCmTqvGusTzIriIwpnp38wc8lpmVME2jVodB6sHAkrxFmaHXU/gOCDFK4AnOi6Gmw== +"@angular/compiler-cli@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-15.2.8.tgz#6535a34b51d143970aa046593d5289883a40fea8" + integrity sha512-fFxaDlbILo0t2t662qA0cjgn+kWItGlc1tFYKU6X7bvYb3t2e0cd9FzrFPLXUQVboGis83ULcJ2zkDxScnuPuQ== dependencies: "@babel/core" "7.19.3" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -286,68 +381,68 @@ tslib "^2.3.0" yargs "^17.2.1" -"@angular/compiler@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.6.tgz" - integrity sha512-6oBAIY5KcC1UNsrnWGLcopZ9RD7c0HzpTCQY46N6HytHtUjBvzLbGWZu5MfahPtIjKz9FMVYBX9hugcbVpWnTA== +"@angular/compiler@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-15.2.8.tgz#7d8f3274e9f011b7b972ba616cd536a66d1e52ea" + integrity sha512-+dvspIDvuGoYqdL7r/3o9ojkR3fH1zevgC0ISJivcIrMi+WcJ0FV2JmJdnm8V52oNsHy+sMF9eEZGEbCbACE/A== dependencies: tslib "^2.3.0" -"@angular/core@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/core/-/core-15.2.6.tgz" - integrity sha512-eN46OfSOLQGN6AciUvyHOJ8xQxmiEakkxJeoG1jwcSRXCjwSYYnQ/6drnhUpq5p43XXBAIduKfJXNztEPvLAkA== +"@angular/core@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-15.2.8.tgz#6d7f8afa61be44b91e4b8737b39d7fdcb256a6ae" + integrity sha512-NDs+g4uM4EhyCvluf8a0YBCFXsDAEfCMHOD5cS00Bl+liTQ7JwtmepkWXMyjLB92irC9JaR79kdy4BoIKOh8WA== dependencies: tslib "^2.3.0" -"@angular/forms@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/forms/-/forms-15.2.6.tgz" - integrity sha512-SdZxsE9MUOVMz0FjOwtx1RN/SGpObnAyZBqXNrN0c4BmJg+faJzvKIBBN102CKpWZOGRoq2YYrgxow9StMhxTw== +"@angular/forms@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-15.2.8.tgz#f62a3ede067ddac24ed1b7dc5cefe9b4b0370be7" + integrity sha512-VyevVj20DdQWjAQUyiFTe+DAzqG9GqfAOWn376Y/lhPcwxAojXePTGNgtQud566/urDrNrP5haaLD6O36/3n+w== dependencies: tslib "^2.3.0" -"@angular/language-service@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.6.tgz" - integrity sha512-q6u4XhFReJ3GtA7dC5rJaEBQPjJUjOz9PlwHSOxZxugFP99ddDNBBFd0caa446G54kQdZFG7j7w7BiAp2/srmQ== +"@angular/language-service@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-15.2.8.tgz#f37fb8b020c9d0fccf1bb5b46db525b67084cc9c" + integrity sha512-3wlaJrpxe8ZLe7ZGIOs/Z++kgJMOHZCUvdXLyp/4t1ejULgUgW9yi7nGsemWnSzsUCjf7595BP1Cp1gA/J/1QQ== -"@angular/localize@15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/localize/-/localize-15.2.6.tgz" - integrity sha512-2WJBYRJ6aulo0fS9BUGr4fsdyk+5WcbZoiFURgs0sNrJtYCd51I9rQNwl3OGyYReNmFx8GgLc4K7+rEKhKfSbA== +"@angular/localize@15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-15.2.8.tgz#fa44efa7d3f84d4767b3b3ca586e7d36929aff54" + integrity sha512-wJLBp0MUnET9kHzBtqIlZ3RQ56JFItXSgmBXagQq+MU+uJZmGvuw6fez0i5wkgv9Rgnr25oCULVtpTF+T5RGYA== dependencies: "@babel/core" "7.19.3" glob "8.1.0" yargs "^17.2.1" -"@angular/platform-browser-dynamic@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.6.tgz" - integrity sha512-ZSyiigpxBWIM5f8t/a28Y3BCzHn1FtI2KsJysE7di5UUflOzwbxbfycVlpiZp0girbDYRyF18vvefvitNh17Gw== +"@angular/platform-browser-dynamic@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.8.tgz#158d28298a6f38dc8a17c416eb2779afcafc16a7" + integrity sha512-75HyoZNibA3u/FvdK4Aw5KMzUmS/nDk5N8s7gfM09fe1resSPgFiW8JJEkr1xiUdA2WtSRbHs34y5rHLDe7n1Q== dependencies: tslib "^2.3.0" -"@angular/platform-browser@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.6.tgz" - integrity sha512-8afckDEWfYf+cyxs2SboZBJkiCwFgYE8IH24RUW1t3zLC+wfrTr7UEfrCoD4YJRVJdqnPoRWN5gjz98n3n4zsA== +"@angular/platform-browser@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-15.2.8.tgz#2400f732a020d59f17b9bf8c6c3f1fb065147328" + integrity sha512-8sKFUld54inj0FnQ1ydhFxnDgsbbf43W9FALye/5uEtLgwwE/ZvkNYMaQ7hq1JPuQRMDj3gJkFqaLeFjplpHDA== dependencies: tslib "^2.3.0" -"@angular/platform-server@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/platform-server/-/platform-server-15.2.6.tgz" - integrity sha512-/2Ez8V+1s8MYSzq9sFUACJaxjYm/NbksGuKbwxV4oydN082vVgh96er5cOCLDzJLYHq+AeAkV3hL1kGHH5FFEg== +"@angular/platform-server@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-15.2.8.tgz#b850cd70baabd986e0d94f27bff1dc44f958f3af" + integrity sha512-YfPAoK2zp3mTO6ubDe0C9Vzg9Vi4BxXkxHCPG0k8IM3Ivjedkv5PZ+vC0a+GjV2xR/0YqiVE3FCwXk4X6m6LuQ== dependencies: domino "^2.1.2" tslib "^2.3.0" xhr2 "^0.2.0" -"@angular/router@^15.2.6": - version "15.2.6" - resolved "https://registry.npmjs.org/@angular/router/-/router-15.2.6.tgz" - integrity sha512-yB9uc9Xi9N0dErsugleywBA1KYG+GQ9WWSlri34oe2VsCqZazImn71n4wKPtrm2Xiy/mI23wJcr+jiCAtzp49Q== +"@angular/router@^15.2.8": + version "15.2.8" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-15.2.8.tgz#99ebf83d34dae3ebe61097b43aded3743b49c5db" + integrity sha512-C62QBEeJSBTNTrQHZiklPrxwJwuENoZzWX22MMJ7dxl+7VjRgnmj8J7mcX9fLjHlL+mC3RvesMlX7sGZRQV1cg== dependencies: tslib "^2.3.0" @@ -1278,13 +1373,6 @@ resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@7.17.2", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.17.2" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" - integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@7.20.13": version "7.20.13" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz" @@ -1292,6 +1380,20 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/runtime@7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.17.2" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" + integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@7.20.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" @@ -1654,14 +1756,14 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.38.0": - version "8.38.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz" - integrity sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g== +"@eslint/js@8.39.0": + version "8.39.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" + integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== -"@fortawesome/fontawesome-free@^6.2.1": +"@fortawesome/fontawesome-free@^6.4.0": version "6.4.0" - resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz#1ee0c174e472c84b23cb46c995154dc383e3b4fe" integrity sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ== "@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": @@ -1792,9 +1894,9 @@ react-is "^16.8.0 || ^17.0.0" react-transition-group "^4.4.0" -"@material-ui/icons@^4.9.1": +"@material-ui/icons@^4.11.3", "@material-ui/icons@^4.9.1": version "4.11.3" - resolved "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== dependencies: "@babel/runtime" "^7.4.4" @@ -1905,19 +2007,24 @@ dependencies: tslib "^2.0.0" -"@ngtools/webpack@15.2.5", "@ngtools/webpack@^15.2.5": +"@ngtools/webpack@15.2.5": version "15.2.5" resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.5.tgz" integrity sha512-wD6GY4xghVK+SQL0dy/M3saGx5pqi7+1VHEr+BBI7IUNYGSqPNzylKNxLBgQiTzfkzvbrZ6MhfaMNkhvSCYr5w== -"@nguniversal/builders@^15.2.0": - version "15.2.0" - resolved "https://registry.npmjs.org/@nguniversal/builders/-/builders-15.2.0.tgz" - integrity sha512-V+y3gj/yKs2EHXXOSk752yYS60d+Bmhts+l5o4dDi4GJSZbJ7SCcbmocxZNgjYOv3sTJgsE4zLxxiaL7+4MHDQ== +"@ngtools/webpack@15.2.6", "@ngtools/webpack@^15.2.6": + version "15.2.6" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-15.2.6.tgz#9000eafbcb74508ad8300d4f92cc3640f86f0810" + integrity sha512-I+kekKItfsCLdX+ZjjmsWqd0AyoYGTQPjlbQAiPtmdH73/rfPOF4Q/3AU4tzTdn0n0GXqZWv6VOs91w99ydi0A== + +"@nguniversal/builders@^15.2.1": + version "15.2.1" + resolved "https://registry.yarnpkg.com/@nguniversal/builders/-/builders-15.2.1.tgz#0fe86d0f5af92910c728e44aa81620002857531b" + integrity sha512-6UbnJlgFv0KcEmYtw8lJ4B9DVpQcTyQd7vEpuvlOJ7RtcKwY+yUbmsEFnUusxM7y6NgZqiFDziAdJ796agySTQ== dependencies: "@angular-devkit/architect" "~0.1502.0" "@angular-devkit/core" "~15.2.0" - "@nguniversal/common" "15.2.0" + "@nguniversal/common" "15.2.1" browser-sync "^2.27.10" express "^4.18.2" guess-parser "^0.4.22" @@ -1927,21 +2034,21 @@ rxjs "^6.5.5" tree-kill "^1.2.2" -"@nguniversal/common@15.2.0": - version "15.2.0" - resolved "https://registry.npmjs.org/@nguniversal/common/-/common-15.2.0.tgz" - integrity sha512-IfFuqpzK0P3iMdR2DbPWTbjLWsFvAwvMkZnp5k9FRgg20DpdgqDRaoJuw4HV5qSKKhY/JcVXq99GIG6JHaza1A== +"@nguniversal/common@15.2.1": + version "15.2.1" + resolved "https://registry.yarnpkg.com/@nguniversal/common/-/common-15.2.1.tgz#6e3f6b3f46394c02e20a93f7721bcd660810c1a7" + integrity sha512-1m/YFx5FLJAm/ll7YZfUTFGPqsOaHkhwEv8aHIp8oc1CWf6K+agrfLIwzY39n18T3J0lrCL/8/9vR1tnId3A9g== dependencies: critters "0.0.16" jsdom "21.1.0" tslib "^2.3.0" -"@nguniversal/express-engine@^15.2.0": - version "15.2.0" - resolved "https://registry.npmjs.org/@nguniversal/express-engine/-/express-engine-15.2.0.tgz" - integrity sha512-WDHx8iouuAlxaYQ/Sn3Qebv8ZH20O73yt9Z7xJvPM/8uPvWn/zk3wuCIWGPxars7KdkUa/NbDkRmgTlwqUPA3A== +"@nguniversal/express-engine@^15.2.1": + version "15.2.1" + resolved "https://registry.yarnpkg.com/@nguniversal/express-engine/-/express-engine-15.2.1.tgz#4c99b77cc690e44aa6f25ea857838590c71e8237" + integrity sha512-LHQfntApCGvKREJ0MvhioM1TdWnYxqnYRgX3JoWaNVFPdVryhWLPv4RCjqV8QiMe5DQKd6Pc5J+VIhYX5hwjPQ== dependencies: - "@nguniversal/common" "15.2.0" + "@nguniversal/common" "15.2.1" tslib "^2.3.0" "@ngx-translate/core@^14.0.0": @@ -2132,13 +2239,13 @@ resolved "https://registry.npmjs.org/@researchgate/react-intersection-observer/-/react-intersection-observer-1.3.5.tgz" integrity sha512-aYlsex5Dd6BAHMJvJrUoFp8gzgMSL27xFvrxkVYW0bV1RMAapVsO+QeYLtTaSF/QCflktODodvv+wJm49oMnnQ== -"@schematics/angular@15.2.5": - version "15.2.5" - resolved "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.5.tgz" - integrity sha512-YN0A5bzuqEmLdwbcQRop9TFj0QVxTC/XCL0K5DfDymVBS2j09NMyLLVc6TDOs+J/fMQr5EwiT149ikzqiUmAcw== +"@schematics/angular@15.2.6": + version "15.2.6" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-15.2.6.tgz#5a0face51806f6b2adf67eef73b08c31744b07bc" + integrity sha512-OcBUvVAxZEMBX+fi0ytybeAdmStra+GwtlvipS70yOxcAgJ84ZrnZGN7a072cCVQcq7AgqUfssnyqCx1wu+yCg== dependencies: - "@angular-devkit/core" "15.2.5" - "@angular-devkit/schematics" "15.2.5" + "@angular-devkit/core" "15.2.6" + "@angular-devkit/schematics" "15.2.6" jsonc-parser "3.2.0" "@schematics/angular@^12.2.17": @@ -2255,9 +2362,9 @@ resolved "https://registry.npmjs.org/@types/deep-freeze/-/deep-freeze-0.1.2.tgz" integrity sha512-M6x29Vk4681dght4IMnPIcF1SNmeEm0c4uatlTFhp+++H1oDK1THEIzuCC2WeCBVhX+gU0NndsseDS3zaCtlcQ== -"@types/ejs@^3.1.1": +"@types/ejs@^3.1.2": version "3.1.2" - resolved "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.2.tgz#75d277b030bc11b3be38c807e10071f45ebc78d9" integrity sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g== "@types/eslint-scope@^3.7.3": @@ -2281,6 +2388,11 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" @@ -2290,7 +2402,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.9": +"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.17": version "4.17.17" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== @@ -2340,10 +2452,10 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash@^4.14.165": - version "4.14.192" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz" - integrity sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A== +"@types/lodash@^4.14.194": + version "4.14.194" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" + integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== "@types/mime@*": version "3.0.1" @@ -2406,9 +2518,9 @@ resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/sanitize-html@^2.6.2": +"@types/sanitize-html@^2.9.0": version "2.9.0" - resolved "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.9.0.tgz" + resolved "https://registry.yarnpkg.com/@types/sanitize-html/-/sanitize-html-2.9.0.tgz#5b609f7592de22ef80a0930c39670329753dca1b" integrity sha512-4fP/kEcKNj2u39IzrxWYuf/FnCCwwQCpif6wwY6ROUS1EPRIfWJjGkY3HIowY1EX/VbX5e86yq8AAE7UPMgATg== dependencies: htmlparser2 "^8.0.0" @@ -2474,15 +2586,15 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.43.0": - version "5.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz" - integrity sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA== +"@typescript-eslint/eslint-plugin@^5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" + integrity sha512-AVi0uazY5quFB9hlp2Xv+ogpfpk77xzsgsIEWyVS7uK/c7MZ5tw7ZPbapa0SbfkqE0fsAMkz5UwtgMLVk2BQAg== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/type-utils" "5.58.0" - "@typescript-eslint/utils" "5.58.0" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/type-utils" "5.59.1" + "@typescript-eslint/utils" "5.59.1" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -2490,14 +2602,14 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.43.0": - version "5.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz" - integrity sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ== +"@typescript-eslint/parser@^5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.1.tgz#73c2c12127c5c1182d2e5b71a8fa2a85d215cbb4" + integrity sha512-nzjFAN8WEu6yPRDizIFyzAfgK7nybPodMNFGNH0M9tei2gYnYszRDqVA0xlnRjkl7Hkx2vYrEdb6fP2a21cG1g== dependencies: - "@typescript-eslint/scope-manager" "5.58.0" - "@typescript-eslint/types" "5.58.0" - "@typescript-eslint/typescript-estree" "5.58.0" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/typescript-estree" "5.59.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.48.2": @@ -2516,6 +2628,14 @@ "@typescript-eslint/types" "5.58.0" "@typescript-eslint/visitor-keys" "5.58.0" +"@typescript-eslint/scope-manager@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.1.tgz#8a20222719cebc5198618a5d44113705b51fd7fe" + integrity sha512-mau0waO5frJctPuAzcxiNWqJR5Z8V0190FTSqRw1Q4Euop6+zTwHAf8YIXNwDOT29tyUDrQ65jSg9aTU/H0omA== + dependencies: + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/visitor-keys" "5.59.1" + "@typescript-eslint/type-utils@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz" @@ -2526,13 +2646,13 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/type-utils@5.58.0": - version "5.58.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz" - integrity sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w== +"@typescript-eslint/type-utils@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz#63981d61684fd24eda2f9f08c0a47ecb000a2111" + integrity sha512-ZMWQ+Oh82jWqWzvM3xU+9y5U7MEMVv6GLioM3R5NJk6uvP47kZ7YvlgSHJ7ERD6bOY7Q4uxWm25c76HKEwIjZw== dependencies: - "@typescript-eslint/typescript-estree" "5.58.0" - "@typescript-eslint/utils" "5.58.0" + "@typescript-eslint/typescript-estree" "5.59.1" + "@typescript-eslint/utils" "5.59.1" debug "^4.3.4" tsutils "^3.21.0" @@ -2546,6 +2666,11 @@ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz" integrity sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g== +"@typescript-eslint/types@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.1.tgz#03f3fedd1c044cb336ebc34cc7855f121991f41d" + integrity sha512-dg0ICB+RZwHlysIy/Dh1SP+gnXNzwd/KS0JprD3Lmgmdq+dJAJnUPe1gNG34p0U19HvRlGX733d/KqscrGC1Pg== + "@typescript-eslint/typescript-estree@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz" @@ -2572,6 +2697,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.1.tgz#4aa546d27fd0d477c618f0ca00b483f0ec84c43c" + integrity sha512-lYLBBOCsFltFy7XVqzX0Ju+Lh3WPIAWxYpmH/Q7ZoqzbscLiCW00LeYCdsUnnfnj29/s1WovXKh2gwCoinHNGA== + dependencies: + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/visitor-keys" "5.59.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.48.2": version "5.48.2" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.2.tgz" @@ -2586,7 +2724,21 @@ eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/utils@5.58.0", "@typescript-eslint/utils@^5.57.0": +"@typescript-eslint/utils@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.1.tgz#d89fc758ad23d2157cfae53f0b429bdf15db9473" + integrity sha512-MkTe7FE+K1/GxZkP5gRj3rCztg45bEhsd8HYjczBuYm+qFHP5vtZmjx3B0yUCDotceQ4sHgTyz60Ycl225njmA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.1" + "@typescript-eslint/types" "5.59.1" + "@typescript-eslint/typescript-estree" "5.59.1" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/utils@^5.57.0": version "5.58.0" resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz" integrity sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ== @@ -2616,6 +2768,14 @@ "@typescript-eslint/types" "5.58.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.59.1": + version "5.59.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.1.tgz#0d96c36efb6560d7fb8eb85de10442c10d8f6058" + integrity sha512-6waEYwBTCWryx0VJmP7JaM4FpipLsFl9CvYf2foAE8Qh/Y0s+bxWysciwOs0LTBED4JCaNxTZ5rGadB14M6dwA== + dependencies: + "@typescript-eslint/types" "5.59.1" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" @@ -2624,21 +2784,44 @@ "@webassemblyjs/helper-numbers" "1.11.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.1" +"@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c" + integrity sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/floating-point-hex-parser@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz#e85dfdb01cad16b812ff166b96806c050555f1b4" + integrity sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ== + "@webassemblyjs/helper-api-error@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz#1e82fa7958c681ddcf4eabef756ce09d49d442d1" + integrity sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA== + "@webassemblyjs/helper-buffer@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz#91381652ea95bb38bbfd270702351c0c89d69fba" + integrity sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg== + "@webassemblyjs/helper-numbers@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" @@ -2648,11 +2831,25 @@ "@webassemblyjs/helper-api-error" "1.11.1" "@xtuc/long" "4.2.2" +"@webassemblyjs/helper-numbers@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz#23380c910d56764957292839006fecbe05e135a9" + integrity sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.5" + "@webassemblyjs/helper-api-error" "1.11.5" + "@xtuc/long" "4.2.2" + "@webassemblyjs/helper-wasm-bytecode@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz#e258a25251bc69a52ef817da3001863cc1c24b9f" + integrity sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA== + "@webassemblyjs/helper-wasm-section@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" @@ -2663,6 +2860,16 @@ "@webassemblyjs/helper-wasm-bytecode" "1.11.1" "@webassemblyjs/wasm-gen" "1.11.1" +"@webassemblyjs/helper-wasm-section@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz#966e855a6fae04d5570ad4ec87fbcf29b42ba78e" + integrity sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-buffer" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/wasm-gen" "1.11.5" + "@webassemblyjs/ieee754@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" @@ -2670,6 +2877,13 @@ dependencies: "@xtuc/ieee754" "^1.2.0" +"@webassemblyjs/ieee754@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz#b2db1b33ce9c91e34236194c2b5cba9b25ca9d60" + integrity sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/leb128@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" @@ -2677,11 +2891,23 @@ dependencies: "@xtuc/long" "4.2.2" +"@webassemblyjs/leb128@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.5.tgz#482e44d26b6b949edf042a8525a66c649e38935a" + integrity sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ== + dependencies: + "@xtuc/long" "4.2.2" + "@webassemblyjs/utf8@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== +"@webassemblyjs/utf8@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.5.tgz#83bef94856e399f3740e8df9f63bc47a987eae1a" + integrity sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ== + "@webassemblyjs/wasm-edit@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" @@ -2696,6 +2922,20 @@ "@webassemblyjs/wasm-parser" "1.11.1" "@webassemblyjs/wast-printer" "1.11.1" +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz#93ee10a08037657e21c70de31c47fdad6b522b2d" + integrity sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-buffer" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/helper-wasm-section" "1.11.5" + "@webassemblyjs/wasm-gen" "1.11.5" + "@webassemblyjs/wasm-opt" "1.11.5" + "@webassemblyjs/wasm-parser" "1.11.5" + "@webassemblyjs/wast-printer" "1.11.5" + "@webassemblyjs/wasm-gen@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" @@ -2707,6 +2947,17 @@ "@webassemblyjs/leb128" "1.11.1" "@webassemblyjs/utf8" "1.11.1" +"@webassemblyjs/wasm-gen@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz#ceb1c82b40bf0cf67a492c53381916756ef7f0b1" + integrity sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/ieee754" "1.11.5" + "@webassemblyjs/leb128" "1.11.5" + "@webassemblyjs/utf8" "1.11.5" + "@webassemblyjs/wasm-opt@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" @@ -2717,6 +2968,16 @@ "@webassemblyjs/wasm-gen" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" +"@webassemblyjs/wasm-opt@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz#b52bac29681fa62487e16d3bb7f0633d5e62ca0a" + integrity sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-buffer" "1.11.5" + "@webassemblyjs/wasm-gen" "1.11.5" + "@webassemblyjs/wasm-parser" "1.11.5" + "@webassemblyjs/wasm-parser@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" @@ -2729,6 +2990,18 @@ "@webassemblyjs/leb128" "1.11.1" "@webassemblyjs/utf8" "1.11.1" +"@webassemblyjs/wasm-parser@1.11.5", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz#7ba0697ca74c860ea13e3ba226b29617046982e2" + integrity sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-api-error" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/ieee754" "1.11.5" + "@webassemblyjs/leb128" "1.11.5" + "@webassemblyjs/utf8" "1.11.5" + "@webassemblyjs/wast-printer@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" @@ -2737,6 +3010,14 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-printer@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz#7a5e9689043f3eca82d544d7be7a8e6373a6fa98" + integrity sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@xtuc/long" "4.2.2" + "@webpack-cli/configtest@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz" @@ -2941,9 +3222,9 @@ angular-idle-preload@3.0.0: resolved "https://registry.npmjs.org/angular-idle-preload/-/angular-idle-preload-3.0.0.tgz" integrity sha512-W3P2m2B6MHdt1DVunH6H3VWkAZrG3ZwxGcPjedVvIyRhg/LmMtILoizHSxTXw3fsKIEdAPwGObXGpML9WD1jJA== -angulartics2@^12.0.0: +angulartics2@^12.2.0: version "12.2.0" - resolved "https://registry.npmjs.org/angulartics2/-/angulartics2-12.2.0.tgz" + resolved "https://registry.yarnpkg.com/angulartics2/-/angulartics2-12.2.0.tgz#79159693b4436905391e3b1e7d549c900408e175" integrity sha512-1wl/cPA4PGYj42z80VIR+A0Hy3+rt13POzfTfZ83NUDx2KKbHjtTKS0O7u3umi10cqvi5tn4NTSYIFFJ1fI2Tw== dependencies: tslib "^2.3.0" @@ -3203,10 +3484,10 @@ aws4@^1.8.0: resolved "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axe-core@^4.4.3: - version "4.6.3" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz" - integrity sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg== +axe-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== axios@0.21.4: version "0.21.4" @@ -3779,9 +4060,9 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-progress@^3.8.0: +cli-progress@^3.12.0: version "3.12.0" - resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" @@ -3906,12 +4187,7 @@ commander@^2.2.0, commander@^2.20.0: resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^6.1.0: +commander@^6.1.0, commander@^6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -4021,12 +4297,12 @@ convert-source-map@^1.5.1, convert-source-map@^1.7.0: resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== -cookie-parser@1.4.5: - version "1.4.5" - resolved "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz" - integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== +cookie-parser@1.4.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" + integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== dependencies: - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" cookie-signature@1.0.6: @@ -4034,10 +4310,10 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== cookie@0.5.0: version "0.5.0" @@ -4099,10 +4375,10 @@ core-js-compat@^3.25.1: dependencies: browserslist "^4.21.5" -core-js@^3.7.0: - version "3.30.0" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz" - integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== +core-js@^3.30.1: + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba" + integrity sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ== core-util-is@1.0.2: version "1.0.2" @@ -4282,15 +4558,15 @@ custom-event@~1.0.0: resolved "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz" integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== -cypress-axe@^1.1.0: +cypress-axe@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/cypress-axe/-/cypress-axe-1.4.0.tgz#e67482bfe9e740796bf77c7823f19781a8a2faff" integrity sha512-Ut7NKfzjyKm0BEbt2WxuKtLkIXmx6FD2j0RwdvO/Ykl7GmB/qRQkwbKLk3VP35+83hiIr8GKD04PDdrTK5BnyA== -cypress@12.9.0: - version "12.9.0" - resolved "https://registry.npmjs.org/cypress/-/cypress-12.9.0.tgz" - integrity sha512-Ofe09LbHKgSqX89Iy1xen2WvpgbvNxDzsWx3mgU1mfILouELeXYGwIib3ItCwoRrRifoQwcBFmY54Vs0zw7QCg== +cypress@12.10.0: + version "12.10.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.10.0.tgz#b6264f77c214d63530ebac2b33c4d099bd40b715" + integrity sha512-Y0wPc221xKKW1/4iAFCphkrG2jNR4MjOne3iGn4mcuCaE7Y5EtXL83N8BzRsAht7GYfWVjJ/UeTqEdDKHz39HQ== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" @@ -4306,7 +4582,7 @@ cypress@12.9.0: check-more-types "^2.24.0" cli-cursor "^3.1.0" cli-table3 "~0.6.1" - commander "^5.1.0" + commander "^6.2.1" common-tags "^1.8.0" dayjs "^1.10.4" debug "^4.3.4" @@ -4324,7 +4600,7 @@ cypress@12.9.0: listr2 "^3.8.3" lodash "^4.17.21" log-symbols "^4.0.0" - minimist "^1.2.6" + minimist "^1.2.8" ospath "^1.2.2" pretty-bytes "^5.6.0" proxy-from-env "1.0.0" @@ -4446,9 +4722,9 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-gateway@^6.0.3: @@ -4729,9 +5005,9 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.8: +ejs@^3.1.9: version "3.1.9" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" @@ -4817,6 +5093,14 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enhanced-resolve@^5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" + integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enquirer@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" @@ -4940,6 +5224,11 @@ es-module-lexer@^0.9.0: resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" @@ -4965,10 +5254,10 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promisify@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz" - integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg== +es6-promisify@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-7.0.0.tgz#9a710008dd6a4ab75a89e280bad787bfb749927b" + integrity sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q== esbuild-wasm@0.17.8: version "0.17.8" @@ -5056,18 +5345,18 @@ eslint-module-utils@^2.7.4: dependencies: debug "^3.2.7" -eslint-plugin-deprecation@^1.3.2: +eslint-plugin-deprecation@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.4.1.tgz#09a2889210955fd1a5c37703922c01724aba80eb" integrity sha512-4vxTghWzxsBukPJVQupi6xlTuDc8Pyi1QlRCrFiLgwLPMJQW3cJCNaehJUKQqQFvuue5m4W27e179Y3Qjzeghg== dependencies: "@typescript-eslint/utils" "^5.57.0" tslib "^2.3.1" tsutils "^3.21.0" -eslint-plugin-import@^2.25.4: +eslint-plugin-import@^2.27.5: version "2.27.5" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: array-includes "^3.1.6" @@ -5126,7 +5415,7 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.0.0, eslint-scope@^7.1.1: +eslint-scope@^7.0.0: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== @@ -5134,6 +5423,14 @@ eslint-scope@^7.0.0, eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" @@ -5151,15 +5448,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz" integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== -eslint@^8.28.0: - version "8.38.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz" - integrity sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg== +eslint@^8.39.0: + version "8.39.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" + integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" "@eslint/eslintrc" "^2.0.2" - "@eslint/js" "8.38.0" + "@eslint/js" "8.39.0" "@humanwhocodes/config-array" "^0.11.8" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -5169,7 +5466,7 @@ eslint@^8.28.0: debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" + eslint-scope "^7.2.0" eslint-visitor-keys "^3.4.0" espree "^9.5.1" esquery "^1.4.2" @@ -5312,14 +5609,14 @@ express-rate-limit@^5.1.3: resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz" integrity sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg== -express-static-gzip@^2.1.5: +express-static-gzip@^2.1.7: version "2.1.7" - resolved "https://registry.npmjs.org/express-static-gzip/-/express-static-gzip-2.1.7.tgz" + resolved "https://registry.yarnpkg.com/express-static-gzip/-/express-static-gzip-2.1.7.tgz#5904824a07950ba741ec3a23a21839dd04c63506" integrity sha512-QOCZUC+lhPPCjIJKpQGu1Oa61Axg9Mq09Qvit8Of7kzpMuwDeMSqjjQteQS3OVw/GkENBoSBheuQDWPlngImvw== dependencies: serve-static "^1.14.1" -express@^4.17.1, express@^4.17.3, express@^4.18.2: +express@^4.17.3, express@^4.18.2: version "4.18.2" resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -5402,9 +5699,9 @@ fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-patch@^3.0.0-1: +fast-json-patch@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz#85064ea1b1ebf97a3f7ad01e23f9337e72c66947" integrity sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ== fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: @@ -6743,10 +7040,10 @@ isbinaryfile@^4.0.8: resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== -isbot@^3.6.5: - version "3.6.8" - resolved "https://registry.npmjs.org/isbot/-/isbot-3.6.8.tgz" - integrity sha512-V8XUXN0/UYxfgrui4o38pmOve2eO/1KjluxR1G8Qnu5gqlUiNrvtX06t1W5n8vFtrtKfHj96iFYuPL39jXUe8g== +isbot@^3.6.10: + version "3.6.10" + resolved "https://registry.yarnpkg.com/isbot/-/isbot-3.6.10.tgz#7b66334e81794f0461794debb567975cf08eaf2b" + integrity sha512-+I+2998oyP4oW9+OTQD8TS1r9P6wv10yejukj+Ksj3+UR5pUhsZN3f8W7ysq0p1qxpOVNbl5mCuv0bCaF8y5iQ== isexe@^2.0.0: version "2.0.0" @@ -7008,7 +7305,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.1, json5@^2.2.2: +json5@^2.1.2, json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -7051,10 +7348,10 @@ jsonparse@^1.3.1: resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsonschema@1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" - integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== +jsonschema@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== jsprim@^1.2.2: version "1.4.2" @@ -7169,16 +7466,16 @@ jwt-decode@^3.1.2: resolved "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz" integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== -karma-chrome-launcher@~3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz" - integrity sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ== +karma-chrome-launcher@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz#eb9c95024f2d6dfbb3748d3415ac9b381906b9a9" + integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== dependencies: which "^1.2.1" -karma-coverage-istanbul-reporter@~3.0.2: +karma-coverage-istanbul-reporter@~3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz#f3b5303553aadc8e681d40d360dfdc19bc7e9fe9" integrity sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -7215,10 +7512,10 @@ karma-source-map-support@1.4.0: dependencies: source-map-support "^0.5.5" -karma@^6.3.14: - version "6.4.1" - resolved "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz" - integrity sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA== +karma@^6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" + integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -7585,9 +7882,9 @@ manifesto.js@^4.2.0: isomorphic-unfetch "^3.0.0" lodash "^4.17.21" -markdown-it-mathjax3@^4.3.1: +markdown-it-mathjax3@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz#1e34aa86f8560b283fd283008334adc2d6b05a37" integrity sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w== dependencies: juice "^8.0.0" @@ -7614,9 +7911,9 @@ mathjax-full@^3.2.0: mj-context-menu "^0.6.1" speech-rule-engine "^4.0.6" -md5@^2.2.1: +md5@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: charenc "0.0.2" @@ -7755,7 +8052,7 @@ minimatch@^8.0.2, minimatch@^8.0.3: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -7968,7 +8265,7 @@ mute-stream@0.0.8: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@^3.3.4: +nanoid@^3.3.4, nanoid@^3.3.6: version "3.3.6" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -8105,9 +8402,9 @@ node-releases@^2.0.8: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== -nodemon@^2.0.20: +nodemon@^2.0.22: version "2.0.22" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" @@ -8422,9 +8719,9 @@ ora@5.4.1, ora@^5.1.0, ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.2, os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== ospath@^1.2.2: @@ -8619,14 +8916,14 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pem@1.14.4: - version "1.14.4" - resolved "https://registry.npmjs.org/pem/-/pem-1.14.4.tgz" - integrity sha512-v8lH3NpirgiEmbOqhx0vwQTxwi0ExsiWBGYh0jYNq7K6mQuO4gI6UEFlr6fLAdv9TPXRt6GqiwE37puQdIDS8g== +pem@1.14.7: + version "1.14.7" + resolved "https://registry.yarnpkg.com/pem/-/pem-1.14.7.tgz#dae9831ee5fa7c88547327fb7738898cd76412c6" + integrity sha512-tN5+bp2/Yh/2yuv/JFXXHXrd5RVfsEBwlV7BshuYPX0OJWbR/MeAr89CKWcIp/W0cEnaTPT44haXyaEz1T6XeA== dependencies: - es6-promisify "^6.0.0" - md5 "^2.2.1" - os-tmpdir "^1.0.1" + es6-promisify "^7.0.0" + md5 "^2.3.0" + os-tmpdir "^1.0.2" which "^2.0.2" pend@~1.2.0: @@ -9030,7 +9327,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@8.4.21, postcss@^8.1, postcss@^8.2.14, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4.19: +postcss@8.4.21, postcss@^8.2.14, postcss@^8.3.11, postcss@^8.3.7, postcss@^8.4.19: version "8.4.21" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz" integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== @@ -9056,6 +9353,15 @@ postcss@^7.0.14: picocolors "^0.2.1" source-map "^0.6.1" +postcss@^8.4: + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -9250,7 +9556,7 @@ react-beautiful-dnd@^13.0.0: redux "^4.0.4" use-memo-one "^1.1.1" -react-copy-to-clipboard@^5.0.1: +react-copy-to-clipboard@^5.0.1, react-copy-to-clipboard@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz" integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== @@ -9783,9 +10089,9 @@ rxjs@6.6.7, rxjs@^6.5.5, rxjs@~6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.5.1, rxjs@^7.5.5: +rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0: version "7.8.0" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" @@ -9814,9 +10120,9 @@ safe-regex-test@^1.0.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanitize-html@^2.7.2: +sanitize-html@^2.10.0: version "2.10.0" - resolved "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.10.0.tgz" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.10.0.tgz#74d28848dfcf72c39693139131895c78900ab452" integrity sha512-JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ== dependencies: deepmerge "^4.2.2" @@ -9842,9 +10148,9 @@ sass-loader@^12.6.0: klona "^2.0.4" neo-async "^2.6.2" -sass-resources-loader@^2.1.1: +sass-resources-loader@^2.2.5: version "2.2.5" - resolved "https://registry.npmjs.org/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz" + resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.2.5.tgz#75131cdb26bae51fcffc007d8155d57b5e825ca7" integrity sha512-po8rfETH9cOQACWxubT/1CCu77KjxwRtCDm6QAXZH99aUHBydwSoxdIjC40SGp/dcS/FkSNJl0j1VEojGZqlvQ== dependencies: async "^3.2.3" @@ -9861,12 +10167,14 @@ sass@1.58.1: immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" -sass@~1.33.0: - version "1.33.0" - resolved "https://registry.npmjs.org/sass/-/sass-1.33.0.tgz" - integrity sha512-9v0MUXnSi62FtfjqcwZ+b8B9FIxdwFEb3FPUkjEPXWd0b5KcnPGSp2XF9WrzcH1ZxedfgJVTdA3A1j4eEj53xg== +sass@~1.62.0: + version "1.62.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.62.0.tgz#3686b2195b93295d20765135e562366b33ece37d" + integrity sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg== dependencies: chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" sax@>=0.6.0, sax@^1.2.4: version "1.2.4" @@ -9904,6 +10212,15 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + schema-utils@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" @@ -10234,10 +10551,10 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sortablejs@1.13.0: - version "1.13.0" - resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz" - integrity sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg== +sortablejs@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.15.0.tgz#53230b8aa3502bb77a29e2005808ffdb4a5f7e2a" + integrity sha512-bv9qgVMjUMf89wAvM6AxVvS/4MX3sPeN0+agqShejLU5z5GX4C75ow1O2e5k4L6XItUyAK3gH6AxSbXrOM5e8w== source-list-map@^2.0.0: version "2.0.1" @@ -10591,7 +10908,7 @@ tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -terser-webpack-plugin@^5.1.3: +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.7: version "5.3.7" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz" integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== @@ -11235,9 +11552,9 @@ webidl-conversions@^7.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-bundle-analyzer@^4.4.0: +webpack-bundle-analyzer@^4.8.0: version "4.8.0" - resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== dependencies: "@discoveryjs/json-ext" "0.5.7" @@ -11326,10 +11643,10 @@ webpack-dev-server@4.11.1: webpack-dev-middleware "^5.3.1" ws "^8.4.2" -webpack-dev-server@^4.5.0: - version "4.13.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz" - integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== +webpack-dev-server@^4.13.3: + version "4.13.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz#9feb740b8b56b886260bae1360286818a221bae8" + integrity sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -11420,22 +11737,22 @@ webpack@5.76.1: watchpack "^2.4.0" webpack-sources "^3.2.3" -webpack@^5.76.0: - version "5.78.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz" - integrity sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g== +webpack@^5.80.0: + version "5.80.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.80.0.tgz#3e660b4ab572be38c5e954bdaae7e2bf76010fdc" + integrity sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.13.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -11444,9 +11761,9 @@ webpack@^5.76.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.1.2" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" From 18e7de81d9a621d6e326555bb1d92edd4fc7cb0b Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Tue, 25 Apr 2023 15:51:41 +0200 Subject: [PATCH 530/833] 101108: Removal of webpack devDependency to solve conflict with @angular-devkit/build-angular --- package.json | 3 +- yarn.lock | 180 +-------------------------------------------------- 2 files changed, 2 insertions(+), 181 deletions(-) diff --git a/package.json b/package.json index 6dc675de2d..2118237c77 100644 --- a/package.json +++ b/package.json @@ -199,9 +199,8 @@ "sass-resources-loader": "^2.2.5", "ts-node": "^8.10.2", "typescript": "~4.8.4", - "webpack": "^5.80.0", "webpack-bundle-analyzer": "^4.8.0", "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.13.3" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index a2de44cdb9..563ec741c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2388,11 +2388,6 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.33" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz" @@ -2784,44 +2779,21 @@ "@webassemblyjs/helper-numbers" "1.11.1" "@webassemblyjs/helper-wasm-bytecode" "1.11.1" -"@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c" - integrity sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.5" - "@webassemblyjs/helper-wasm-bytecode" "1.11.5" - "@webassemblyjs/floating-point-hex-parser@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== -"@webassemblyjs/floating-point-hex-parser@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz#e85dfdb01cad16b812ff166b96806c050555f1b4" - integrity sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ== - "@webassemblyjs/helper-api-error@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== -"@webassemblyjs/helper-api-error@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz#1e82fa7958c681ddcf4eabef756ce09d49d442d1" - integrity sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA== - "@webassemblyjs/helper-buffer@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== -"@webassemblyjs/helper-buffer@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz#91381652ea95bb38bbfd270702351c0c89d69fba" - integrity sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg== - "@webassemblyjs/helper-numbers@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" @@ -2831,25 +2803,11 @@ "@webassemblyjs/helper-api-error" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-numbers@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz#23380c910d56764957292839006fecbe05e135a9" - integrity sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.5" - "@webassemblyjs/helper-api-error" "1.11.5" - "@xtuc/long" "4.2.2" - "@webassemblyjs/helper-wasm-bytecode@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== -"@webassemblyjs/helper-wasm-bytecode@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz#e258a25251bc69a52ef817da3001863cc1c24b9f" - integrity sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA== - "@webassemblyjs/helper-wasm-section@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" @@ -2860,16 +2818,6 @@ "@webassemblyjs/helper-wasm-bytecode" "1.11.1" "@webassemblyjs/wasm-gen" "1.11.1" -"@webassemblyjs/helper-wasm-section@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz#966e855a6fae04d5570ad4ec87fbcf29b42ba78e" - integrity sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA== - dependencies: - "@webassemblyjs/ast" "1.11.5" - "@webassemblyjs/helper-buffer" "1.11.5" - "@webassemblyjs/helper-wasm-bytecode" "1.11.5" - "@webassemblyjs/wasm-gen" "1.11.5" - "@webassemblyjs/ieee754@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" @@ -2877,13 +2825,6 @@ dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/ieee754@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz#b2db1b33ce9c91e34236194c2b5cba9b25ca9d60" - integrity sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - "@webassemblyjs/leb128@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" @@ -2891,23 +2832,11 @@ dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/leb128@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.5.tgz#482e44d26b6b949edf042a8525a66c649e38935a" - integrity sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ== - dependencies: - "@xtuc/long" "4.2.2" - "@webassemblyjs/utf8@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== -"@webassemblyjs/utf8@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.5.tgz#83bef94856e399f3740e8df9f63bc47a987eae1a" - integrity sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ== - "@webassemblyjs/wasm-edit@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" @@ -2922,20 +2851,6 @@ "@webassemblyjs/wasm-parser" "1.11.1" "@webassemblyjs/wast-printer" "1.11.1" -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz#93ee10a08037657e21c70de31c47fdad6b522b2d" - integrity sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ== - dependencies: - "@webassemblyjs/ast" "1.11.5" - "@webassemblyjs/helper-buffer" "1.11.5" - "@webassemblyjs/helper-wasm-bytecode" "1.11.5" - "@webassemblyjs/helper-wasm-section" "1.11.5" - "@webassemblyjs/wasm-gen" "1.11.5" - "@webassemblyjs/wasm-opt" "1.11.5" - "@webassemblyjs/wasm-parser" "1.11.5" - "@webassemblyjs/wast-printer" "1.11.5" - "@webassemblyjs/wasm-gen@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" @@ -2947,17 +2862,6 @@ "@webassemblyjs/leb128" "1.11.1" "@webassemblyjs/utf8" "1.11.1" -"@webassemblyjs/wasm-gen@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz#ceb1c82b40bf0cf67a492c53381916756ef7f0b1" - integrity sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA== - dependencies: - "@webassemblyjs/ast" "1.11.5" - "@webassemblyjs/helper-wasm-bytecode" "1.11.5" - "@webassemblyjs/ieee754" "1.11.5" - "@webassemblyjs/leb128" "1.11.5" - "@webassemblyjs/utf8" "1.11.5" - "@webassemblyjs/wasm-opt@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" @@ -2968,16 +2872,6 @@ "@webassemblyjs/wasm-gen" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" -"@webassemblyjs/wasm-opt@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz#b52bac29681fa62487e16d3bb7f0633d5e62ca0a" - integrity sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw== - dependencies: - "@webassemblyjs/ast" "1.11.5" - "@webassemblyjs/helper-buffer" "1.11.5" - "@webassemblyjs/wasm-gen" "1.11.5" - "@webassemblyjs/wasm-parser" "1.11.5" - "@webassemblyjs/wasm-parser@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" @@ -2990,18 +2884,6 @@ "@webassemblyjs/leb128" "1.11.1" "@webassemblyjs/utf8" "1.11.1" -"@webassemblyjs/wasm-parser@1.11.5", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz#7ba0697ca74c860ea13e3ba226b29617046982e2" - integrity sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew== - dependencies: - "@webassemblyjs/ast" "1.11.5" - "@webassemblyjs/helper-api-error" "1.11.5" - "@webassemblyjs/helper-wasm-bytecode" "1.11.5" - "@webassemblyjs/ieee754" "1.11.5" - "@webassemblyjs/leb128" "1.11.5" - "@webassemblyjs/utf8" "1.11.5" - "@webassemblyjs/wast-printer@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" @@ -3010,14 +2892,6 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.11.5": - version "1.11.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz#7a5e9689043f3eca82d544d7be7a8e6373a6fa98" - integrity sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA== - dependencies: - "@webassemblyjs/ast" "1.11.5" - "@xtuc/long" "4.2.2" - "@webpack-cli/configtest@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz" @@ -5093,14 +4967,6 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enhanced-resolve@^5.13.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" - integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - enquirer@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" @@ -5224,11 +5090,6 @@ es-module-lexer@^0.9.0: resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== -es-module-lexer@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" - integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== - es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" @@ -10231,15 +10092,6 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" - integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - schema-utils@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" @@ -10927,7 +10779,7 @@ tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@^5.1.3: version "5.3.7" resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz" integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== @@ -11756,36 +11608,6 @@ webpack@5.76.1: watchpack "^2.4.0" webpack-sources "^3.2.3" -webpack@^5.80.0: - version "5.80.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.80.0.tgz#3e660b4ab572be38c5e954bdaae7e2bf76010fdc" - integrity sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.2" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" From 7008afd05f19703e91c92f9f194feb54139c3d92 Mon Sep 17 00:00:00 2001 From: lotte Date: Tue, 25 Apr 2023 16:12:00 +0200 Subject: [PATCH 531/833] 1578: primaryBitstream implementation --- .../edit-bitstream-page.component.spec.ts | 152 ++++++++++++++++-- .../edit-bitstream-page.component.ts | 136 +++++++++++----- src/app/core/shared/bundle.model.ts | 8 +- 3 files changed, 243 insertions(+), 53 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 44e48182fd..13f3ec7f27 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -24,6 +24,8 @@ import { createPaginatedList } from '../../shared/testing/utils.test'; import { Item } from '../../core/shared/item.model'; import { MetadataValueFilter } from '../../core/shared/metadata.models'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; +import { Bundle } from '../../core/shared/bundle.model'; +import { BundleDataService } from '../../core/data/bundle-data.service'; const infoNotification: INotification = new Notification('id', NotificationType.Info, 'info'); const warningNotification: INotification = new Notification('id', NotificationType.Warning, 'warning'); @@ -35,9 +37,14 @@ let bitstreamService: BitstreamDataService; let bitstreamFormatService: BitstreamFormatDataService; let dsoNameService: DSONameService; let bitstream: Bitstream; +let bitstreamID: string; let selectedFormat: BitstreamFormat; let allFormats: BitstreamFormat[]; let router: Router; +let bundleDataService; +let bundleWithCurrentPrimary: Bundle; +let bundleWithDifferentPrimary: Bundle; +let bundleWithNoPrimary: Bundle; let comp: EditBitstreamPageComponent; let fixture: ComponentFixture; @@ -45,6 +52,12 @@ let fixture: ComponentFixture; describe('EditBitstreamPageComponent', () => { beforeEach(() => { + bitstreamID = 'current-bitstream-id'; + bundleWithCurrentPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': bitstreamID }); + bundleWithDifferentPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': '12345-abcde-54321-edcba' }); + bundleWithNoPrimary = Object.assign(new Bundle(), { 'primaryBitstreamUUID': null }); + bundleDataService = jasmine.createSpyObj('BundleDataService', ['patch']); + bundleDataService.patch.and.callFake((a, b) => createSuccessfulRemoteDataObject$(a)); allFormats = [ Object.assign({ id: '1', @@ -53,7 +66,7 @@ describe('EditBitstreamPageComponent', () => { supportLevel: BitstreamFormatSupportLevel.Unknown, mimetype: 'application/octet-stream', _links: { - self: {href: 'format-selflink-1'} + self: { href: 'format-selflink-1' } } }), Object.assign({ @@ -63,7 +76,7 @@ describe('EditBitstreamPageComponent', () => { supportLevel: BitstreamFormatSupportLevel.Known, mimetype: 'image/png', _links: { - self: {href: 'format-selflink-2'} + self: { href: 'format-selflink-2' } } }), Object.assign({ @@ -73,7 +86,7 @@ describe('EditBitstreamPageComponent', () => { supportLevel: BitstreamFormatSupportLevel.Known, mimetype: 'image/gif', _links: { - self: {href: 'format-selflink-3'} + self: { href: 'format-selflink-3' } } }) ] as BitstreamFormat[]; @@ -112,6 +125,8 @@ describe('EditBitstreamPageComponent', () => { const bundleName = 'ORIGINAL'; bitstream = Object.assign(new Bitstream(), { + uuid: bitstreamID, + id: bitstreamID, metadata: { 'dc.description': [ { @@ -155,17 +170,19 @@ describe('EditBitstreamPageComponent', () => { imports: [TranslateModule.forRoot(), RouterTestingModule], declarations: [EditBitstreamPageComponent, FileSizePipe, VarDirective], providers: [ - {provide: NotificationsService, useValue: notificationsService}, - {provide: DynamicFormService, useValue: formService}, - {provide: ActivatedRoute, + { provide: NotificationsService, useValue: notificationsService }, + { provide: DynamicFormService, useValue: formService }, + { + provide: ActivatedRoute, useValue: { - data: observableOf({bitstream: createSuccessfulRemoteDataObject(bitstream)}), - snapshot: {queryParams: {}} + data: observableOf({ bitstream: createSuccessfulRemoteDataObject(bitstream) }), + snapshot: { queryParams: {} } } }, - {provide: BitstreamDataService, useValue: bitstreamService}, - {provide: DSONameService, useValue: dsoNameService}, - {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, + { provide: BitstreamDataService, useValue: bitstreamService }, + { provide: DSONameService, useValue: dsoNameService }, + { provide: BitstreamFormatDataService, useValue: bitstreamFormatService }, + { provide: BundleDataService, useValue: bundleDataService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -203,6 +220,27 @@ describe('EditBitstreamPageComponent', () => { it('should put the \"New Format\" input on invisible', () => { expect(comp.formLayout.newFormat.grid.host).toContain('invisible'); }); + describe('when the bitstream is the primary bitstream on the bundle', () => { + beforeEach(() => { + (comp as any).bundle = bundleWithCurrentPrimary; + comp.setForm(); + rawForm = comp.formGroup.getRawValue(); + + }); + it('should enable the primary bitstream toggle', () => { + expect(rawForm.fileNamePrimaryContainer.primaryBitstream).toEqual(true); + }); + }); + describe('when the bitstream is not the primary bitstream on the bundle', () => { + beforeEach(() => { + (comp as any).bundle = bundleWithDifferentPrimary; + comp.setForm(); + rawForm = comp.formGroup.getRawValue(); + }); + it('should disable the primary bitstream toggle', () => { + expect(rawForm.fileNamePrimaryContainer.primaryBitstream).toEqual(false); + }); + }); }); describe('when an unknown format is selected', () => { @@ -216,6 +254,95 @@ describe('EditBitstreamPageComponent', () => { }); describe('onSubmit', () => { + describe('when the primaryBitstream changed', () => { + describe('to the current bitstream', () => { + beforeEach(() => { + const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: true } }); + spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); + }); + + describe('from a different primary bitstream', () => { + beforeEach(() => { + (comp as any).bundle = bundleWithDifferentPrimary; + comp.onSubmit(); + }); + + it('should call patch with a replace operation', () => { + expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithDifferentPrimary, [jasmine.objectContaining({ + op: 'replace' + })]); + }); + + it('should call patch with the correct bitstream uuid', () => { + expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithDifferentPrimary, [jasmine.objectContaining({ + value: bitstreamID + })]); + }); + }); + describe('from no primary bitstream', () => { + beforeEach(() => { + (comp as any).bundle = bundleWithNoPrimary; + comp.onSubmit(); + }); + + it('should call patch with an add operation', () => { + expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithNoPrimary, [jasmine.objectContaining({ + op: 'add' + })]); + }); + + it('should call patch with the correct bitstream uuid', () => { + expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithNoPrimary, [jasmine.objectContaining({ + value: bitstreamID + })]); + }); + }); + }); + describe('to no primary bitstream', () => { + beforeEach(() => { + const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: false } }); + spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); + }); + + describe('from the current bitstream', () => { + beforeEach(() => { + (comp as any).bundle = bundleWithCurrentPrimary; + comp.onSubmit(); + }); + + it('should call patch with a remove operation', () => { + expect(bundleDataService.patch).toHaveBeenCalledWith(bundleWithCurrentPrimary, [jasmine.objectContaining({ + op: 'remove' + })]); + }); + }); + }); + }); + describe('when the primaryBitstream did not changed', () => { + describe('the current bitstream stayed the primary bitstream', () => { + beforeEach(() => { + const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: true } }); + spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); + (comp as any).bundle = bundleWithCurrentPrimary; + comp.onSubmit(); + }); + it('should not call patch on the bundle data service', () => { + expect(bundleDataService.patch).not.toHaveBeenCalled(); + }); + }); + describe('the bitstream was not and did not become the primary bitstream', () => { + beforeEach(() => { + const rawValue = Object.assign(comp.formGroup.getRawValue(), { fileNamePrimaryContainer: { primaryBitstream: false } }); + spyOn(comp.formGroup, 'getRawValue').and.returnValue(rawValue); + (comp as any).bundle = bundleWithDifferentPrimary; + comp.onSubmit(); + }); + it('should not call patch on the bundle data service', () => { + expect(bundleDataService.patch).not.toHaveBeenCalled(); + }); + }); + }); + describe('when selected format hasn\'t changed', () => { beforeEach(() => { comp.onSubmit(); @@ -357,6 +484,7 @@ describe('EditBitstreamPageComponent', () => { {provide: BitstreamDataService, useValue: bitstreamService}, {provide: DSONameService, useValue: dsoNameService}, {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, + { provide: BundleDataService, useValue: bundleDataService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] @@ -371,7 +499,6 @@ describe('EditBitstreamPageComponent', () => { spyOn(router, 'navigate'); }); - describe('on startup', () => { let rawForm; @@ -475,6 +602,7 @@ describe('EditBitstreamPageComponent', () => { {provide: BitstreamDataService, useValue: bitstreamService}, {provide: DSONameService, useValue: dsoNameService}, {provide: BitstreamFormatDataService, useValue: bitstreamFormatService}, + { provide: BundleDataService, useValue: bundleDataService }, ChangeDetectorRef ], schemas: [NO_ERRORS_SCHEMA] diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 8e63ec939f..3c3965a70a 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -52,6 +52,7 @@ import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; +import { BundleDataService } from '../../core/data/bundle-data.service'; @Component({ selector: 'ds-edit-bitstream-page', @@ -191,19 +192,19 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { * The Dynamic Input Model for the iiif label */ iiifLabelModel = new DsDynamicInputModel({ - hasSelectableMetadata: false, metadataFields: [], repeatable: false, submissionId: '', - id: 'iiifLabel', - name: 'iiifLabel' - }, + hasSelectableMetadata: false, metadataFields: [], repeatable: false, submissionId: '', + id: 'iiifLabel', + name: 'iiifLabel' + }, { - grid: { - host: 'col col-lg-6 d-inline-block' - } + grid: { + host: 'col col-lg-6 d-inline-block' + } }); iiifLabelContainer = new DynamicFormGroupModel({ id: 'iiifLabelContainer', group: [this.iiifLabelModel] - },{ + }, { grid: { host: 'form-row' } @@ -213,7 +214,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { hasSelectableMetadata: false, metadataFields: [], repeatable: false, submissionId: '', id: 'iiifToc', name: 'iiifToc', - },{ + }, { grid: { host: 'col col-lg-6 d-inline-block' } @@ -221,7 +222,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { iiifTocContainer = new DynamicFormGroupModel({ id: 'iiifTocContainer', group: [this.iiifTocModel] - },{ + }, { grid: { host: 'form-row' } @@ -231,7 +232,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { hasSelectableMetadata: false, metadataFields: [], repeatable: false, submissionId: '', id: 'iiifWidth', name: 'iiifWidth', - },{ + }, { grid: { host: 'col col-lg-6 d-inline-block' } @@ -239,7 +240,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { iiifWidthContainer = new DynamicFormGroupModel({ id: 'iiifWidthContainer', group: [this.iiifWidthModel] - },{ + }, { grid: { host: 'form-row' } @@ -249,7 +250,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { hasSelectableMetadata: false, metadataFields: [], repeatable: false, submissionId: '', id: 'iiifHeight', name: 'iiifHeight' - },{ + }, { grid: { host: 'col col-lg-6 d-inline-block' } @@ -257,7 +258,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { iiifHeightContainer = new DynamicFormGroupModel({ id: 'iiifHeightContainer', group: [this.iiifHeightModel] - },{ + }, { grid: { host: 'form-row' } @@ -280,11 +281,11 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.fileNameModel, this.primaryBitstreamModel ] - },{ - grid: { - host: 'form-row' - } - }), + }, { + grid: { + host: 'form-row' + } + }), new DynamicFormGroupModel({ id: 'descriptionContainer', group: [ @@ -380,13 +381,23 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { */ isIIIF = false; - /** * Array to track all subscriptions and unsubscribe them onDestroy * @type {Array} */ protected subs: Subscription[] = []; + /** + * The parent bundle containing the Bitstream + * @private + */ + private bundle: Bundle; + + /** + * Path to patch primary bitstream on the bundle + * @private + */ + private readonly primaryBitstreamPath = '/primarybitstream'; constructor(private route: ActivatedRoute, private router: Router, @@ -397,7 +408,8 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { private bitstreamService: BitstreamDataService, private dsoNameService: DSONameService, private notificationsService: NotificationsService, - private bitstreamFormatService: BitstreamFormatDataService) { + private bitstreamFormatService: BitstreamFormatDataService, + private bundleService: BundleDataService) { } /** @@ -423,13 +435,20 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { getRemoteDataPayload() ); + const bundle$ = bitstream$.pipe( + switchMap((bitstream: Bitstream) => bitstream.bundle), + getFirstSucceededRemoteDataPayload(), + ); + this.subs.push( observableCombineLatest( bitstream$, - allFormats$ - ).subscribe(([bitstream, allFormats]) => { + allFormats$, + bundle$ + ).subscribe(([bitstream, allFormats, bundle]) => { this.bitstream = bitstream as Bitstream; this.formats = allFormats.page; + this.bundle = bundle; this.setIiifStatus(this.bitstream); }) ); @@ -437,8 +456,8 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.subs.push( this.translate.onLangChange .subscribe(() => { - this.updateFieldTranslations(); - }) + this.updateFieldTranslations(); + }) ); } @@ -460,7 +479,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.formGroup.patchValue({ fileNamePrimaryContainer: { fileName: bitstream.name, - primaryBitstream: false + primaryBitstream: this.bundle.primaryBitstreamUUID === bitstream.uuid }, descriptionContainer: { description: bitstream.firstMetadataValue('dc.description') @@ -563,6 +582,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { } } + /** * Check for changes against the bitstream and send update requests to the REST API */ @@ -571,9 +591,45 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { const updatedBitstream = this.formToBitstream(updatedValues); const selectedFormat = this.formats.find((f: BitstreamFormat) => f.id === updatedValues.formatContainer.selectedFormat); const isNewFormat = selectedFormat.id !== this.originalFormat.id; + const isPrimary = updatedValues.fileNamePrimaryContainer.primaryBitstream; + const wasPrimary = this.bundle.primaryBitstreamUUID === this.bitstream.uuid; let bitstream$; + let bundle$: Observable; + if (wasPrimary !== isPrimary) { + let patchOperation; + // No longer primary bitstream: remove + if (wasPrimary) { + patchOperation = { + path: this.primaryBitstreamPath, + op: 'remove' + }; + } else { + // Has become primary bitstream + // If it already had a value: replace, otherwise: add + patchOperation = { + path: this.primaryBitstreamPath, + op: hasValue(this.bundle.primaryBitstreamUUID) ? 'replace' : 'add', + value: this.bitstream.uuid + }; + } + bundle$ = this.bundleService.patch(this.bundle, [patchOperation]).pipe( + getFirstCompletedRemoteData(), + map((bundleResponse: RemoteData) => { + if (hasValue(bundleResponse) && bundleResponse.hasFailed) { + this.notificationsService.error( + this.translate.instant(this.NOTIFICATIONS_PREFIX + 'error.primaryBitstream.title'), + bundleResponse.errorMessage + ); + } else { + return bundleResponse.payload; + } + }) + ); + } else { + bundle$ = observableOf(this.bundle); + } if (isNewFormat) { bitstream$ = this.bitstreamService.updateFormat(this.bitstream, selectedFormat).pipe( getFirstCompletedRemoteData(), @@ -592,7 +648,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { bitstream$ = observableOf(this.bitstream); } - bitstream$.pipe( + combineLatest([bundle$, bitstream$]).pipe( switchMap(() => { return this.bitstreamService.update(updatedBitstream).pipe( getFirstSucceededRemoteDataPayload() @@ -633,11 +689,11 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { } else { Metadata.setFirstValue(newMetadata, this.IIIF_LABEL_METADATA, rawForm.iiifLabelContainer.iiifLabel); } - if (isEmpty(rawForm.iiifTocContainer.iiifToc)) { - delete newMetadata[this.IIIF_TOC_METADATA]; - } else { + if (isEmpty(rawForm.iiifTocContainer.iiifToc)) { + delete newMetadata[this.IIIF_TOC_METADATA]; + } else { Metadata.setFirstValue(newMetadata, this.IIIF_TOC_METADATA, rawForm.iiifTocContainer.iiifToc); - } + } if (isEmpty(rawForm.iiifWidthContainer.iiifWidth)) { delete newMetadata[this.IMAGE_WIDTH_METADATA]; } else { @@ -672,10 +728,10 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { this.router.navigate([getEntityEditRoute(this.entityType, this.itemId), 'bitstreams']); } else { this.bitstream.bundle.pipe(getFirstSucceededRemoteDataPayload(), - mergeMap((bundle: Bundle) => bundle.item.pipe(getFirstSucceededRemoteDataPayload()))) - .subscribe((item) => { - this.router.navigate(([getItemEditRoute(item), 'bitstreams'])); - }); + mergeMap((bundle: Bundle) => bundle.item.pipe(getFirstSucceededRemoteDataPayload()))) + .subscribe((item) => { + this.router.navigate(([getItemEditRoute(item), 'bitstreams'])); + }); } } @@ -701,11 +757,11 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { const isEnabled$ = this.bitstream.bundle.pipe( getFirstSucceededRemoteData(), map((bundle: RemoteData) => bundle.payload.item.pipe( - getFirstSucceededRemoteData(), - map((item: RemoteData) => - (item.payload.firstMetadataValue('dspace.iiif.enabled') && - item.payload.firstMetadataValue('dspace.iiif.enabled').match(regexIIIFItem) !== null) - )))); + getFirstSucceededRemoteData(), + map((item: RemoteData) => + (item.payload.firstMetadataValue('dspace.iiif.enabled') && + item.payload.firstMetadataValue('dspace.iiif.enabled').match(regexIIIFItem) !== null) + )))); const iiifSub = combineLatest( isImage$, diff --git a/src/app/core/shared/bundle.model.ts b/src/app/core/shared/bundle.model.ts index 36b7012e47..72c466d2d6 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/src/app/core/shared/bundle.model.ts @@ -1,4 +1,4 @@ -import { deserialize, inheritSerialization } from 'cerialize'; +import { autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; @@ -29,6 +29,12 @@ export class Bundle extends DSpaceObject { item: HALLink; }; + /** + * The ID of the primaryBitstream of this Bundle + */ + @autoserializeAs('primarybitstream') + primaryBitstreamUUID: string; + /** * The primary Bitstream of this Bundle * Will be undefined unless the primaryBitstream {@link HALLink} has been resolved. From 99dd9d2de9911a0901f6ba741b09686a9456e145 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Tue, 25 Apr 2023 17:55:20 +0200 Subject: [PATCH 532/833] 101127: Take activeModal out of VocabularyTreeviewComponent --- .../vocabulary-treeview-modal.component.html | 4 ++-- .../vocabulary-treeview-modal.component.ts | 8 ++++++++ .../vocabulary-treeview/vocabulary-treeview.component.ts | 8 +------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html index 8df07a3879..71eb8e1476 100644 --- a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.html @@ -9,8 +9,8 @@ + [multiSelect]="multiSelect" + (select)="onSelect($event)">
    diff --git a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts index fef230d4d7..c6b0bf20fe 100644 --- a/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts +++ b/src/app/shared/form/vocabulary-treeview-modal/vocabulary-treeview-modal.component.ts @@ -1,6 +1,7 @@ import { Component, Input } from '@angular/core'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { VocabularyOptions } from '../../../core/submission/vocabularies/models/vocabulary-options.model'; +import { VocabularyEntryDetail } from '../../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; @Component({ selector: 'ds-vocabulary-treeview-modal', @@ -40,4 +41,11 @@ export class VocabularyTreeviewModalComponent { constructor( public activeModal: NgbActiveModal, ) { } + + /** + * Method called on entry select + */ + onSelect(item: VocabularyEntryDetail) { + this.activeModal.close(item); + } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index b9c30e6343..572074d644 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -1,7 +1,6 @@ import { FlatTreeControl } from '@angular/cdk/tree'; import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; import { map } from 'rxjs/operators'; import { Observable, Subscription } from 'rxjs'; import { Store } from '@ngrx/store'; @@ -44,11 +43,6 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { */ @Input() selectedItems: string[] = []; - /** - * The active modal - */ - @Input() activeModal?: NgbActiveModal; - /** * Whether to allow selecting multiple values with checkboxes */ @@ -252,7 +246,7 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { */ onSelect(item: VocabularyEntryDetail) { this.selectedItems.push(item.id); - this.activeModal.close(item); + this.select.emit(item); } /** From 08b271095facf3f93600da30fd232f62f3cbe5ef Mon Sep 17 00:00:00 2001 From: tuanvu Date: Wed, 26 Apr 2023 14:46:32 +0700 Subject: [PATCH 533/833] Internalization (i18n): Vietnamese translation! --- src/assets/i18n/vi.json5 | 2667 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 2667 insertions(+) create mode 100644 src/assets/i18n/vi.json5 diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 new file mode 100644 index 0000000000..afc7ce4e3c --- /dev/null +++ b/src/assets/i18n/vi.json5 @@ -0,0 +1,2667 @@ +{ + "401.help": "Bạn không có quyền truy cập trang này. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", + "401.link.home-page": "Đi tới trang chủ", + "401.unauthorized": "không có quyền truy cập", + "403.forbidden": "không được phép truy cập", + "403.help": "Bạn không có quyền truy cập trang này. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", + "403.link.home-page": "Đi tới trang chủ", + "404.help": "Chúng tôi không tìm thấy trang mà bạn đang tìm kiếm. Trang này có thể đã được chuyển tới một địa chỉ khác hoặc đã bị xóa. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", + "404.link.home-page": "Đi tới trang chủ", + "404.page-not-found": "không tìm thấy trang", + "500.help": "Máy chủ tạm thời không thể phục vụ yêu cầu của bạn do đang trong giai đoạn bảo trì hoặc vấn đề về dung lượng. Vui lòng thử lại sau.", + "500.link.home-page": "Đi tới trang chủ", + "500.page-internal-server-error": "Dịch vụ không sẵn sàng", + + "access-status.embargo.listelement.badge": "Ngăn chặn", + "access-status.metadata.only.listelement.badge": "Chỉ siêu dữ liệu", + "access-status.open.access.listelement.badge": "Truy cập mở", + "access-status.restricted.listelement.badge": "Hạn chế", + "access-status.unknown.listelement.badge": "Không xác định", + + "admin.curation-tasks.breadcrumbs": "Thu thập các tác vụ hệ thống", + "admin.curation-tasks.header": "Thu thập các tác vụ hệ thống", + "admin.curation-tasks.title": "Thu thập các tác vụ hệ thống", + + "admin.registries.bitstream-formats.breadcrumbs": "Tạo định dạng", + "admin.registries.bitstream-formats.create.breadcrumbs": "Định dạng tệp tin", + "admin.registries.bitstream-formats.create.failure.content": "Đã xảy ra lỗi khi tạo định dạng tệp tin mới.", + "admin.registries.bitstream-formats.create.failure.head": "Không thành công", + "admin.registries.bitstream-formats.create.head": "Tạo định dạng tệp tin", + "admin.registries.bitstream-formats.create.new": "Thêm một định dạng tệp tin mới", + "admin.registries.bitstream-formats.create.success.content": "Định dạng tệp tin mới đã được tạo thành công.", + "admin.registries.bitstream-formats.create.success.head": "Thành công", + "admin.registries.bitstream-formats.delete.failure.amount": "Loại bỏ không thành công {{ amount }} định dạng", + "admin.registries.bitstream-formats.delete.failure.head": "Không thành công", + "admin.registries.bitstream-formats.delete.success.amount": "Loại bỏ thành công {{ amount }} định dạng", + "admin.registries.bitstream-formats.delete.success.head": "Thành công", + "admin.registries.bitstream-formats.description": "Danh sách các định dạng tệp tin này cung cấp thông tin về các định dạng đã biết và mức hỗ trợ của chúng.", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Định dạng tệp tin", + "admin.registries.bitstream-formats.edit.description.label": "Mô tả", + "admin.registries.bitstream-formats.edit.extensions.hint": "Tiện ích mở rộng là phần mở rộng tệp được sử dụng để tự động xác định định dạng của tệp được tải lên. Bạn có thể nhập một vài phần mở rộng cho mỗi định dạng.", + "admin.registries.bitstream-formats.edit.extensions.label": "Mở rộng tệp", + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Nhập một phần mở rộng tệp không có dấu chấm", + "admin.registries.bitstream-formats.edit.failure.content": "Đã xảy ra lỗi khi chỉnh sửa định dạng tệp tin.", + "admin.registries.bitstream-formats.edit.failure.head": "Không thành công", + "admin.registries.bitstream-formats.edit.head": "Định dạng tệp tin: {{ format }}", + "admin.registries.bitstream-formats.edit.internal.hint": "Các định dạng được đánh dấu là nội bộ sẽ được ẩn đối với người dùng và được sử dụng cho các mục đích quản trị.", + "admin.registries.bitstream-formats.edit.internal.label": "Nội bộ", + "admin.registries.bitstream-formats.edit.mimetype.hint": "Kiểu MIME được liên kết với định dạng này không nhất thiết phải là duy nhất.", + "admin.registries.bitstream-formats.edit.mimetype.label": "Kiểu MIME", + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Một tên duy nhất cho định dạng này (ví dụ: Microsoft Word XP hoặc Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.label": "Tên", + "admin.registries.bitstream-formats.edit.success.content": "Định dạng tệp tin đã được chỉnh sửa thành công.", + "admin.registries.bitstream-formats.edit.success.head": "Thành công", + "admin.registries.bitstream-formats.edit.supportLevel.hint": "Mức độ hỗ trợ mà đơn vị của bạn cam kết cho định dạng này.", + "admin.registries.bitstream-formats.edit.supportLevel.label": "Mức độ hỗ trợ", + "admin.registries.bitstream-formats.head": "Tạo định dạng tệp tin số", + "admin.registries.bitstream-formats.no-items": "Không có định dạng tệp tin nào để hiển thị.", + "admin.registries.bitstream-formats.table.delete": "Xóa các mục được chọn", + "admin.registries.bitstream-formats.table.deselect-all": "Bỏ chọn tất cả", + "admin.registries.bitstream-formats.table.id": "ID", + "admin.registries.bitstream-formats.table.internal": "nội bộ", + "admin.registries.bitstream-formats.table.mimetype": "Kiểu MIME", + "admin.registries.bitstream-formats.table.name": "Tên", + "admin.registries.bitstream-formats.table.return": "Quay lại", + "admin.registries.bitstream-formats.table.supportLevel.head": "Mức độ hỗ trợ", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Đã xác định", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Được hỗ trợ", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Không xác định", + "admin.registries.bitstream-formats.title": "Tạo định dạng tệp tin số", + "admin.registries.metadata.breadcrumbs": "Mẫu nhập liệu", + "admin.registries.metadata.description": "Tạo mẫu nhập liệu cho phép duy trì danh sách tất cả các trường thông tin mô tả có sẵn trong hệ thống. Các trường này có thể được phân ra cho nhiều lược đồ. Tuy nhiên DSpace yêu cầu đủ điều kiện cho lược đồ Dublin Core.", + "admin.registries.metadata.form.create": "Tạo lược đồ thông tin mô tả", + "admin.registries.metadata.form.edit": "Chỉnh sửa lược đồ thông tin mô tả", + "admin.registries.metadata.form.name": "Tên", + "admin.registries.metadata.form.namespace": "Tên miền", + "admin.registries.metadata.head": "Tạo mẫu nhập liệu", + "admin.registries.metadata.schemas.no-items": "Không có lược đồ thông tin mô tả nào để hiển thị.", + "admin.registries.metadata.schemas.table.delete": "Xóa các mục đã chọn", + "admin.registries.metadata.schemas.table.id": "ID", + "admin.registries.metadata.schemas.table.name": "Tên", + "admin.registries.metadata.schemas.table.namespace": "Tên miền", + "admin.registries.metadata.title": "Tạo mẫu nhập liệu", + "admin.registries.schema.breadcrumbs": "Lược đồ thông tin mô tả", + "admin.registries.schema.description": "Đây là lược đồ thông tin mô tả cho \"{{namespace}}\".", + "admin.registries.schema.fields.head": "Lược đồ các trường thông tin mô tả", + "admin.registries.schema.fields.no-items": "Không có trường thông tin mô tả nào để hiển thị.", + "admin.registries.schema.fields.table.delete": "Xóa các mục đã lựa chọn", + "admin.registries.schema.fields.table.field": "Trường", + "admin.registries.schema.fields.table.id": "ID", + "admin.registries.schema.fields.table.scopenote": "Ghi chú phạm vi", + "admin.registries.schema.form.create": "Tạo trường thông tin mô tả", + "admin.registries.schema.form.edit": "Chỉnh sửa trường thông tin mô tả", + "admin.registries.schema.form.element": "Yếu tố", + "admin.registries.schema.form.qualifier": "Đối tượng bổ trợ", + "admin.registries.schema.form.scopenote": "Ghi chú phạm vi", + "admin.registries.schema.head": "Lược đồ thông tin mô tả", + "admin.registries.schema.notification.created": "Tạo thành công lược đồ thông tin mô tả \"{{prefix}}\"", + "admin.registries.schema.notification.deleted.failure": "Xóa không thành công {{amount}} lược đồ thông tin mô tả", + "admin.registries.schema.notification.deleted.success": "Đã xóa thành công {{amount}} lược đồ thông tin mô tả", + "admin.registries.schema.notification.edited": "Chỉnh sửa thành công lược đồ thông tin mô tả \"{{prefix}}\"", + "admin.registries.schema.notification.failure": "Lỗi", + "admin.registries.schema.notification.field.created": "Tạo thành công trường thông tin mô tả \"{{field}}\"", + "admin.registries.schema.notification.field.deleted.failure": "Xóa không thành công {{amount}} trường thông tin mô tả", + "admin.registries.schema.notification.field.deleted.success": "Đã xóa thành công {{amount}} trường thông tin mô tả", + "admin.registries.schema.notification.field.edited": "Chỉnh sửa thành công trường thông tin mô tả \"{{field}}\"", + "admin.registries.schema.notification.success": "Thành công", + "admin.registries.schema.return": "Quay lại", + "admin.registries.schema.title": "Tạo lược đồ thông tin mô tả", + + "admin.access-control.epeople.actions.delete": "Xóa người dùng", + "admin.access-control.epeople.actions.impersonate": "Mạo danh người dùng", + "admin.access-control.epeople.actions.reset": "Cài lại mật khẩu", + "admin.access-control.epeople.actions.stop-impersonating": "Dừng mạo danh người dùng", + "admin.access-control.epeople.breadcrumbs": "Người dùng", + "admin.access-control.epeople.button.add": "Thêm người dùng", + "admin.access-control.epeople.button.see-all": "Duyệt toàn bộ", + "admin.access-control.epeople.form.canLogIn": "Có thể đăng nhập", + "admin.access-control.epeople.form.create": "Tạo người dùng", + "admin.access-control.epeople.form.edit": "Chỉnh sửa người dùng", + "admin.access-control.epeople.form.email": "E-mail", + "admin.access-control.epeople.form.emailHint": "Phải là địa chỉ e-mail hợp lệ", + "admin.access-control.epeople.form.firstName": "Tên", + "admin.access-control.epeople.form.goToGroups": "Thêm vào nhóm", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Thành viên của các nhóm:", + "admin.access-control.epeople.form.lastName": "Họ", + "admin.access-control.epeople.form.memberOfNoGroups": "Người dùng không là thành viên của bất kỳ nhóm nào", + "admin.access-control.epeople.form.notification.created.failure": "Tạo không thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Tạo không thành công người dùng \"{{name}}\" email \"{{email}}\" đã được sử dụng.", + "admin.access-control.epeople.form.notification.created.success": "Tạo thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Xóa không thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "Xóa thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure": "Chỉnh sửa không thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Chỉnh sửa không thành công người dùng \"{{name}}\" email \"{{email}}\" đã được sử dụng.", + "admin.access-control.epeople.form.notification.edited.success": "Chỉnh sửa thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.requireCertificate": "Khóa tài khoản", + "admin.access-control.epeople.form.return": "Quay lại", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.epeople.form.table.id": "ID", + "admin.access-control.epeople.form.table.name": "Tên", + "admin.access-control.epeople.head": "Người dùng", + "admin.access-control.epeople.no-items": "Không có người dùng nào để hiển thị.", + "admin.access-control.epeople.notification.deleted.failure": "Xóa không thành công người dùng: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "Xóa thành công người dùng: \"{{name}}\"", + "admin.access-control.epeople.notification.resetpassword.success": "Thiết lập lại mật khẩu thành công cho người dùng: \"{{name}}\"", + "admin.access-control.epeople.search.button": "Tìm kiếm", + "admin.access-control.epeople.search.head": "Tìm kiếm", + "admin.access-control.epeople.search.placeholder": "Tìm kiếm người dùng...", + "admin.access-control.epeople.search.scope.email": "E-mail (chính xác)", + "admin.access-control.epeople.search.scope.metadata": "Siêu dữ liệu", + "admin.access-control.epeople.table.edit": "Chỉnh sửa", + "admin.access-control.epeople.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Bạn không có quyền chỉnh sửa nhóm này", + "admin.access-control.epeople.table.edit.buttons.remove": "Xóa \"{{name}}\"", + "admin.access-control.epeople.table.email": "E-mail (chính xác)", + "admin.access-control.epeople.table.id": "ID", + "admin.access-control.epeople.table.name": "Tên", + "admin.access-control.epeople.title": "Người dùng", + "admin.access-control.groups.addGroup.breadcrumbs": "Tạo nhóm người dùng", + "admin.access-control.groups.breadcrumbs": "Nhóm người dùng", + "admin.access-control.groups.button.add": "Thêm nhóm người dùng", + "admin.access-control.groups.button.see-all": "Duyệt toàn bộ", + "admin.access-control.groups.form.actions.delete": "Xóa nhóm người dùng", + "admin.access-control.groups.form.alert.permanent": "Nhóm này là cố định vì vậy nó không thể bị chỉnh sửa hoặc xóa. Bạn vẫn có thể thêm và loại bỏ thành viên trong nhóm tại trang này.", + "admin.access-control.groups.form.alert.workflowGroup": "Không thể chỉnh sửa hoặc xóa nhóm này vì nó tương ứng với một vai trò trong quá trình gửi và quy trình xử lý trong \"{{name}}\" {{comcol}}. Bạn có thể xóa nó từ thẻ assign roles<\/a> trên trang chỉnh sửa {{comcol}}. Bạn vẫn có thể thêm và loại bỏ thành viên nhóm bằng trang này.\"", + "admin.access-control.groups.form.delete-group.modal.cancel": "Hủy", + "admin.access-control.groups.form.delete-group.modal.confirm": "Xóa", + "admin.access-control.groups.form.delete-group.modal.header": "Xóa nhóm người dùng \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info": "Bạn có chắc chắn rằng bạn muốn xóa nhóm người dùng \"{{ dsoName }}\"", + "admin.access-control.groups.form.groupCommunity": "Đơn vị hoặc Bộ sưu tập", + "admin.access-control.groups.form.groupDescription": "Mô tả", + "admin.access-control.groups.form.groupName": "Tên nhóm người dùng", + "admin.access-control.groups.form.head.create": "Tạo nhóm người dùng", + "admin.access-control.groups.form.head.edit": "Chỉnh sửa nhóm người dùng", + "admin.access-control.groups.form.members-list.button.see-all": "Duyệt toàn bộ", + "admin.access-control.groups.form.members-list.head": "Người dùng", + "admin.access-control.groups.form.members-list.headMembers": "Các thành viên hiện tại", + "admin.access-control.groups.form.members-list.no-items": "Không người dùng nào được tìm thấy trong tìm kiếm", + "admin.access-control.groups.form.members-list.no-members-yet": "Chưa có thành viên trong nhóm tìm kiếm và thêm thành viên vào nhóm.", + "admin.access-control.groups.form.members-list.notification.failure.addMember": "Thêm không thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Xóa không thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Hiện tại không có nhóm hoạt động gửi một tên trước.", + "admin.access-control.groups.form.members-list.notification.success.addMember": "Thêm thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Xóa thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.search.button": "Tìm kiếm", + "admin.access-control.groups.form.members-list.search.head": "Thêm người dùng", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (chính xác)", + "admin.access-control.groups.form.members-list.search.scope.metadata": "Siêu dữ liệu", + "admin.access-control.groups.form.members-list.table.edit": "Loại bỏ \/ Thêm", + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Thêm thành viên với tên \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Loại bỏ thành viên với tên \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.id": "ID", + "admin.access-control.groups.form.members-list.table.identity": "Định danh", + "admin.access-control.groups.form.members-list.table.name": "Tên", + "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.notification.created.failure": "Tạo không thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Tạo không thành công nhóm người dùng với tên: \"{{name}}\" đảm bảo tên này chưa được sử dụng\"", + "admin.access-control.groups.form.notification.created.success": "Tạo thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.notification.deleted.failure.content": "Nguyên nhân: \"{{ cause }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title": "Xóa không thành công nhóm người dùng \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.success": "Xóa thành công nhóm người dùng \"{{ name }}\"", + "admin.access-control.groups.form.notification.edited.failure": "Chỉnh sửa không thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Tên \"{{name}}\" đã được sử dụng!\"", + "admin.access-control.groups.form.notification.edited.success": "Chỉnh sửa thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.return": "Quay lại", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Duyệt toàn bộ", + "admin.access-control.groups.form.subgroups-list.head": "Nhóm người dùng", + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Nhóm người dùng con hiện tại", + "admin.access-control.groups.form.subgroups-list.no-items": "Không tìm thấy nhóm nào có tên hoặc UUID như vậy", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Chưa có nhóm người dùng con nào trong nhóm.", + "admin.access-control.groups.form.subgroups-list.notification.failure": "Đã xảy ra sự cố: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Thêm không thành công nhóm người dùng con: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Xóa không thành công nhóm người dùng con: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Hiện tại không có nhóm hoạt động gửi một tên trước.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Đây là nhóm hiện tại không thể thêm được.", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Thêm thành công nhóm người dùng con: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Loại bỏ thành công nhóm người dùng: \"{{name}}\" ra khỏi nhóm", + "admin.access-control.groups.form.subgroups-list.search.button": "Tìm kiếm", + "admin.access-control.groups.form.subgroups-list.search.head": "Thêm nhóm người dùng con", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.groups.form.subgroups-list.table.edit": "Loại bỏ \/ Thêm", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Thêm nhóm người dùng con với tên \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Loại bỏ nhóm người dùng con với tên \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Nhóm người dùng hiện tại", + "admin.access-control.groups.form.subgroups-list.table.id": "ID", + "admin.access-control.groups.form.subgroups-list.table.name": "Tên", + "admin.access-control.groups.head": "Nhóm người dùng", + "admin.access-control.groups.no-items": "Không tìm thấy nhóm nào có tên hoặc UUID như vậy", + "admin.access-control.groups.notification.deleted.failure.content": "Nguyên nhân: \"{{cause}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Xóa không thành công nhóm \"{{name}}\"", + "admin.access-control.groups.notification.deleted.success": "Xóa thành công nhóm \"{{name}}\"", + "admin.access-control.groups.search.button": "Tìm kiếm", + "admin.access-control.groups.search.head": "Tìm kiếm nhóm người dùng", + "admin.access-control.groups.search.placeholder": "Tìm kiếm nhóm người dùng...", + "admin.access-control.groups.singleGroup.breadcrumbs": "Chỉnh sửa nhóm người dùng", + "admin.access-control.groups.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.groups.table.edit": "Chỉnh sửa", + "admin.access-control.groups.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", + "admin.access-control.groups.table.edit.buttons.remove": "Xóa \"{{name}}\"", + "admin.access-control.groups.table.id": "ID", + "admin.access-control.groups.table.members": "Thành viên", + "admin.access-control.groups.table.name": "Tên", + "admin.access-control.groups.title": "Nhóm người dùng", + "admin.access-control.groups.title.addGroup": "Tạo nhóm người dùng", + "admin.access-control.groups.title.singleGroup": "Chỉnh sửa nhóm người dùng", + + "admin.search.breadcrumbs": "Tìm kiếm quản trị", + "admin.search.collection.edit": "Chỉnh sửa", + "admin.search.community.edit": "Chỉnh sửa", + "admin.search.item.delete": "Xóa", + "admin.search.item.edit": "Chỉnh sửa", + "admin.search.item.make-private": "Đặt làm tài liệu cá nhân", + "admin.search.item.make-public": "Đặt làm tài liệu công cộng", + "admin.search.item.move": "Di chuyển", + "admin.search.item.reinstate": "Khôi phục", + "admin.search.item.withdraw": "Ẩn", + "admin.search.title": "Tìm kiếm quản trị", + + "administrativeView.search.results.head": "Tìm kiếm quản trị", + + "admin.workflow.breadcrumbs": "Quản trị luồng công việc", + "admin.workflow.title": "Quản trị luồng công việc", + "admin.workflow.item.workflow": "Luồng công việc", + "admin.workflow.item.workspace": "Workspace", + "admin.workflow.item.delete": "Xóa", + "admin.workflow.item.send-back": "Gửi trở lại", + "admin.workflow.item.policies": "Policies", + "admin.workflow.item.supervision": "Supervision", + + "admin.batch-import.breadcrumbs": "Nhập dữ liệu theo lô", + "admin.batch-import.page.dropMsg": "Kéo thả file ZIP để nhập vào", + "admin.batch-import.page.dropMsgReplace": "Kéo thả để thay thế file ZIP cần nhập vào", + "admin.batch-import.page.error.addFile": "Chọn file Zip đầu tiên!", + "admin.batch-import.page.header": "Nhập dữ liệu theo lô", + "admin.batch-import.page.help": "Chọn Bộ sưu tập để nhập dữ liệu. Sau đó kéo thả hoặc duyệt tới tệp tin định dạng zip có chứa các tài liệu cần nhập vào.", + "admin.batch-import.page.remove": "xóa", + "admin.batch-import.title": "Nhập dữ liệu theo lô", + "admin.batch-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra file ZIP tải lên\", hệ thống sẽ chạy một tiến trình kiểm tra việc nhập dữ liệu theo lô thay vì đổ trực tiếp dữ liệu lên hệ thống. Việc này giúp cán bộ xác nhận lại kết quả của quy trình nhập trước khi nhập dữ liệu chính thức. Bỏ chọn tùy chọn này để đổ lô tài liệu lên hệ thống.", + + "admin.metadata-import.breadcrumbs": "Nhập thông tin mô tả", + "admin.metadata-import.page.button.proceed": "Tiếp tục", + "admin.metadata-import.page.button.return": "Quay lại", + "admin.metadata-import.page.button.select-collection": "Chọn Bộ sưu tập", + "admin.metadata-import.page.dropMsg": "Thả một tệp CSV để nhập thông tin mô tả", + "admin.metadata-import.page.dropMsgReplace": "Thả một tệp CSV để nhập thông tin mô tả thay thế", + "admin.metadata-import.page.error.addFile": "Lựa chọn tệp trước!", + "admin.metadata-import.page.header": "Nhập thông tin mô tả", + "admin.metadata-import.page.help": "Bạn có thể thả hoặc duyệt tới tệp CSV chứa hàng loạt các thông tin mô tả tại đây", + "admin.metadata-import.page.validateOnly": "Kiểm tra nhập lô siêu dữ liệu", + "admin.metadata-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra nhập lô siêu dữ liệu\", hệ thống sẽ chạy một tiến trình kiểm tra nhập lô siêu dữ liệu thay vì đổ trực tiếp dữ liệu lên hệ thống. Bỏ chọn tùy chọn này để tiến hành nhập dữ liệu chính thức.", + "admin.metadata-import.title": "Nhập thông tin mô tả", + + "advanced-workflow-action.rating.form.rating.label": "Xếp hạng", + "advanced-workflow-action.rating.form.rating.error": "Bạn phải đánh giá tài liệu/ thực thế này", + "advanced-workflow-action.rating.form.review.label": "Kiểm duyệt", + "advanced-workflow-action.rating.form.review.error": "Bạn phải nhập nội dung đánh giá để gửi bản xếp hạng này", + "advanced-workflow-action.rating.description": "Vui lòng chọn một xếp hạng bên dưới" + "advanced-workflow-action.rating.description-requiredDescription": "Vui lòng chọn xếp hạng bên dưới và thêm đánh giá", + "advanced-workflow-action.select-reviewer.description-single": "Vui lòng chọn một người kiểm duyệt dưới đây trước khi tải tài liệu lên", + "advanced-workflow-action.select-reviewer.description-multiple": "Vui lòng chọn một hoặc nhiều người kiểm duyệt dưới đây trước khi tải tài liệu lên", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Người dùng", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Thêm người dùng", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Duyệt tất cả", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Các thành viên hiện tại", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Siêu dữ liệu", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Tìm kiếm", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Loại bỏ / Thêm", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Loại bỏ người dùng \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Thêm thành công thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Không thể thêm thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Xóa thành công thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Không thể xóa thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Thêm thành viên \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Không có nhóm hoạt động, gửi tên trước.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Chưa có thành viên nào trong nhóm, tìm kiếm để thêm.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Không tìm thấy người dùng", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", + + "auth.errors.invalid-user": "Địa chỉ email hoặc mật khẩu không hợp lệ.", + + "auth.messages.expired": "Phiên của bạn đã hết hạn. Xin vui lòng đăng nhập lại.", + "auth.messages.token-refresh-failed": "Làm mới mã token phiên làm việc của bạn không thành công. Vui lòng đăng nhập lại.", + + "bitstream.download.page": "Đang tải xuống {{bitstream}}... ", + "bitstream.download.page.back": "Quay lại", + + "bitstream.edit.authorizations.link": "Chỉnh sửa chính sách của tệp tin", + "bitstream.edit.authorizations.title": "Chỉnh sửa chính sách của tệp tin", + "bitstream.edit.bitstream": "Tệp tin:", + "bitstream.edit.form.description.hint": "Tùy chọn cung cấp mô tả ngắn gọn về tệp ví dụ \"Bài báo chính\" or \"Dữ liệu đọc thử nghiệm\".", + "bitstream.edit.form.description.label": "Mô tả", + "bitstream.edit.form.embargo.hint": "Ngày đầu tiên được phép truy cập. Ngày này không thể được chỉnh sửa trên biểu mẫu này. Để thiết lập một ngày ngừng phục vụ tệp tin này đi tới thẻ Trạng thái tài liệu nhấp Phân quyền... tạo hoặc chỉnh sửa quyền ĐỌC của tệp tin và thiết lập Ngày bắt đầu như mong muốn.", + "bitstream.edit.form.embargo.label": "Ngừng phục vụ cho tới ngày", + "bitstream.edit.form.fileName.hint": "Thay đổi tên tệp cho tệp tin. Lưu ý rằng điều này sẽ thay đổi hiển thị URL tệp tin nhưng các liên kết cũ sẽ vẫn phân giải miễn là ID trình tự không thay đổi.", + "bitstream.edit.form.fileName.label": "Tên tệp", + "bitstream.edit.form.iiifHeight.hint": "Chiều cao của khung thường phải khớp với chiều cao của hình ảnh", + "bitstream.edit.form.iiifHeight.label": "Chiều cao ảnh", + "bitstream.edit.form.iiifLabel.hint": "Tên cho hình ảnh này. Nếu không được cung cấp tên mặc định sẽ được sử dụng.", + "bitstream.edit.form.iiifLabel.label": "Tên", + "bitstream.edit.form.iiifToc.hint": "Thêm mục lục mới", + "bitstream.edit.form.iiifToc.label": "Mục lục", + "bitstream.edit.form.iiifWidth.hint": "Chiều rộng của khung thường phải khớp với chiều rộng của hình", + "bitstream.edit.form.iiifWidth.label": "Chiều rộng khung", + "bitstream.edit.form.newFormat.hint": "Ứng dụng bạn đã sử dụng để tạo tệp và thông tin phiên bản (ví dụ \"ACMESoft SuperApp phiên bản 1.5\").", + "bitstream.edit.form.newFormat.label": "Mô tả định dạng mới", + "bitstream.edit.form.primaryBitstream.label": "Tệp tin chính", + "bitstream.edit.form.selectedFormat.hint": "Nếu định dạng không có trong danh sách trên chọn \"định dạng không có trong danh sách\" trên và mô tả nó dưới mục\"Mô tả định dạng mới\".", + "bitstream.edit.form.selectedFormat.label": "Định dạng đã chọn", + "bitstream.edit.form.selectedFormat.unknown": "Định dạng không có trong danh sách", + "bitstream.edit.notifications.error.format.title": "Đã xảy ra lỗi khi lưu định dạng của tệp tin", + "bitstream.edit.notifications.saved.content": "Thay đổi của bạn đối với tệp tin đã được lưu.", + "bitstream.edit.notifications.saved.title": "Đã lưu tệp tin", + "bitstream.edit.return": "Quay lại", + "bitstream.edit.title": "Chỉnh sửa tệp tin", + + "bitstream-request-a-copy.alert.canDownload1": "Bạn đã có quyền truy cập tệp tin này. Nếu muốn tải tệp tin click ", + "bitstream-request-a-copy.alert.canDownload2": "vào đây", + "bitstream-request-a-copy.allfiles.label": "Các tệp tin", + "bitstream-request-a-copy.email.error": "Vui lòng nhập một địa chỉ email hợp lệ.", + "bitstream-request-a-copy.email.hint": "Địa chỉ email này đã được sử dụng để gửi tệp tin.", + "bitstream-request-a-copy.email.label": "Địa chỉ email của bạn *", + "bitstream-request-a-copy.files-all-false.label": "Chỉ tệp tin được yêu cầu", + "bitstream-request-a-copy.files-all-true.label": "Tất cả tệp tin của tài liệu này đều bị hạn chế quyền truy cập", + "bitstream-request-a-copy.header": "Yêu cầu bản sao", + "bitstream-request-a-copy.intro": "Nhập các thông tin dưới đây để yêu cầu bản sao của tài liệu:", + "bitstream-request-a-copy.intro.bitstream.all": "Yêu cầu tất cả các tệp tin.", + "bitstream-request-a-copy.intro.bitstream.one": "Yêu cầu các tệp tin sau:", + "bitstream-request-a-copy.message.label": "Tin nhắn", + "bitstream-request-a-copy.name.error": "Tên là bắt buộc", + "bitstream-request-a-copy.name.label": "Tên*", + "bitstream-request-a-copy.return": "Quay lại", + "bitstream-request-a-copy.submit": "Yêu cầu bản sao", + "bitstream-request-a-copy.submit.error": "Đã xảy ra lỗi trong quá trình gửi yêu cầu tài liệu.", + "bitstream-request-a-copy.submit.success": "Yêu cầu tài liệu đã được gửi thành công.", + + "browse.back.all-results": "Tất cả kết quả", + + "browse.comcol.by.author": "Tác giả", + "browse.comcol.by.dateissued": "Năm xuất bản", + "browse.comcol.by.subject": "Chủ đề", + "browse.comcol.by.title": "Nhan đề", + "browse.comcol.head": "Duyệt", + + "browse.empty": "Không có tài liệu nào để hiển thị.", + + "browse.metadata.author": "Tác giả", + "browse.metadata.author.breadcrumbs": "Duyệt theo tác giả", + "browse.metadata.dateissued": "Năm xuất bản", + "browse.metadata.dateissued.breadcrumbs": "Duyệt theo năm xuất bản", + "browse.metadata.subject": "Chủ đề", + "browse.metadata.subject.breadcrumbs": "Duyệt theo chủ đề", + "browse.metadata.title": "Nhan đề", + "browse.metadata.title.breadcrumbs": "Duyệt theo nhan đề", + "browse.metadata.topic": "Topic", + "browse.metadata.type": "Kiểu tài liệu", + + "pagination.next.button": "Tiếp theo", + "pagination.previous.button": "Quay lại", + "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", + + "browse.startsWith.choose_year.label": "Chọn năm xuất bản", + "browse.startsWith.choose_year": "(Năm)", + "browse.startsWith.jump": "Chuyển tới một điểm trong chỉ mục:", + "browse.startsWith.months.april": "Tháng Tư", + "browse.startsWith.months.august": "Tháng Tám", + "browse.startsWith.months.december": "Tháng Mười hai", + "browse.startsWith.months.february": "Tháng Hai", + "browse.startsWith.months.january": "Tháng Một", + "browse.startsWith.months.july": "Tháng Bảy", + "browse.startsWith.months.june": "Tháng Sáu", + "browse.startsWith.months.march": "Tháng Ba", + "browse.startsWith.months.may": "Tháng Năm", + "browse.startsWith.months.none.label": "Chọn tháng xuất bản", + "browse.startsWith.months.none": "(Tháng)", + "browse.startsWith.months.november": "Tháng Mười một", + "browse.startsWith.months.october": "Tháng Mười", + "browse.startsWith.months.september": "Tháng Chín", + "browse.startsWith.submit": "Duyệt", + "browse.startsWith.type_date": "Hoặc nhập một ngày (năm-tháng) và nhấp \"Duyệt\"", + "browse.startsWith.type_date.label": "Hoặc nhập một ngày (năm-tháng) à nhấp Duyệt", + "browse.startsWith.type_text": "Nhập một vài ký tự đầu tiên và nhấp vào nút Duyệt", + + "browse.title": "Duyệt {{ collection }} theo {{ field }}{{ startsWith }} {{ value }}", + "browse.title.page": "Duyệt {{ collection }} theo {{ field }} {{ value }}", + + "search.browse.item-back": "Quay lại kết quả tìm kiếm", + + "chips.remove": "Loại bỏ chip", + + "claimed-approved-search-result-list-element.title": "Chấp nhận", + "claimed-declined-search-result-list-element.title": "Đã bị từ chối, đã gửi lại cho người nhập liệu", + "claimed-declined-task-search-result-list-element.title": "Bị từ chối, đã gửi lại tới người quản lý kiểm duyệt", + + "collection.create.head": "Tạo một Bộ sưu tập", + "collection.create.notifications.success": "Tạo bộ sưu tập thành công", + "collection.create.sub-head": "Tạo một bộ sưu tập cho đơnn vị {{ parent }}", + "collection.curate.header": "Kiểm tra bộ sưu tập: {{collection}}", + "collection.delete.cancel": "Hủy", + "collection.delete.confirm": "Xác nhận", + "collection.delete.head": "Xóa bộ sưu tập", + "collection.delete.notification.fail": "Không thể xóa bộ sưu tập", + "collection.delete.notification.success": "Xóa bộ sưu tập thành công", + "collection.delete.processing": "Đang xóa", + "collection.delete.text": "Bạn có chắc chắn rằng bạn muốn xóa bộ sưu tập \"{{ dso }}\"", + "collection.edit.breadcrumbs": "Chỉnh sửa bộ sưu tập", + "collection.edit.delete": "Xóa bộ sưu tập này", + "collection.edit.head": "Chỉnh sửa bộ sưu tập", + "collection.edit.item.authorizations.load-bundle-button": "Hiển thị thêm các nhóm khác", + "collection.edit.item.authorizations.load-more-button": "Hiển thị thêm", + "collection.edit.item.authorizations.show-bitstreams-button": "Hiển thị chính sách phân quyền tệp tin đối với nhóm", + "collection.edit.item-mapper.cancel": "Hủy", + "collection.edit.item-mapper.collection": "Bộ sưu tập: \"{{name}}\"", + "collection.edit.item-mapper.confirm": "Ánh xạ những tài liệu đã chọn", + "collection.edit.item-mapper.description": "Đây là công cụ liên kết tài liệu cho phép người quản trị bộ sưu tập liên kết các tài liệu từ các bộ sưu tập khác vào bộ sưu tập này. Bạn có thể tìm kiếm các tài liệu từ các bộ sưu tập khác và liên kết chúng hoặc duyệt qua danh sách các tài liệu hiện đã được liên kết.", + "collection.edit.item-mapper.head": "Liên kết tài liệu - Liên kết tài liệu tới bộ sưu tập khác", + "collection.edit.item-mapper.no-search": "Vui lòng nhập truy vấn để tìm kiếm", + "collection.edit.item-mapper.notifications.map.error.content": "Đã xảy ra lỗi khi liên kết{{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.map.error.head": "Lỗi liên kết", + "collection.edit.item-mapper.notifications.map.success.content": "Ánh xạ thành công {{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.map.success.head": "Ánh xạ được hoàn thành", + "collection.edit.item-mapper.notifications.unmap.error.content": "Đã xảy ra lỗi khi loại bỏ các liên kết của {{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.unmap.error.head": "Lỗi loại bỏ liên kết", + "collection.edit.item-mapper.notifications.unmap.success.content": "Loại bỏ thành công các liên kết của {{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.unmap.success.head": "Hoàn thành loại bỏ liên kết", + "collection.edit.item-mapper.remove": "Loại bỏ các liên kết của tài liệu được chọn", + "collection.edit.item-mapper.search-form.placeholder": "Tìm kiếm tài liệu...", + "collection.edit.item-mapper.tabs.browse": "Duyệt các tài liệu được liên kết", + "collection.edit.item-mapper.tabs.map": "Liên kết tài liệu mới", + "collection.edit.logo.delete.title": "Xóa logo", + "collection.edit.logo.delete-undo.title": "Hoàn tác xóa", + "collection.edit.logo.label": "Logo bộ sưu tập", + "collection.edit.logo.notifications.add.error": "Tải lên không thành công logo bộ sưu tập. Vui lòng kiểm tra nội dung trước khi thử lại.", + "collection.edit.logo.notifications.add.success": "Tài thành công logo bộ sưu tập.", + "collection.edit.logo.notifications.delete.error.title": "Lỗi khi xóa logo", + "collection.edit.logo.notifications.delete.success.content": "Xóa thành công logo của bộ sưu tập", + "collection.edit.logo.notifications.delete.success.title": "Logo đã được xóa", + "collection.edit.logo.upload": "Thả một logo bộ sưu tập để tải lên", + "collection.edit.notifications.success": "Chỉnh sửa thành công bộ sưu tập", + "collection.edit.return": "Quay lại", + "collection.edit.tabs.authorizations.head": "Phân quyền", + "collection.edit.tabs.authorizations.title": "Chỉnh sửa bộ sưu tập - Phân quyền", + "collection.edit.tabs.curate.head": "Kiểm tra", + "collection.edit.tabs.curate.title": "Chỉnh sửa bộ sưu tập - Kiểm tra", + "collection.edit.tabs.item-mapper.title": "Chỉnh sửa bộ sưu tập - Liên kết tài liệu", + "collection.edit.tabs.mapper.head": "Liên kết tài liệu", + "collection.edit.tabs.metadata.head": "Chỉnh sửa thông tin mô tả", + "collection.edit.tabs.metadata.title": "Chỉnh sửa bộ sưu tập - Siêu dữ liệu", + "collection.edit.tabs.roles.head": "Gán quyền", + "collection.edit.tabs.roles.title": "Chỉnh sửa bộ sưu tập - Vai trò", + "collection.edit.tabs.source.external": "Bộ sưu tập này thu thập nội dung từ một nguồn bên ngoài", + "collection.edit.tabs.source.form.errors.oaiSource.required": "Bạn phải cung cấp một bộ id của bộ sưu tập đích.", + "collection.edit.tabs.source.form.harvestType": "Nội dung đang được thu thập", + "collection.edit.tabs.source.form.head": "Cấu hình nguồn bên ngoài", + "collection.edit.tabs.source.form.metadataConfigId": "Định dạng thông tin mô tả", + "collection.edit.tabs.source.form.oaiSetId": "ID của bộ OAI", + "collection.edit.tabs.source.form.oaiSource": "Nhà cung cấp OAI", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Thu thập thông tin mô tả và tệp tin (yêu cầu hỗ trợ ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Thu thập thông tin mô tả và tham chiếu đến tệp tin (yêu cầu hỗ trợ ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Chỉ thu thập thông tin mô tả", + "collection.edit.tabs.source.head": "Nguồn nội dung", + "collection.edit.tabs.source.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục các thay đổi hãy nhấp vào nút 'Hoàn tác'", + "collection.edit.tabs.source.notifications.discarded.title": "Các thay đổi đã bị hủy", + "collection.edit.tabs.source.notifications.invalid.content": "Các thay đổi chưa được lưu. Hãy đảm bảo rằng tất cả các trường đều hợp lệ trước khi lưu.", + "collection.edit.tabs.source.notifications.invalid.title": "Siêu dữ liệu không hợp lệ", + "collection.edit.tabs.source.notifications.saved.content": "Các thay đổi của bạn đối với nguồn nội dung của bộ sưu tập này đã được lưu.", + "collection.edit.tabs.source.notifications.saved.title": "Nguồn nội dung đã được lưu", + "collection.edit.tabs.source.title": "Chỉnh sửa bộ sưu tập - Nguồn nội dung", + "collection.edit.template.add-button": "Thêm", + "collection.edit.template.breadcrumbs": "Khung mẫu tài liệu", + "collection.edit.template.cancel": "Hủy", + "collection.edit.template.delete-button": "Xóa", + "collection.edit.template.edit-button": "Chỉnh sửa", + "collection.edit.template.error": "Đã xảy ra lỗi khi truy xuất khung mẫu tài liệu", + "collection.edit.template.head": "Chỉnh sửa khung mẫu tài liệu cho bộ sưu tập \"{{ collection }}\"", + "collection.edit.template.label": "Khung mẫu tài liệu", + "collection.edit.template.loading": "Đang tải khung mẫu tài liệu...", + "collection.edit.template.notifications.delete.error": "Xóa khung mẫu tài liệu không thành công", + "collection.edit.template.notifications.delete.success": "Xóa khung mẫu tài liệu thành công", + "collection.edit.template.title": "Chỉnh sửa khung mẫu tài liệu", + "collection.form.abstract": "Mô tả ngắn", + "collection.form.description": "Văn bản giới thiệu (HTML)", + "collection.form.entityType": "Loại thực thể", + "collection.form.errors.title.required": "Vui lòng nhập tên bộ sưu tập", + "collection.form.license": "Giấy phép", + "collection.form.provenance": "Nguồn gốc", + "collection.form.rights": "Bản quyền (HTML)", + "collection.form.tableofcontents": "Tin tức (HTML)", + "collection.form.title": "Tên", + "collection.listelement.badge": "Bộ sưu tập", + "collection.page.browse.recent.empty": "Không có biểu ghi nào để hiển thị", + "collection.page.browse.recent.head": "Những tài liệu tải lên gần đây", + "collection.page.edit": "Chỉnh sửa bộ sưu tập", + "collection.page.handle": "URL", + "collection.page.description.abstract": "Mô tả", + "collection.page.license": "Giấy phép", + "collection.page.news": "Tin tức", + "collection.select.confirm": "Xác nhận các mục đã chọn", + "collection.select.empty": "Không có bộ sưu tập nào để hiển thị", + "collection.select.table.title": "Nhan đề", + "collection.source.controls.harvest.last": "Lần thu thập trước:", + "collection.source.controls.harvest.message": "Thông tin thu thập:", + "collection.source.controls.harvest.no-information": "N\/A", + "collection.source.controls.harvest.start": "Thời gian bắt đầu thu thập:", + "collection.source.controls.harvest.status": "Trạng thái thu thập:", + "collection.source.controls.head": "Quản lý thu thập:", + "collection.source.controls.import.completed": "Quá trình nhập liệu đã hoàn thành", + "collection.source.controls.import.failed": "Xảy ra lỗi trong quá trình nhập dữ liệu", + "collection.source.controls.import.running": "Đang nhập dữ liệu…", + "collection.source.controls.import.submit": "Nhập ngay", + "collection.source.controls.import.submit.error": "Xảy ra sự cố khi bắt đầu quá trình nhập dữ liệu", + "collection.source.controls.import.submit.success": "Quá trình nhập liệu đã được bắt đầu thành công", + "collection.source.controls.reset.completed": "Quá trình thiết lập và nhập lại dữ liệu đã hoàn tất", + "collection.source.controls.reset.failed": "Xảy ra sự cố trong quá trình thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.running": "Đang thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.submit": "Thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.submit.error": "Đã xảy ra lỗi khi bắt đầu thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.submit.success": "Quá trình thiết lập và nhập lại dữ liệu đã được bắt đầu thành công", + "collection.source.controls.test.completed": "Tập lệnh để kiểm tra cài đặt đã kết thúc thành công", + "collection.source.controls.test.failed": "Tập lệnh để kiểm tra cài đặt không thành công", + "collection.source.controls.test.running": "Cấu hình thử nghiệm…", + "collection.source.controls.test.submit": "Cấu hình thử nghiệm", + "collection.source.controls.test.submit.error": "Đã xảy ra lỗi khi bắt đầu cài đặt thử nghiệm", + "collection.source.update.notifications.error.content": "Các cài đặt đã được kiểm tra và không hoạt động.", + "collection.source.update.notifications.error.title": "Lỗi máy chủ", + + "community.create.head": "Tạo đơn vị", + "community.create.notifications.success": "Tạo đơn vị thành công", + "community.create.sub-head": "Tạo một đơn vị con cho đơn vị {{ parent }}", + "community.curate.header": "Kiểm tra đơn vị: {{community}}", + "community.delete.cancel": "Hủy", + "community.delete.confirm": "Xác nhận", + "community.delete.head": "Xóa đơn vị", + "community.delete.notification.fail": "Không thể xóa đơn vị", + "community.delete.notification.success": "Xóa đơn vị thành công", + "community.delete.processing": "Đang xóa…", + "community.delete.text": "Bạn có chắc chắn muốn xóa đơn vị \"{{ dso }}\"", + "community.edit.breadcrumbs": "Chỉnh sửa đơn vị", + "community.edit.delete": "Xóa đơn vị này", + "community.edit.head": "Chỉnh sửa đơn vị", + "community.edit.logo.delete.title": "Xóa logo", + "community.edit.logo.delete-undo.title": "Hoàn tác xóa", + "community.edit.logo.label": "Logo đơn vị", + "community.edit.logo.notifications.add.error": "Tải lên không thành công thành công logo đơn vị. Vui lòng kiểm tra lại nội dung trước khi tải lại.", + "community.edit.logo.notifications.add.success": "Tài lên thành công logo đơn vị.", + "community.edit.logo.notifications.delete.error.title": "Lỗi khi xóa logo", + "community.edit.logo.notifications.delete.success.content": "Xóa thành công logo của đơn vị", + "community.edit.logo.notifications.delete.success.title": "Đã xóa logo", + "community.edit.logo.upload": "Thả một logo đơn vị để tải lên", + "community.edit.notifications.error": "Đã xảy ra lỗi khi chỉnh sửa đơn vị", + "community.edit.notifications.success": "Chỉnh sửa đơn vị thành công", + "community.edit.notifications.unauthorized": "Bạn không có quyền để thực hiện thay đổi này", + "community.edit.return": "Quay lại", + "community.edit.tabs.authorizations.head": "Phân quyền", + "community.edit.tabs.authorizations.title": "Chỉnh sửa đơn vị - Phân quyền", + "community.edit.tabs.curate.head": "Kiểm tra", + "community.edit.tabs.curate.title": "Chỉnh sửa đơn vị - Kiểm tra", + "community.edit.tabs.metadata.head": "Chỉnh sửa thông tin mô tả", + "community.edit.tabs.metadata.title": "Chỉnh sửa đơn vị - Siêu dữ liệu", + "community.edit.tabs.roles.head": "Gán quyền", + "community.edit.tabs.roles.title": "Chỉnh sửa đơn vị - Quyền", + "community.form.abstract": "Mô tả ngắn", + "community.form.description": "Văn bản giới thiệu (HTML)", + "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", + "community.form.rights": "Thông tin bản quyền (HTML)", + "community.form.tableofcontents": "Tin tức (HTML)", + "community.form.title": "Tên", + "community.listelement.badge": "Đơn vị", + "community.page.edit": "Chỉnh sửa đơn vị", + "community.page.handle": "URL", + "community.page.license": "Giấy phép", + "community.page.news": "Tin tức", + "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", + "community.sub-community-list.head": "Các đơn vị con của đơn vị này", + "communityList.breadcrumbs": "Danh sách đơn vị", + "communityList.showMore": "Hiển thị thêm", + "communityList.tabTitle": "Danh sách đơn vị", + "communityList.title": "Danh sách các đơn vị", + + "comcol-role.edit.bitstream_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", + "comcol-role.edit.bitstream_read.description": "Người có quyền đọc tệp tin có khả năng tải các tệp tin về máy tính cá nhân để sử dụng", + "comcol-role.edit.bitstream_read.name": "Quyền đọc tệp tin mặc định", + "comcol-role.edit.collection-admin.description": "Quản trị viên bộ sưu tập quyết định người có thể tải tài liệu vào bộ sưu tập sửa thông tin mô tả của tài liệu (sau khi tải lên) và thêm (liên kết) tài liệu đã tồn tại từ bộ sưu tập khác (phụ thuộc phân quyền vào bộ sưu tập đó)", + "comcol-role.edit.collection-admin.name": "Quản trị", + "comcol-role.edit.community-admin.description": "Quản trị viên đơn vị có thể tạo đơn vị con hoặc bộ sưu tập và quản lý hoặc gán quyền quản lý cho những đơn vị con hoặc bộ sưu tập đó. Ngoài ra họ quyết định ai có thể tải các tài liệu vào bất kì bộ sưu tập nào chỉnh sửa thông tin thông tin mô tả của tài liệu (sau khi tải lên) và thêm (liên kết) các tài liệu đã tồn tại ở bộ sưu tập khác (phụ thuộc vào phân quyền)", + "comcol-role.edit.community-admin.name": "Quản trị", + "comcol-role.edit.create": "Tạo", + "comcol-role.edit.create.error.title": "Không tạo được nhóm có quyền '{{role }}'", + "comcol-role.edit.delete": "Xóa", + "comcol-role.edit.delete.error.title": "Không thể xóa nhóm có quyền '{{ role }}'", + "comcol-role.edit.editor.description": "Người biên tập có thể chỉnh sửa thông tin mô tả của tài liệu được tải lên, có thể chấp nhận hoặc từ chối tài liệu được tải lên.", + "comcol-role.edit.editor.name": "Người biên tập", + "comcol-role.edit.finaleditor.description": "Người biên tập cuối có thể chỉnh sửa thông tin mô tả của tài liệu được tải lên nhưng không thể từ chối tài liệu được tải lên.", + "comcol-role.edit.finaleditor.name": "Người biên tập cuối", + "comcol-role.edit.item_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", + "comcol-role.edit.item_read.description": "Tài khoản người dùng và nhóm người dùng có thể đọc những tài liệu mới được tải lên bộ sưu tập này. Các thay đổi quyền này không có hiêu lực với những tài liệu đã được tải lên từ trước. Những tài liệu đã tồn tại trong hệ thống sẽ vẫn được xem bởi những người có quyền xem vào thời điểm chúng được bổ sung", + "comcol-role.edit.item_read.name": "Quyền đọc thông tin mô tả của tài liệu", + "comcol-role.edit.no-group": "Trống", + "comcol-role.edit.restrict": "Hạn chế", + "comcol-role.edit.reviewer.description": "Người kiểm duyệt có thể chấp nhận hoặc từ chối các tài liệu được tải lên. Tuy nhiên sẽ không thể chỉnh sửa thông tin mô tả của tài liệu.", + "comcol-role.edit.reviewer.name": "Người kiểm duyệt", + "comcol-role.edit.submitters.description": "Tài khoản người dùng và nhóm người dùng có quyền tải tài liệu mới vào bộ sưu tập này", + "comcol-role.edit.submitters.name": "Người tải lên", + + "community.form.abstract": "Mô tả ngắn", + "community.form.description": "Văn bản giới thiệu (HTML)", + "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", + "community.form.rights": "Thông tin bản quyền (HTML)", + "community.form.tableofcontents": "Tin tức (HTML)", + "community.form.title": "Tên", + + "community.page.edit": "Chỉnh sửa đơn vị", + "community.page.handle": "URL", + "community.page.license": "Giấy phép", + "community.page.news": "Tin tức", + + "community.all-lists.head": "Đơn vị con và bộ sưu tập", + + "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", + "community.sub-community-list.head": "Các đơn vị con của đơn vị này", + + "cookies.consent.accept-all": "Chấp thuận tất cả", + "cookies.consent.accept-selected": "Chấp nhận các mục đã chọn", + "cookies.consent.app.description.acknowledgement": "Bắt buộc để lưu sự xác nhận và đồng ý của bạn", + "cookies.consent.app.description.authentication": "Bắt buộc để đăng nhập", + "cookies.consent.app.description.google-analytics": "Cho phép chúng tôi theo dõi dữ liệu thống kê", + "cookies.consent.app.description.google-recaptcha": "Chúng tôi sử dụng dịch vụ google reCAPTCHA trong quá trình đăng ký và khôi phục mật khẩu", + "cookies.consent.app.description.preferences": "Bắt buộc để lưu tùy chọn của bạn", + "cookies.consent.app.disable-all.description": "Sử dụng nút chuyển này để bật hoặc tắt tất cả dịch vụ.", + "cookies.consent.app.disable-all.title": "Bật hoặc tắt tất cả dịch vụ", + "cookies.consent.app.opt-out.description": "Ứng dụng này đã được tải theo mặc định (nhưng bạn có thể chọn không tham gia)", + "cookies.consent.app.purpose": "mục đích", + "cookies.consent.app.required.description": "Ứng dụng này luôn được yêu cầu", + "cookies.consent.app.title.acknowledgement": "Sự xác nhận", + "cookies.consent.app.title.authentication": "Xác thực", + "cookies.consent.app.title.google-analytics": "Google Analytics", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.app.title.preferences": "Cài đặt cá nhân", + "cookies.consent.close": "Đóng", + "cookies.consent.content-modal.description": "Tại đây bạn có thể xem và tùy chỉnh thông tin mà chúng tôi thu thập được về bạn.", + "cookies.consent.content-modal.privacy-policy.name": "chính sách bảo mật", + "cookies.consent.content-modal.privacy-policy.text": "Để biết thêm vui lòng đọc {privacyPolicy} của chúng tôi.", + "cookies.consent.content-modal.service": "dịch vụ", + "cookies.consent.content-modal.services": "các dịch vụ", + "cookies.consent.content-modal.title": "Thông tin mà chúng tôi thu thập", + "cookies.consent.content-notice.description": "Chúng tôi thu thập và xử lý thông tin các nhân của bạn cho các mục đích sau: Xác thực các ưa thích xác nhận và thống kê.
    Để biết thêm vui lòng đọc {privacyPolicy} của chúng tôi.", + "cookies.consent.content-notice.description.no-privacy": "Chúng tôi thu thập và xử lý thông tin cá nhân của bạn cho các mục đích sau: Xác thực Cài đặt cá nhân Xác nhận và Thống kê.", + "cookies.consent.content-notice.learnMore": "Tùy chỉnh", + "cookies.consent.content-notice.title": "Đồng ý sử dụng cookie", + "cookies.consent.decline": "Từ chối", + "cookies.consent.ok": "OK", + "cookies.consent.purpose.functional": "Chức năng", + "cookies.consent.purpose.registration-password-recovery": "Đăng ký và khôi phục mật khẩu", + "cookies.consent.purpose.sharing": "Chia sẻ", + "cookies.consent.purpose.statistical": "Thống kê", + "cookies.consent.save": "Lưu", + "cookies.consent.update": "Có 1 vài thay đổi từ lần ghé thăm cuối cùng của bạn vui lòng cập nhập sự đồng ý của bạn.", + + "curation-task.task.checklinks.label": "\"Kiểm tra các link trong thông tin mô tả\"", + "curation-task.task.citationpage.label": "Tạo trang trích dẫn", + "curation-task.task.noop.label": "NOOP", + "curation-task.task.profileformats.label": "Định dạng tệp tin", + "curation-task.task.register-doi.label": "Đăng ký DOI", + "curation-task.task.requiredmetadata.label": "Kiểm tra các trường dữ liệu bắt buộc", + "curation-task.task.translate.label": "Bộ dịch của Microsoft", + "curation-task.task.vscan.label": "Quét Virus", + + "curation.form.handle.hint": "Gợi ý: Nhập [your-handle-prefix]\/0 để chạy một tác vụ trên toàn bộ trang (chú ý rằng không phải tất cả tác vụ đều hỗ trợ khả năng này)", + "curation.form.handle.label": "Handle:", + "curation.form.submit": "Bắt đầu", + "curation.form.submit.error.content": "Đã có lỗi xảy ra khi cố gắng khởi động tác vụ kiểm tra.", + "curation.form.submit.error.head": "Việc chạy tác vụ kiểm tra đã thất bại", + "curation.form.submit.error.invalid-handle": "Không thể xác định định danh của đối tượng này", + "curation.form.submit.success.content": "Bạn sẽ được điều hướng đến trang phản hồi quy trình.", + "curation.form.submit.success.head": "Tác vụ kiểm tra đã khởi động thành công", + "curation.form.task-select.label": "Tác vụ:", + + "deny-request-copy.email.message": "Kính gửi {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện rất tiếc phải thông báo với bạn rằng chúng tôi không thể gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\nTrân trọng\n,{{ authorName}}<{{ authorEmail }}>", + "deny-request-copy.email.subject": "Yêu cầu bản sao tài liệu", + "deny-request-copy.error": "Đã xảy ra lỗi", + "deny-request-copy.header": "Từ chối yêu cầu bản sao tài liệu", + "deny-request-copy.intro": "Tin nhắn này sẽ được gửi đến người yêu cầu", + "deny-request-copy.success": "Từ chối thành công yêu cầu tài liệu", + + "dso.name.untitled": "Không có nhan đề", + + "dso-selector.claim.item.body": "Đây là những hồ sơ hiện có có thể liên quan đến bạn. Nếu bạn nhận ra mình ở một trong những hồ sơ này hãy chọn hồ sơ đó và trên trang chi tiết hãy chọn xác nhận hồ sơ. Nếu không bạn có thể tạo một hồ sơ mới từ đầu bằng cách sử dụng nút bên dưới.", + "dso-selector.claim.item.create-from-scratch": "Tạo hồ sơ mới", + "dso-selector.claim.item.head": "Mẹo quản lý hồ sơ", + "dso-selector.claim.item.not-mine-label": "Không có mục nào trong số này là của tôi", + "dso-selector.create.collection.head": "Bộ sưu tập mới", + "dso-selector.create.collection.sub-level": "Tạo một bộ sưu tập mới trong", + "dso-selector.create.community.head": "Đơn vị mới", + "dso-selector.create.community.or-divider": "hoặc", + "dso-selector.create.community.sub-level": "Tạo một đơn vị mới trong", + "dso-selector.create.community.top-level": "Tạo một đơn vị lớn", + "dso-selector.create.item.head": "Tài liệu mới", + "dso-selector.create.item.sub-level": "Tạo một tài liệu mới trong", + "dso-selector.create.submission.head": "Biên mục mới", + "dso-selector.create.topic.sub-level": "Tạo topic mới trong", + "dso-selector.create.topic.top-level": "Tạo topic lớn", + "dso-selector.edit.collection.head": "Chỉnh sửa bộ sưu tập", + "dso-selector.edit.community.head": "Chỉnh sửa đơn vị", + "dso-selector.edit.item.head": "Chỉnh sửa tài liệu", + "dso-selector.error.title": "Đã có lỗi xảy ra khi tìm kiếm kiểu tài liệu {{ type }}", + "dso-selector.export-batch.dspaceobject.head": "Xuất lô dữ liệu (định dạng file ZIP) từ", + "dso-selector.export-metadata.dspaceobject.head": "Xuất siêu dữ liệu từ", + "dso-selector.import-batch.dspaceobject.head": "Nhập lô dữ liệu từ", + "dso-selector.no-results": "Không tìm thấy kiểu {{ type }} nào", + "dso-selector.placeholder": "Tìm kiếm {{ type }}", + "dso-selector.results-could-not-be-retrieved": "Đã xảy ra lỗi vui lòng làm mới lại ↻", + "dso-selector.select.collection.head": "Chọn một bộ sưu tập", + "dso-selector.set-scope.community.button": "Tìm kiếm trên toàn hệ thống", + "dso-selector.set-scope.community.head": "Chọn một phạm vi tìm kiếm", + "dso-selector.set-scope.community.input-header": "Tìm kiếm một đơn vị hoặc bộ sưu tập", + "dso-selector.set-scope.community.or-divider": "hoặc", + + "supervision-group-selector.header": "Supervision Group Selector", + "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + "supervision-group-selector.select.type-of-order.option.none": "NONE", + "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.save": "Save", + "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + "supervision-group-selector.select.group.error": "Please select a group", + "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + + "confirmation-modal.delete-eperson.cancel": "Hủy", + "confirmation-modal.delete-eperson.confirm": "Xóa", + "confirmation-modal.delete-eperson.header": "Xóa người dùng \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Bạn có chắc muốn xóa người dùng \"{{ dsoName }}\"", + "confirmation-modal.delete-profile.cancel": "Hủy", + "confirmation-modal.delete-profile.confirm": "Xóa", + "confirmation-modal.delete-profile.header": "Xóa hồ sơ", + "confirmation-modal.delete-profile.info": "Bạn có chắc chắn muốn xóa hồ sơ", + "confirmation-modal.export-batch.cancel": "Hủy", + "confirmation-modal.export-batch.confirm": "Xuất dữ liệu", + "confirmation-modal.export-batch.header": "Xuất lô dữ liệu (định dạng file ZIP) của tác giả {{ dsoName }}", + "confirmation-modal.export-batch.info": "Bạn có chắc chắn muốn xuất lô dữ liệu (định dạng file ZIP) của tác giả {{ dsoName }}", + "confirmation-modal.export-metadata.cancel": "Hủy", + "confirmation-modal.export-metadata.confirm": "Xuất dữ liệu", + "confirmation-modal.export-metadata.header": "Xuất thông tin mô tả tài liệu của đơn vị, bộ sưu tập {{ dsoName }}", + "confirmation-modal.export-metadata.info": "Bạn có chắc muốn xuất thông tin mô tả tài liệu của đơn vị, bộ sưu tập {{ dsoName }}", + "confirmation-modal.policies.cancel": "Hủy", + "confirmation-modal.policies.confirm": "Xác nhận", + "confirmation-modal.policies.header": "Chọn hướng phân quyền cho đối tượng đã di chuyển", + "confirmation-modal.policies.info": "Bạn muốn chọn hướng phân quyền cho đối tượng đã di chuyển", + "confirmation-modal.reset-password-eperson.cancel": "Hủy", + "confirmation-modal.reset-password-eperson.confirm": "Thiết lập lại mật khẩu", + "confirmation-modal.reset-password-eperson.info": "Bạn có chắc chắn muốn thiết lập lại mật khẩu cho người dùng \"{{ dsoName }}\"", + + "error.bitstream": "Lỗi tìm kiếm tệp tin", + "error.browse-by": "Lỗi tìm kiếm tài liệu", + "error.collection": "Lỗi tìm kiếm bộ sưu tập", + "error.collections": "Lỗi tìm kiếm bộ sưu tập", + "error.community": "Lỗi tìm kiếm đơn vị", + "error.default": "Lỗi", + "error.identifier": "Không tìm thấy tài liệu nào cho định danh này", + "error.invalid-search-query": "Truy vấn tìm kiếm không hợp lệ. Vui lòng kiểm tra
    Cú pháp truy vấn Solr các phương pháp tốt nhất để biết thêm thông tin về lỗi này.", + "error.item": "Lỗi tìm kiếm tài liệu", + "error.items": "Lỗi tìm kiếm tài liệu", + "error.objects": "Lỗi tìm kiếm đối tượng", + "error.recent-submissions": "Lỗi tìm kiếm các tài liệu biên mục gần đây", + "error.search-results": "Lỗi tìm kiếm các kết quả tìm", + "error.sub-collections": "Lỗi tìm kiếm bộ sưu tập con", + "error.sub-communities": "Lỗi tìm kiếm đơn vị con", + "error.submission.sections.init-form-error": "Đã xảy ra lỗi khi khởi chạy các phần vui lòng kiểm tra cấu hình biểu mẫu đầu vào của bạn. Thông tin chi tiết ở bên dưới:

    ", + "error.top-level-communities": "Lỗi tìm kiếm đơn vị lớn", + "error.validation.emailTaken": "Email này đã được sử dụng", + "error.validation.filerequired": "Bắt buộc phải tải tệp tin lên", + "error.validation.groupExists": "Nhóm này đã tồn tại", + "error.validation.license.notgranted": "Bạn phải đồng ý với giấy phép này để hoàn thành tài liệu biên mục của mình. Nếu hiện tại bạn không thể đồng ý giấy phép này bạn có thể lưu tài liệu biên mục của mình và quay lại sau hoặc xóa nội dung đã biên mục.", + "error.validation.NotValidEmail": "Email này không hợp lệ", + "error.validation.pattern": "Đầu vào này bị giới hạn bởi mẫu hiện tại: {{ pattern }}.", + "error.validation.required": "Đây là trường bắt buộc", + "error-page.description.401": "không có quyền truy cập", + "error-page.description.403": "không được phép truy cập", + "error-page.description.404": "không tìm thấy trang", + "error-page.description.500": "Dịch vụ không sẵn sàng", + "error-page.orcid.generic-error": "Đã xảy ra lỗi khi đăng nhập qua ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists contact the administrator", + + "feed.description": "Nguồn cấp dữ liệu tổng hợp", + + "file-section.error.header": "Lỗi khi lấy tệp cho tài liệu này", + + "footer.copyright": "bản quyền © 2002-{{ year }}", + "footer.link.cookies": "Cài đặt Cookie", + "footer.link.dspace": "Phần mềm thư viện số", + "footer.link.end-user-agreement": "Thỏa thuận bạn đọc", + "footer.link.feedback": "Gửi phản hồi", + "footer.link.lyrasis": "LYRASIS", + "footer.link.privacy-policy": "Chính sách riêng tư", + + "forgot-email.form.email": "Địa chỉ Email *", + "forgot-email.form.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", + "forgot-email.form.email.error.required": "Vui lòng nhập địa chỉ email", + "forgot-email.form.email.hint": "Địa chỉ email này sẽ được xác nhận và sử dụng như là tên đăng nhập.", + "forgot-email.form.error.content": "Đã xảy ra lỗi khi đăng kí địa chỉ email sau: {{ email }}", + "forgot-email.form.error.head": "Đã xảy ra lỗi khi đăng kí email", + "forgot-email.form.header": "Quên mật khẩu", + "forgot-email.form.info": "Nhập địa chỉ email mà để đăng kí cập nhật thông tin tài liệu mới trong các bộ sưu tập qua email và biên mục tài liệu mới vào thư viện số.", + "forgot-email.form.submit": "Lưu", + "forgot-email.form.success.content": "Một email đã được gửi tới địa chỉ {{ email }} trong đó có chứa URL và các hướng dẫn chi tiết hơn.", + "forgot-email.form.success.head": "Email xác nhận đã được gửi tới bạn", + + "forgot-password.form.card.security": "Bảo mật", + "forgot-password.form.error.empty-password": "Vui lòng nhập mật khẩu mới trong ô dưới đây.", + "forgot-password.form.error.matching-passwords": "Hai mật khẩu không trùng khớp.", + "forgot-password.form.head": "Quên mật khẩu", + "forgot-password.form.identification.email": "Địa chỉ email:", + "forgot-password.form.identification.header": "Định danh", + "forgot-password.form.info": "Nhập mật khẩu mới trong ô dưới đây và xác nhận bằng cách nhập lại vào ô thứ hai. Mật khẩu nên chứa ít nhất 6 kí tự.", + "forgot-password.form.label.password": "Mật khẩu", + "forgot-password.form.label.passwordrepeat": "Nhập lại mật khẩu mới", + "forgot-password.form.notification.error.title": "Đã xảy ra lỗi khi gửi mật khẩu mới", + "forgot-password.form.notification.success.content": "Đã đặt lại mật khẩu thành công. Bạn đã được đăng nhập với tư cách là người dùng được tạo.", + "forgot-password.form.notification.success.title": "Hoàn thành đặt lại mật khẩu", + "forgot-password.form.submit": "Gửi mật khẩu", + "forgot-password.title": "Quên mật khẩu", + + "form.add": "Thêm", + "form.add-help": "Nhấp vào đây để thêm mục hiện tại và một mục khác", + "form.cancel": "Hủy", + "form.clear": "Xóa", + "form.clear-help": "Nhấp vào đây để xóa giá trị đã chọn", + "form.discard": "Hủy bỏ", + "form.drag": "Kéo", + "form.edit": "Chỉnh sửa", + "form.edit-help": "Nhấp vào đây để chỉnh sửa giá trị đã chọn", + "form.first-name": "Tên", + "form.group-collapse": "Thu hẹp", + "form.group-collapse-help": "Nhấp vào đây để thu hẹp", + "form.group-expand": "Mở rộng", + "form.group-expand-help": "Nhấp vào đây để mở rộng và thêm các yếu tố khác", + "form.last-name": "Họ", + "form.loading": "Đang tải...", + "form.lookup": "Tìm kiếm", + "form.lookup-help": "Nhấp vào đây để tìm kiếm mối liên hệ đang tồn tại", + "form.no-results": "Không tìm thấy kết quả phù hợp", + "form.no-value": "Không có giá trị nào được nhập vào", + "form.remove": "Xóa", + "form.repeatable.sort.tip": "Thả tài liệu vào vị trí mới", + "form.save": "Lưu", + "form.save-help": "Lưu thay đổi", + "form.search": "Tìm kiếm", + "form.search-help": "Nhấp vào đây để tìm kiếm thư từ đang tồn tại", + "form.submit": "Lưu", + + "grant-deny-request-copy.deny": "Không gửi bản sao", + "grant-deny-request-copy.email.back": "Quay lại", + "grant-deny-request-copy.email.message": "Tin nhắn", + "grant-deny-request-copy.email.message.empty": "Vui lòng nhập một tin nhắn", + "grant-deny-request-copy.email.permissions.info": "Bạn có thể nhân tiện dịp này để xem xét lại các hạn chế truy cập vào tài liệu để tránh phải trả lời các yêu cầu tương tự. Nếu bạn muốn yêu cầu quản trị hệ thống loại bỏ những hạn chế này vui lòng đánh dấu vào hộp bên dưới.", + "grant-deny-request-copy.email.permissions.label": "Chuyển thành truy cập mở", + "grant-deny-request-copy.email.send": "Gửi", + "grant-deny-request-copy.email.subject": "Chủ đề", + "grant-deny-request-copy.email.subject.empty": "Vui lòng nhập một chủ đề", + "grant-deny-request-copy.grant": "Gửi bản sao", + "grant-deny-request-copy.header": "Yêu cầu bản sao tài liệu", + "grant-deny-request-copy.home-page": "Đi tới trang chủ", + "grant-deny-request-copy.intro1": "Nếu bạn là một trong các tác giả của tài liệu {{ name }} vui lòng sử dụng một trong các tùy chọn dưới đây để phản hồi yêu cầu của bạn đọc.", + "grant-deny-request-copy.intro2": "Sau khi chọn một tùy chọn bạn sẽ thấy một email gợi ý trả lời mà bạn có thể chỉnh sửa.", + "grant-deny-request-copy.processed": "Yêu cầu này đã được xử lý. Bạn có thể sử dụng nút bên dưới để quay lại trang chủ.", + "grant-request-copy.email.message": "Dear {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện đồng ý gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\n\nTrân trọng\n\n{{ authorName }} <{{ authorEmail }}>\n", + "grant-request-copy.email.subject": "Yêu cầu bản sao tài liệu", + "grant-request-copy.error": "Đã xảy ra lỗi", + "grant-request-copy.header": "Chấp nhận yêu cầu bản sao tài liệu", + "grant-request-copy.intro": "Tin nhắn này sẽ được gửi đến người gửi yêu cầu. (Các) tài liệu được yêu cầu sẽ được gửi kèm tin nhắn.", + "grant-request-copy.success": "Yêu cầu tài liệu đã được xử lý thành công", + + "health.breadcrumbs": "Kiểm tra hệ thống", + "health-page.error.msg": "Dịch vụ kiểm tra hệ thống tạm thời không khả dụng", + "health-page.heading": "Kiểm tra hệ thống", + "health-page.info-tab": "Thông tin hệ thống", + "health-page.property.status": "Mã trạng thái", + "health-page.section.db.title": "Cơ sở dữ liệu", + "health-page.section.geoIp.title": "GeoIp", + "health-page.section.no-issues": "Không có vấn đề được phát hiện", + "health-page.section.solrAuthorityCore.title": "Solr: authority core", + "health-page.section.solrOaiCore.title": "Solr: oai core", + "health-page.section.solrSearchCore.title": "Solr: search core", + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + "health-page.section-info.app.title": "Ứng dụng Backend", + "health-page.section-info.java.title": "Java", + "health-page.status": "Trạng thái", + "health-page.status.error.info": "Các vấn đề được tìm thấy", + "health-page.status.ok.info": "Vận hành", + "health-page.status.warning.info": "Phát hiện các vấn đề có thể xảy ra", + "health-page.status-tab": "Trạng thái", + "health-page.title": "Kiểm tra hệ thống", + + "home.description": "", + "home.breadcrumbs": "Trang chủ", + "home.search-form.placeholder": "Tìm kiếm kho lưu trữ", + "home.title": "Trang chủ", + "home.top-level-communities.head": "Danh sách đơn vị trong DSpace", + "home.top-level-communities.help": "Chọn một đơn vị để xem các bộ sưu tập của nó.", + + "info.contact.breadcrumbs": "Thông tin liên hệ", + "info.contact.head": "Thông tin liên hệ", + "info.contact.title": "Thông tin liên hệ", + "info.end-user-agreement.accept": "Tôi đã đọc và đồng ý với Thỏa thuận bạn đọc", + "info.end-user-agreement.accept.error": "Đã xảy ra lỗi khi chấp nhận Thỏa thuận bạn đọc", + "info.end-user-agreement.accept.success": "Đã cập nhật thành công Thỏa thuận bạn đọc", + "info.end-user-agreement.breadcrumbs": "Thỏa thuận bạn đọc", + "info.end-user-agreement.buttons.cancel": "Hủy", + "info.end-user-agreement.buttons.save": "Lưu", + "info.end-user-agreement.head": "Thỏa thuận người dùng", + "info.end-user-agreement.title": "Thỏa thuận người dùng", + "info.feedback.breadcrumbs": "Phản hồi", + "info.feedback.comments": "Bình luận", + "info.feedback.create.success": "Gửi phản hồi thành công!", + "info.feedback.email_help": "Địa chỉ này sẽ được sử dụng để theo dõi phản hồi của bạn.", + "info.feedback.email-label": "Email", + "info.feedback.error.email.required": "Yêu cầu địa chỉ email hợp lệ", + "info.feedback.error.message.required": "Yêu cầu phải có nội dung bình luận", + "info.feedback.head": "Phản hồi", + "info.feedback.info": "Cảm ơn bạn đã chia sẽ phản hồi của mình tới Thư viện. Chúng tôi luôn trân trọng mọi ý kiến đóng góp của bạn!", + "info.feedback.page_help": "Trang liên kết với các phản hồi của bạn", + "info.feedback.page-label": "Trang", + "info.feedback.send": "Gửi phản hồi", + "info.feedback.title": "Phản hồi", + "info.help.head": "Trợ giúp", + "info.help.title": "Trợ giúp", + "info.privacy.breadcrumbs": "Cam kết bảo mật", + "info.privacy.head": "Cam kết bảo mật", + "info.privacy.title": "Cam kết bảo mật", + + "item.alerts.private": "Đây là tài liệu cá nhân", + "item.alerts.withdrawn": "Tài liệu này đã được chuyển sang chế độ ẩn", + "item.badge.private": "Cá nhân", + "item.badge.withdrawn": "Ẩn", + "item.bitstreams.upload.bundle": "Gói tệp tin", + "item.bitstreams.upload.bundle.new": "Tạo gói tệp tin", + "item.bitstreams.upload.bundle.placeholder": "Chọn một gói tệp tin", + "item.bitstreams.upload.bundles.empty": "Tài liệu này không có gói tệp tin nào để tải tệp tin vào.", + "item.bitstreams.upload.cancel": "Hủy", + "item.bitstreams.upload.drop-message": "Thả tệp tin để tài lên", + "item.bitstreams.upload.item": "Tài liệu:", + "item.bitstreams.upload.notifications.bundle.created.content": "Tạo thành công gói tệp tin.", + "item.bitstreams.upload.notifications.bundle.created.title": "Đã tạo gói tệp tin", + "item.bitstreams.upload.notifications.upload.failed": "Tải lên thất bại. Vui lòng xác minh nội dung sau trước khi thực hiện lại.", + "item.bitstreams.upload.title": "Tải tệp tin lên", + "item.edit.authorizations.heading": "Với trình chỉnh sửa này bạn có thể xem và chỉnh sửa chính sách phân quyền của một tài liệu (item) cũng như các thành phần của tài liệu đó như: gói tệp tin (bundle) và tệp tin (bitstream). Các tài liệu có thể chứa nhiều gói và mỗi gói có thể chứa nhiều tệp tin. Tài liệu và gói tệp tin thường có các quyền là THÊM\/XÓA\/ĐỌC\/CHỈNH SỬA còn tệp tin chỉ có quyền ĐỌC\/CHỈNH SỬA.", + "item.edit.authorizations.title": "Chỉnh sửa chính sách phân quyền của tài liệu", + "item.edit.bitstreams.bundle.displaying": "Đang hiển thị {{ amount }} trong số {{ total }} tệp tin.", + "item.edit.bitstreams.bundle.edit.buttons.upload": "Tải lên", + "item.edit.bitstreams.bundle.load.all": "Tải tất cả ({{ total }})", + "item.edit.bitstreams.bundle.load.more": "Xem thêm", + "item.edit.bitstreams.bundle.name": "GÓI TỆP TIN: {{ name }}", + "item.edit.bitstreams.discard-button": "Hủy bỏ", + "item.edit.bitstreams.edit.buttons.download": "Tải xuống", + "item.edit.bitstreams.edit.buttons.drag": "Kéo", + "item.edit.bitstreams.edit.buttons.edit": "Chỉnh sửa", + "item.edit.bitstreams.edit.buttons.remove": "Xóa", + "item.edit.bitstreams.edit.buttons.undo": "Hoàn tác", + "item.edit.bitstreams.empty": "Tài liệu này không chứa tệp tin nào. Hãy nhập vào nút tải lên để tải tệp tin.", + "item.edit.bitstreams.headers.actions": "Hành động", + "item.edit.bitstreams.headers.bundle": "Gói tệp tin", + "item.edit.bitstreams.headers.description": "Mô tả", + "item.edit.bitstreams.headers.format": "Định dạng", + "item.edit.bitstreams.headers.name": "Tên", + "item.edit.bitstreams.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục các thay đổi của bạn hãy nhấp vào nút 'Hoàn tác'", + "item.edit.bitstreams.notifications.discarded.title": "Các thay đổi đã bị hủy", + "item.edit.bitstreams.notifications.move.failed.title": "Đã xảy ra lỗi khi di chuyển tệp tin", + "item.edit.bitstreams.notifications.move.saved.content": "Các di chuyển của bạn đối với tệp tin và gói tệp tin của tài liệu này đã được lưu lại.", + "item.edit.bitstreams.notifications.move.saved.title": "Di chuyển đã được lưu lại", + "item.edit.bitstreams.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn đã bị hủy bỏ để tránh xảy ra xung đột.", + "item.edit.bitstreams.notifications.outdated.title": "Các thay đổi không có hiệu lực", + "item.edit.bitstreams.notifications.remove.failed.title": "Đã xảy ra lỗi khi xóa tệp tin", + "item.edit.bitstreams.notifications.remove.saved.content": "Các thay đổi liên quan tới việc xóa tệp tin của tài liệu này đã được lưu lại.", + "item.edit.bitstreams.notifications.remove.saved.title": "Việc xóa tệp tin đã được lưu lại", + "item.edit.bitstreams.reinstate-button": "Hoàn tác", + "item.edit.bitstreams.save-button": "Lưu", + "item.edit.bitstreams.upload-button": "Tải lên", + "item.edit.breadcrumbs": "Chỉnh sửa tài liệu", + "item.edit.delete.cancel": "Hủy", + "item.edit.delete.confirm": "Xóa", + "item.edit.delete.description": "Bạn có chắc chắn muốn xóa tài liệu này? Cẩn trọng: Hành động này sẽ xóa vĩnh viễn tài liệu và không thể khôi phục lại.", + "item.edit.delete.error": "Đã xảy ra lỗi trong khi xóa tài liệu này", + "item.edit.delete.header": "Xóa tài liệu: {{ id }}", + "item.edit.delete.success": "Tài liệu đã được xóa thành công", + "item.edit.head": "Chỉnh sửa tài liệu", + "item.edit.item-mapper.buttons.add": "Liên kết tài liệu tới các bộ sưu tập đã chọn", + "item.edit.item-mapper.buttons.remove": "Xóa liên kết tài liệu với các bộ sưu tập đã chọn", + "item.edit.item-mapper.cancel": "Hủy", + "item.edit.item-mapper.description": "Đây là công cụ liên kết tài liệu cho phép quản trị viên có thể liên kết tài liệu này với các bộ sưu tập khác. Bạn có thể tìm kiếm các bộ sưu tập và thực hiện liên kết hoặc xem danh sách các bộ sưu tập mà tài liệu hiện đang được liên kết tới.", + "item.edit.item-mapper.head": "Liên kết tài liệu - Liên kết tài liệu tới Bộ sưu tập khác", + "item.edit.item-mapper.item": "Tài liệu: \"{{name}}\"", + "item.edit.item-mapper.no-search": "Vui lòng nhập một truy vấn để tìm kiếm", + "item.edit.item-mapper.notifications.add.error.content": "Đã xảy ra lỗi khi liên kết tài liệu này tới {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.add.error.head": "Xảy ra lỗi khi liên kết", + "item.edit.item-mapper.notifications.add.success.content": "Đã liên kết thành công tài liệu này tới {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.add.success.head": "Hoàn thành liên kết tài liệu", + "item.edit.item-mapper.notifications.remove.error.content": "Đã xảy ra lỗi khi xóa liên kết của tài liệu với {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.remove.error.head": "Lỗi khi xóa liên kết tài liệu", + "item.edit.item-mapper.notifications.remove.success.content": "Đã xóa thành công liên kết giữa tài liệu với {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.remove.success.head": "Hoàn thành xóa liên kết tài liệu", + "item.edit.item-mapper.search-form.placeholder": "Tìm kiếm bộ sưu tập", + "item.edit.item-mapper.tabs.browse": "Xem các bộ sưu tập đã liên kết", + "item.edit.item-mapper.tabs.map": "Liên kết với các bộ sưu tập mới", + "item.edit.metadata.add-button": "Thêm", + "item.edit.metadata.discard-button": "Hủy bỏ", + "item.edit.metadata.edit.buttons.edit": "Chỉnh sửa", + "item.edit.metadata.edit.buttons.remove": "Xóa", + "item.edit.metadata.edit.buttons.undo": "Hoàn tác", + "item.edit.metadata.edit.buttons.unedit": "Ngừng chỉnh sửa", + "item.edit.metadata.empty": "Bộ sưu tập này hiện không chứa trường thông tin mặc định nào. Nhập vào nút Thêm để bắt đầu thêm giá trị mặc định cho trường thông tin cho các tài liệu biên mục mới trong bộ sưu tập.", + "item.edit.metadata.headers.edit": "Chỉnh sửa", + "item.edit.metadata.headers.field": "Trường", + "item.edit.metadata.headers.language": "Ngôn ngữ", + "item.edit.metadata.headers.value": "Giá trị", + "item.edit.metadata.metadatafield.invalid": "Vui lòng chọn một trường thông tin mô tả hợp lệ", + "item.edit.metadata.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục lại các thay đổi này hãy nhấp vào nút 'Hoàn tác'", + "item.edit.metadata.notifications.discarded.title": "Đã khôi phục", + "item.edit.metadata.notifications.error.title": "Đã có lỗi xảy ra", + "item.edit.metadata.notifications.invalid.content": "Các thay đổi của bạn không được lưu lại. Vui lòng đảm bảo rằng tất cả các trường là hợp lệ trước khi bạn lưu.", + "item.edit.metadata.notifications.invalid.title": "Siêu dữ liệu không hợp lệ", + "item.edit.metadata.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn với tài liệu sẽ bị hủy bỏ để tránh xung đột xảy ra.", + "item.edit.metadata.notifications.outdated.title": "Thay đổi không có hiệu lực", + "item.edit.metadata.notifications.saved.content": "Các thay đổi của bạn với thông tin mô tả của tài liệu này đã được lưu lại.", + "item.edit.metadata.notifications.saved.title": "Đã lưu thông tin mô tả", + "item.edit.metadata.reinstate-button": "Hoàn tác", + "item.edit.metadata.save-button": "Lưu", + "item.edit.modify.overview.field": "Trường", + "item.edit.modify.overview.language": "Ngôn ngữ", + "item.edit.modify.overview.value": "Giá trị", + "item.edit.move.cancel": "Quay lại", + "item.edit.move.description": "Chọn bộ sưu tập mà bạn muốn chuyển tài liệu này tới. Để giới hạn danh sách bộ sưu tập đang hiển thị bạn có thể nhập từ khóa tìm kiếm trong ô dưới đây.", + "item.edit.move.discard-button": "Hủy bỏ", + "item.edit.move.error": "Đã xảy ra lỗi khi thực hiện di chuyển tài liệu này", + "item.edit.move.head": "Di chuyển tài liệu: {{id}}", + "item.edit.move.inheritpolicies.checkbox": "Kế thừa chính sách", + "item.edit.move.inheritpolicies.description": "Kế thừa chính sách mặc định của bộ sưu tập đích", + "item.edit.move.move": "Di chuyển", + "item.edit.move.processing": "Đang di chuyển...", + "item.edit.move.save-button": "Lưu", + "item.edit.move.search.placeholder": "Nhập một từ khóa để tìm kiếm bộ sưu tập", + "item.edit.move.success": "Tài liệu đã được di chuyển thành công", + "item.edit.move.title": "Di chuyển tài liệu", + "item.edit.private.cancel": "Hủy", + "item.edit.private.confirm": "Chuyển thành tài liệu cá nhân", + "item.edit.private.description": "Bạn có chắc chắn muốn chuyển tài liệu này thành tài liệu cá nhân trong thư viện số?", + "item.edit.private.error": "Đã có lỗi xảy ra trong khi chuyển tài liệu sang chế độ cá nhân", + "item.edit.private.header": "Chuyển tài liệu: {{ id }} thành tài liệu cá nhân", + "item.edit.private.success": "Tài liệu bây giờ đã trở thành tài liệu cá nhân", + "item.edit.public.cancel": "Hủy", + "item.edit.public.confirm": "Chuyển thành tài liệu công cộng", + "item.edit.public.description": "Bạn có chắc chắn muốn chuyển tài liệu này thành tài liệu công cộng trong thư viện số?", + "item.edit.public.error": "Đã có lỗi xảy ra trong khi chuyển tài liệu sang chế độ công cộng", + "item.edit.public.header": "Chuyển tài liệu: {{ id }} thành tài liệu công cộng", + "item.edit.public.success": "Tài liệu bây giờ đã trở thành tài liệu công cộng", + "item.edit.reinstate.cancel": "Hủy", + "item.edit.reinstate.confirm": "Khôi phục", + "item.edit.reinstate.description": "Bạn có chắc chắn tài liệu này nên được khôi phục trong thư viện số?", + "item.edit.reinstate.error": "Đã có lỗi xảy ra trong khi khôi phục tài liệu này", + "item.edit.reinstate.header": "Khôi phục tài liệu: {{ id }}", + "item.edit.reinstate.success": "Tài liệu này đã được khôi phục thành công", + "item.edit.relationships.discard-button": "Hủy bỏ", + "item.edit.relationships.edit.buttons.add": "Thêm", + "item.edit.relationships.edit.buttons.remove": "Xóa", + "item.edit.relationships.edit.buttons.undo": "Hoàn tác", + "item.edit.relationships.no-entity-type": "Thêm trường dữ liệu 'dspace.entity.type' để kích hoạt các mối quan hệ cho tài liệu này", + "item.edit.relationships.no-relationships": "Không có mối quan hệ nào", + "item.edit.relationships.notifications.discarded.content": "các thay đổi của bạn đã bị hủy bỏ. Để khôi phục các thay đổi này hãy nhấp vào nút 'Hoàn tác'", + "item.edit.relationships.notifications.discarded.title": "Các thay đổi đã bị hủy", + "item.edit.relationships.notifications.failed.title": "Lỗi khi chỉnh sửa mối quan hệ", + "item.edit.relationships.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn đã bị hủy bỏ để tránh xảy ra xung đột.", + "item.edit.relationships.notifications.outdated.title": "Các thay đổi không có hiệu lực", + "item.edit.relationships.notifications.saved.content": "Các thay đổi của bạn đối với các mối quan hệ của tài liệu này đã được lưu lại.", + "item.edit.relationships.notifications.saved.title": "Mối quan hệ đã được lưu lại", + "item.edit.relationships.reinstate-button": "Hoàn tác", + "item.edit.relationships.save-button": "Lưu", + "item.edit.return": "Quay lại", + "item.edit.tabs.bitstreams.head": "Tệp tin", + "item.edit.tabs.bitstreams.title": "Chỉnh sửa tài liệu - Tệp tin", + "item.edit.tabs.curate.head": "Kiểm tra dữ liệu", + "item.edit.tabs.curate.title": "Chỉnh sửa tài liệu - Kiểm tra dữ liệu", + "item.edit.tabs.disabled.tooltip": "Bạn không có quyền truy cập vào tab này", + "item.edit.tabs.item-mapper.title": "Chỉnh sửa tài liệu - Liên kết bộ sưu tập", + "item.edit.tabs.mapper.head": "Liên kết bộ sưu tập", + "item.edit.tabs.metadata.head": "Siêu dữ liệu", + "item.edit.tabs.metadata.title": "Chỉnh sửa tài liệu - Siêu dữ liệu", + "item.edit.tabs.relationships.head": "Mối quan hệ", + "item.edit.tabs.relationships.title": "Chỉnh sửa tài liệu - Mối quan hệ", + "item.edit.tabs.status.buttons.authorizations.button": "Phân quyền tài liệu", + "item.edit.tabs.status.buttons.authorizations.label": "Chỉnh sửa chính sách phân quyền của tài liệu", + "item.edit.tabs.status.buttons.delete.button": "Xóa vĩnh viễn", + "item.edit.tabs.status.buttons.delete.label": "Xóa tài liệu", + "item.edit.tabs.status.buttons.mappedCollections.button": "Bộ sưu tập đã liên kết", + "item.edit.tabs.status.buttons.mappedCollections.label": "Kiểm tra bộ sưu tập đã liên kết", + "item.edit.tabs.status.buttons.move.button": "Di chuyển tài liệu", + "item.edit.tabs.status.buttons.move.label": "Di chuyển tài liệu tới bộ sưu tập khác", + "item.edit.tabs.status.buttons.private.button": "Chuyển thành tài liệu cá nhân", + "item.edit.tabs.status.buttons.private.label": "Chuyển thành tài liệu cá nhân", + "item.edit.tabs.status.buttons.public.button": "Chuyển thành tài liệu công cộng", + "item.edit.tabs.status.buttons.public.label": "Chuyển tài liệu thành công cộng", + "item.edit.tabs.status.buttons.reinstate.button": "Khôi phục", + "item.edit.tabs.status.buttons.reinstate.label": "Khôi phục tài liệu vào kho lưu trữ", + "item.edit.tabs.status.buttons.unauthorized": "Bạn không có quyền thực hiện hành động này", + "item.edit.tabs.status.buttons.withdraw.button": "Ẩn", + "item.edit.tabs.status.buttons.withdraw.label": "Ẩn tài liệu khỏi kho lưu trữ", + "item.edit.tabs.status.description": "Chào mừng bạn đến với trang quản lý tài liệu. Từ đây bạn có thể ẩn khôi phục di chuyển hoặc xóa tài liệu. Bạn cũng có thể cập nhật hoặc nhập thêm trường dữ liệu mới tải thêm tệp tin trên những tab khác.", + "item.edit.tabs.status.head": "Trạng thái", + "item.edit.tabs.status.labels.handle": "Handle", + "item.edit.tabs.status.labels.bundleName": "Bundle name", + "item.edit.tabs.status.labels.id": "ID tài liệu", + "item.edit.tabs.status.labels.itemPage": "Trang tài liệu", + "item.edit.tabs.status.labels.lastModified": "Chỉnh sửa lần cuối", + "item.edit.tabs.status.title": "Chỉnh sửa tài liệu - Trạng thái", + "item.edit.tabs.versionhistory.head": "Lịch sử phiên bản", + "item.edit.tabs.versionhistory.title": "Chỉnh sửa tài liệu - Lịch sử phiên bản", + "item.edit.tabs.versionhistory.under-construction": "Chưa thể chỉnh sửa hoặc tạo thêm phiên bản trên giao diện người dùng này.", + "item.edit.tabs.view.head": "Xem tài liệu", + "item.edit.tabs.view.title": "Chỉnh sửa tài liệu - Xem", + "item.edit.withdraw.cancel": "Hủy", + "item.edit.withdraw.confirm": "Ẩn", + "item.edit.withdraw.description": "Bạn có chắc chắn muốn ẩn tài liệu này khỏi kho lưu trữ?", + "item.edit.withdraw.error": "Đã có lỗi xảy ra trong khi thực hiện ẩn tài liệu này", + "item.edit.withdraw.header": "Ẩn tài liệu: {{ id }}", + "item.edit.withdraw.success": "Tài liệu này đã được ẩn thành công", + "item.listelement.badge": "Tài liệu", + "item.orcid.return": "Quay lại", + "item.page.name": "Tên", + "item.page.abstract": "Tóm tắt", + "item.page.author": "Tác giả", + "item.page.bitstreams.collapse": "Thu hẹp", + "item.page.bitstreams.view-more": "Hiển thị thêm", + "item.page.citation": "Trích dẫn", + "item.page.claim.button": "Nhận nhiệm vụ", + "item.page.claim.tooltip": "Nhận nhiệm vụ tài liệu này", + "item.page.collections": "Bộ sưu tập", + "item.page.collections.loading": "Đang tải…", + "item.page.collections.load-more": "Xem thêm", + "item.page.date": "Năm xuất bản", + "item.page.description": "Mô tả", + "item.page.edit": "Chỉnh sửa tài liệu này", + "item.page.files": "Tệp tin", + "item.page.filesection.description": "Mô tả:", + "item.page.filesection.download": "Tải xuống", + "item.page.filesection.view": "Xem trực tuyến", + "item.page.filesection.format": "Định dạng:", + "item.page.filesection.license.bundle": "Tập tin giấy phép", + "item.page.filesection.name": "Tên:", + "item.page.filesection.original.bundle": "Tập tin chính của tài liệu", + "item.page.filesection.size": "Dung lượng:", + "item.page.journal.search.title": "Bài viết trong tạp chí này", + "item.page.journal-issn": "ISSN", + "item.page.journal-title": "Nhan đề tạp chí", + "item.page.link.full": "Hiển thị chi tiết", + "item.page.link.simple": "Hiển thị đơn giản", + "item.page.orcid.title": "ORCID", + "item.page.orcid.tooltip": "Mở trang cài đặt ORCID", + "item.page.person.search.title": "Bài viết của tác giả này", + "item.page.publisher": "Nhà xuất bản", + "item.page.related-items.view-less": "Ẩn {{ amount }} tài liệu cuối", + "item.page.related-items.view-more": "Hiển thị thêm {{ amount }} tài liệu", + "item.page.relationships.isAuthorOfPublication": "Ấn phẩm", + "item.page.relationships.isJournalOfPublication": "Ấn phẩm", + "item.page.relationships.isOrgUnitOfPerson": "Tác giả", + "item.page.relationships.isOrgUnitOfProject": "Dự án nghiên cứu", + "item.page.return": "Quay lại", + "item.page.subject": "Từ khóa chủ đề", + "item.page.titleprefix": "Tài liệu:", + "item.page.uri": "URL", + "item.page.version.create": "Tạo phiên bản mới", + "item.page.version.hasDraft": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", + "item.page.volume-title": "Nhan đề tập", + "item.preview.dc.contributor.author": "Tác giả:", + "item.preview.dc.coverage.spatial": "Quyền hạn:", + "item.preview.dc.date.issued": "Năm xuất bản:", + "item.preview.dc.description.abstract": "Tóm tắt:", + "item.preview.dc.identifier": "Định danh:", + "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.other": "Định danh khác:", + "item.preview.dc.identifier.uri": "Định danh:", + "item.preview.dc.language.iso": "Ngôn ngữ:", + "item.preview.dc.relation.ispartof": "Tạp chí hoặc Ấn phẩm định kỳ", + "item.preview.dc.relation.issn": "ISSN", + "item.preview.dc.subject": "Chủ đề:", + "item.preview.dc.title": "Nhan đề:", + "item.preview.dc.title.alternative": "Viết tắt:", + "item.preview.dc.type": "Loại hình tài liệu:", + "item.preview.oaire.awardNumber": "ID quỹ:", + "item.preview.oaire.citation.issue": "Kỳ ấn phẩm", + "item.preview.oaire.citation.volume": "Tập", + "item.preview.oaire.fundingStream": "Dòng quỹ:", + "item.preview.person.familyName": "Họ:", + "item.preview.person.givenName": "Tên:", + "item.preview.person.identifier.orcid": "ORCID:", + "item.preview.project.funder.identifier": "Định danh nhà tài trợ:", + "item.preview.project.funder.name": "Nhà tài trợ:", + "item.search.results.head": "Kết quả tìm kiếm tài liệu", + "item.search.title": "Tìm kiếm tài liệu", + "item.select.confirm": "Xác nhận cái đã chọn", + "item.select.empty": "Không có tài liệu để hiển thị", + "item.select.table.author": "Tác giả", + "item.select.table.collection": "Bộ sưu tập", + "item.select.table.title": "Nhan đề", + "item.truncatable-part.show-less": "Thu hẹp", + "item.truncatable-part.show-more": "Xem thêm", + "item.version.create.modal.button.cancel": "Hủy", + "item.version.create.modal.button.cancel.tooltip": "Không thể tạo phiên bản mới", + "item.version.create.modal.button.confirm": "Tạo", + "item.version.create.modal.button.confirm.tooltip": "Tạo phiên bản mới", + "item.version.create.modal.form.summary.label": "Thông tin tổng quan", + "item.version.create.modal.form.summary.placeholder": "Thêm thông tin mô tả cho phiên bản mới", + "item.version.create.modal.header": "Phiên bản mới", + "item.version.create.modal.submitted.header": "Tạp phiên bản mới…", + "item.version.create.modal.submitted.text": "Phiên bản mới đang được tạo. Có thể mất một chút thời gian để hoàn tất nếu tài liệu có nhiều mối quan hệ.", + "item.version.create.modal.text": "Tạo phiên bản mới cho tài liệu này", + "item.version.create.modal.text.startingFrom": "bắt đầu từ phiên bản {{version}}", + "item.version.create.notification.failure": "Phiên bản mới chưa được tạo", + "item.version.create.notification.inProgress": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", + "item.version.create.notification.success": "Phiên bản mới đã được tạo với mã số phiên bản là {{version}}", + "item.version.delete.modal.button.cancel": "Hủy", + "item.version.delete.modal.button.cancel.tooltip": "Không xóa phiên bản này", + "item.version.delete.modal.button.confirm": "Xóa", + "item.version.delete.modal.button.confirm.tooltip": "Xóa phiên bản này", + "item.version.delete.modal.header": "Xóa phiên bản", + "item.version.delete.modal.text": "Bạn có muốn xóa phiên bản {{version}}?", + "item.version.delete.notification.failure": "Phiên bản {{version}} chưa bị xóa", + "item.version.delete.notification.success": "Phiên bản {{version}} đã được xóa", + "item.version.edit.notification.failure": "Thông tin tổng quan của phiên bản {{version}} chưa được thay đổi", + "item.version.edit.notification.success": "Thông tin tổng quan của phiên bản {{version}} đã được thay đổi", + "item.version.history.empty": "Chưa có phiên bản nào khác của tài liệu này.", + "item.version.history.head": "Lịch sử phiên bản", + "item.version.history.return": "Quay lại", + "item.version.history.selected": "Phiên bản đã chọn", + "item.version.history.selected.alert": "Hiện tại bạn đang xem phiên bản {{version}} của tài liệu này.", + "item.version.history.table.action.deleteVersion": "Xóa phiên bản", + "item.version.history.table.action.discardSummary": "Hủy chỉnh sửa", + "item.version.history.table.action.editSummary": "Chỉnh sửa thông tin tổng quan", + "item.version.history.table.action.editWorkspaceItem": "Chỉnh sửa biểu ghi đang biên mục", + "item.version.history.table.action.hasDraft": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", + "item.version.history.table.action.newVersion": "Tạo phiên bản mới từ tài liệu này", + "item.version.history.table.action.saveSummary": "Lưu", + "item.version.history.table.actions": "Hành động", + "item.version.history.table.date": "Thời gian xuất bản", + "item.version.history.table.editor": "Người biên tập", + "item.version.history.table.item": "Tài liệu", + "item.version.history.table.summary": "Tóm tắt", + "item.version.history.table.version": "Phiên bản", + "item.version.history.table.workflowItem": "Đang kiểm duyệt", + "item.version.history.table.workspaceItem": "Đang biên mục", + "item.version.notice": "Đây không phải là phiên bản mới nhất của tài liệu này. Phiên bản mới nhất có thể xem tại đây.", + + "itemtemplate.edit.metadata.add-button": "Add", + + "itemtemplate.edit.metadata.discard-button": "Discard", + + "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + + "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + + "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + + "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + + "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + + "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + + "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + + "itemtemplate.edit.metadata.headers.edit": "Edit", + + "itemtemplate.edit.metadata.headers.field": "Field", + + "itemtemplate.edit.metadata.headers.language": "Lang", + + "itemtemplate.edit.metadata.headers.value": "Value", + + "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + + "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + + "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + + "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", + + "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + + "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + + "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + + "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + + "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", + + "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + + "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + + "itemtemplate.edit.metadata.reinstate-button": "Undo", + + "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + + "itemtemplate.edit.metadata.save-button": "Save", + + + "journal.listelement.badge": "Tạp chí", + "journal.page.description": "Mô tả", + "journal.page.edit": "Chỉnh sửa tài liệu này", + "journal.page.editor": "Tổng biên tập", + "journal.page.issn": "ISSN", + "journal.page.publisher": "Nhà xuất bản", + "journal.page.titleprefix": "Tạp chí:", + "journal.search.results.head": "Kết quả tìm kiếm tạp chí", + "journal.search.title": "Tìm kiếm tạp chí", + "journalissue.listelement.badge": "Kỳ của tạp chí", + "journalissue.page.description": "Mô tả", + "journalissue.page.abstract": "Tóm tắt", + "journalissue.page.edit": "Chỉnh sửa tài liệu này", + "journalissue.page.issuedate": "Ngày xuất bản", + "journalissue.page.journal-issn": "ISSN", + "journalissue.page.journal-title": "Nhan đề tạp chí", + "journalissue.page.keyword": "Từ khóa chủ đề", + "journalissue.page.number": "Số lượng", + "journalissue.page.titleprefix": "Kỳ của tạp chí:", + "journal-relationships.search.results.head": "Kết quả tìm kiếm tạp chí", + "journalvolume.listelement.badge": "Tập của tạp chí", + "journalvolume.page.description": "Mô tả", + "journalvolume.page.edit": "Chỉnh sửa tài liệu này", + "journalvolume.page.issuedate": "Ngày xuất bản", + "journalvolume.page.titleprefix": "Tập của tạp chí:", + "journalvolume.page.volume": "Tập", + + + "iiif.listelement.badge": "Phương tiện hình ảnh", + "iiif.page.description": "Mô tả:", + "iiif.page.doi": "Đường dẫn cố định:", + "iiif.page.issue": "Vấn đề:", + "iiif.page.titleprefix": "Hình ảnh:", + "iiifsearchable.listelement.badge": "Phương tiện biểu ghi", + "iiifsearchable.page.description": "Mô tả:", + "iiifsearchable.page.doi": "Đường dẫn cố định:", + "iiifsearchable.page.issue": "Vấn đề:", + "iiifsearchable.page.titleprefix": "Tài liệu:", + "iiifviewer.fullscreen.notice": "Sử dụng chế độ toàn màn hình để xem tốt hơn.", + + "loading.bitstream": "Đang tải tệp tin...", + "loading.bitstreams": "Đang tải tệp tin...", + "loading.browse-by": "Đang tải tài liệu...", + "loading.browse-by-page": "Đang tải trang...", + "loading.collection": "Đang tải bộ sưu tập...", + "loading.collections": "Đang tải bộ sưu tập...", + "loading.community": "Đang tải đơn vị...", + "loading.content-source": "Đang tải nguồn nội dung...", + "loading.default": "Đang tải...", + "loading.item": "Đang tải tài liệu...", + "loading.items": "Đang tải tài liệu...", + "loading.mydspace-results": "Đang tải tài liệu...", + "loading.objects": "Đang tải...", + "loading.recent-submissions": "Đang tải các tài liệu mới gần đây...", + "loading.search-results": "Đanh tải kết quả tìm kiếm...", + "loading.sub-collections": "Đang tải bộ sưu tập con...", + "loading.sub-communities": "Đang tải đơn vị con...", + "loading.top-level-communities": "Đang tải các đơn vị lớn...", + + "login.breadcrumbs": "Đăng nhập", + "login.form.email": "Địa chỉ email", + "login.form.forgot-password": "Có phải bạn quên mật khẩu?", + "login.form.header": "Vui lòng đăng nhập vào DSpace", + "login.form.new-user": "Bạn là người dùng mới? \n Vui lòng nhấp vào đây để đăng kí.", + "login.form.oidc": "Đăng nhập với OIDC", + "login.form.orcid": "Đăng nhập với ORCID", + "login.form.or-divider": "hoặc", + "login.form.password": "Mật khẩu", + "login.form.shibboleth": "Đăng nhập bằng Shibboleth", + "login.form.submit": "Đăng nhập", + "login.title": "Đăng nhập", + + "logout.form.header": "Đăng xuất khỏi DSpace", + "logout.form.submit": "Đăng xuất", + "logout.title": "Đăng xuất", + + "menu.header.admin": "Quản trị", + "menu.header.admin.description": "Menu quản trị", + "menu.header.image.logo": "Logo của kho lưu trữ", + + "menu.section.access_control": "Người dùng và nhóm người dùng", + "menu.section.access_control_authorizations": "Chính sách phân quyền", + "menu.section.access_control_groups": "Nhóm người dùng", + "menu.section.access_control_people": "Người dùng", + "menu.section.admin_search": "Tìm kiếm quản trị", + "menu.section.browse_community": "Đơn vị này", + "menu.section.browse_community_by_author": "Tác giả", + "menu.section.browse_community_by_issue_date": "Năm xuất bản", + "menu.section.browse_community_by_title": "Nhan đề", + "menu.section.browse_global": "Duyệt tìm", + "menu.section.browse_global_by_author": "Tác giả", + "menu.section.browse_global_by_dateissued": "Năm xuất bản", + "menu.section.browse_global_by_subject": "Chủ đề", + "menu.section.browse_global_by_title": "Nhan đề", + "menu.section.browse_global_communities_and_collections": "Đơn vị & Bộ sưu tập", + "menu.section.control_panel": "Bảng điều khiển", + "menu.section.curation_task": "Kiểm tra dữ liệu", + "menu.section.edit": "Chỉnh sửa", + "menu.section.edit_collection": "Bộ sưu tập", + "menu.section.edit_community": "Đơn vị", + "menu.section.edit_item": "Tài liệu", + "menu.section.export": "Trích xuất", + "menu.section.export_batch": "Xuất dữ liệu (ZIP)", + "menu.section.export_collection": "Bộ sưu tập", + "menu.section.export_community": "Đơn vị", + "menu.section.export_item": "Tài liệu", + "menu.section.export_metadata": "Siêu dữ liệu", + "menu.section.health": "Kiểm tra hệ thống", + "menu.section.icon.access_control": "Phần menu của mục Người dùng và Nhóm người dùng", + "menu.section.icon.admin_search": "Phần menu của mục Tìm kiếm quản trị", + "menu.section.icon.control_panel": "Phần menu của mục Bảng điều khiển", + "menu.section.icon.curation_tasks": "Phần menu của Nhiệm vụ kiểm tra", + "menu.section.icon.edit": "Phần menu của mục Chỉnh sửa", + "menu.section.icon.export": "Phần menu của mục Trích xuất dữ liệu", + "menu.section.icon.find": "Phần menu của mục Tìm kiếm", + "menu.section.icon.health": "Phần menu của mục Kiểm tra hệ thống", + "menu.section.icon.import": "Phần menu của mục Nhập dữ liệu", + "menu.section.icon.new": "Phần menu của mục Tạo mới", + "menu.section.icon.pin": "Ghim thanh quản trị", + "menu.section.icon.processes": "Phần menu của mục Tiến trình", + "menu.section.icon.registries": "Phần menu của mục Thống số chung", + "menu.section.icon.statistics_task": "Phần menu của mục Nhiệm vụ báo cáo thống kê", + "menu.section.icon.unpin": "Bỏ ghim thanh quản trị", + "menu.section.icon.workflow": "Phần menu của mục Quản trị luồng công việc", + "menu.section.import": "Nhập dữ liệu", + "menu.section.import_batch": "Nhập liệu theo lô (ZIP)", + "menu.section.import_metadata": "Siêu dữ liệu", + "menu.section.new": "Tạo mới", + "menu.section.new_collection": "Bộ sưu tập", + "menu.section.new_community": "Đơn vị", + "menu.section.new_item": "Tài liệu", + "menu.section.new_item_version": "Phiên bản tài liệu", + "menu.section.new_process": "Tiến trình", + "menu.section.pin": "Ghim thanh quản trị", + "menu.section.policies_metadata": "Chính sách phân quyền", + "menu.section.processes": "Tiến trình", + "menu.section.registries": "Thông số chung", + "menu.section.registries_format": "Định dạng tệp tin số", + "menu.section.registries_metadata": "Trường dữ liệu", + "menu.section.statistics": "Báo cáo thống kê", + "menu.section.statistics_admin": "Báo cáo thống kê", + "menu.section.statistics_admin_metadata": "Báo cáo thống kê", + "menu.section.statistics_task": "Nhiệm vụ báo cáo thống kê", + "menu.section.toggle.access_control": "Phần chuyển đổi Người dùng và Nhóm người dùng", + "menu.section.toggle.control_panel": "Phần chuyển đổi Bảng điều khiển", + "menu.section.toggle.curation_task": "Phần chuyển đổi Kiểm tra dữ liệu", + "menu.section.toggle.edit": "Phần chuyển đổi Chỉnh sửa", + "menu.section.toggle.export": "Phần chuyển đổi Trích xuất dữ liệu", + "menu.section.toggle.find": "Phần chuyển đổi Tìm kiếm", + "menu.section.toggle.import": "Phần chuyển đổi Nhập dữ liệu", + "menu.section.toggle.new": "Phần chuyển đổi Tạo mới", + "menu.section.toggle.registries": "Phần chuyển đổi thông số chung", + "menu.section.toggle.statistics_task": "Phần chuyển đổi Nhiệm vụ Báo cáo thống kê", + "menu.section.unpin": "Bỏ ghim thanh quản trị", + "menu.section.workflow": "Quản trị dòng công việc", + + "metadata-export-search.submit.error": "Xảy ra lỗi trong quá trình xuất dữ liệu", + "metadata-export-search.submit.success": "Quá trình xuất dữ liệu đã được khởi chạy thành công", + "metadata-export-search.tooltip": "Xuất kết quả tìm kiếm ra CSV", + + "mydspace.breadcrumbs": "Trang cá nhân", + "mydspace.messages.controller-help": "Chọn tùy chọn này để gửi tin nhắn tới người biên mục tài liệu.", + "mydspace.messages.description-placeholder": "Thêm tin nhắn của bạn tại đây...", + "mydspace.messages.hide-msg": "Ẩn tin nhắn", + "mydspace.messages.mark-as-read": "Đánh dấu đã đọc", + "mydspace.messages.mark-as-unread": "Đánh dấu chưa đọc", + "mydspace.messages.no-content": "Không có nội dung.", + "mydspace.messages.no-messages": "Không có tin nhắn nào.", + "mydspace.messages.send-btn": "Gửi", + "mydspace.messages.show-msg": "Hiển thị tin nhắn", + "mydspace.messages.subject-placeholder": "Chủ đề...", + "mydspace.messages.submitter-help": "Chọn tùy chọn này để gửi tin nhắn tới người quản trị.", + "mydspace.messages.title": "Tin nhắn", + "mydspace.messages.to": "Tới", + "mydspace.new-submission": "Tạo tài liệu mới", + "mydspace.new-submission-external": "Nhập thông tin mô tả từ nguồn bên ngoài", + "mydspace.new-submission-external-short": "Nhập thông tin mô tả", + "mydspace.results.head": "Tài liệu của tôi", + "mydspace.results.no-abstract": "Không có tóm tắt", + "mydspace.results.no-authors": "Không có tác giả", + "mydspace.results.no-collections": "Không có bộ sưu tập", + "mydspace.results.no-date": "Không có thời gian xuất bản", + "mydspace.results.no-files": "Không có tệp đính kèm", + "mydspace.results.no-results": "Không có tài liệu để hiển thị", + "mydspace.results.no-title": "Không có nhan đề", + "mydspace.results.no-uri": "Không có URL", + "mydspace.search-form.placeholder": "Tìm kiếm trong trang cá nhân của tôi...", + "mydspace.show.workflow": "Tất cả nhiệm vụ", + "mydspace.show.workspace": "Tài liệu của tôi", + "mydspace.status.archived": "Đã lưu trữ", + "mydspace.status.validation": "Đang kiểm tra", + "mydspace.status.waiting-for-controller": "Đợi nhận nhiệm vụ", + "mydspace.status.workflow": "Đang kiểm duyệt", + "mydspace.status.workspace": "Đang biên mục", + "mydspace.title": "Trang cá nhân", + "mydspace.upload.upload-failed": "Có lỗi xảy ra khi tạo tài liệu mới. Vui lòng xác minh nội dung đã tải lên trước khi thử lại.", + "mydspace.upload.upload-failed-manyentries": "Không thể xử lý tệp tin. Có quá nhiều mục trong khi hệ thống chỉ cho phép một mục trong tệp tin.", + "mydspace.upload.upload-failed-moreonefile": "Không thể xử lý yêu cầu. Chỉ cho phép một tệp tin duy nhất.", + "mydspace.upload.upload-multiple-successful": "Đã tạo {{qty}} mục không gian làm việc mới.", + "mydspace.view-btn": "Xem chi tiết", + + "nav.browse.header": "Tất cả DSpace", + "nav.community-browse.header": "Theo Đơn vị", + "nav.language": "Chuyển ngôn ngữ", + "nav.login": "Đăng nhập", + "nav.logout": "Menu Hồ sơ cá nhân và Đăng xuất", + "nav.main.description": "Thanh điều hướng chính", + "nav.mydspace": "Trang cá nhân", + "nav.profile": "Hồ sơ cá nhân", + "nav.search": "Tìm kiếm", + "nav.statistics.header": "Báo cáo thống kê", + "nav.stop-impersonating": "Ngừng giả danh Người dùng", + "nav.toggle": "Điều hướng chuyển", + "nav.user.description": "Thanh hồ sơ người dùng", + "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", + + "none.listelement.badge": "Tài liệu", + + "orgunit.listelement.badge": "Đơn vị\/Tổ chức", + "orgunit.listelement.no-title": "Không có nhan đề", + "orgunit.page.city": "Thành phố", + "orgunit.page.country": "Quốc gia", + "orgunit.page.dateestablished": "Ngày thành lập", + "orgunit.page.description": "Mô tả", + "orgunit.page.edit": "Chỉnh sửa tài liệu", + "orgunit.page.id": "ID", + "orgunit.page.titleprefix": "Đơn vị\/Tổ chức", + + "pagination.next.button": "Tiếp theo", + "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", + "pagination.options.description": "Tùy chọn Phân trang", + "pagination.previous.button": "Quay lại", + "pagination.results-per-page": "Số kết quả\/trang", + "pagination.showing.detail": "{{ range }} của tổng số {{ total }} kết quả", + "pagination.showing.label": "Đang hiển thị ", + "pagination.sort-direction": "Tùy chọn sắp xếp", + + "person.listelement.badge": "Nhà nghiên cứu", + "person.listelement.no-title": "Không tìm thấy tên", + "person.orcid.registry.auth": "Được phép qua ORCID ", + "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", + "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", + "person.page.birthdate": "Ngày sinh", + "person.page.edit": "Chỉnh sửa tài liệu", + "person.page.email": "Email", + "person.page.firstname": "Tên", + "person.page.jobtitle": "Chức vụ", + "person.page.abtract": "Tiểu sử", + "person.page.description": "Mô tả", + "person.page.lastname": "Họ", + "person.page.link.full": "Hiển thị chi tiết", + "person.page.name": "Tên", + "person.page.orcid": "ORCID", + "person.page.orcid.create": "Tạo một ID trên ORCID", + "person.page.orcid.funding-preferences": "Quỹ ưa thích", + "person.page.orcid.grant-authorizations": "Cấp quyền", + "person.page.orcid.granted-authorizations": "Quyền đã cấp", + "person.page.orcid.link": "Liên kết với ID ORCID", + "person.page.orcid.link.error.message": "Đã xảy ra lỗi khi kết nối hồ sơ với ORCID. Nếu sự cố vẫn tiếp tục xảy ra vui lòng liên hệ với quản trị viên.", + "person.page.orcid.link.processing": "Đang kết nối hồ sơ tới ORCID…", + "person.page.orcid.missing-authorizations": "Thiếu quyền", + "person.page.orcid.missing-authorizations-message": "Những quyền sau đang bị thiếu:", + "person.page.orcid.no-missing-authorizations-message": "Tuyệt! Ô này đang trống vì vậy bạn đã được cấp tất cả các quyền truy cập để sử dụng tất cả các chức năng do tổ chức của bạn cung cấp.", + "person.page.orcid.no-orcid-message": "Chưa có ID ORCID nào được liên kết. Bạn có thể click vào nút dưới đây để liên kết hồ sơ này với một tài khoản ORCID.", + "person.page.orcid.orcid-not-linked-message": "ID ORCID của hồ sơ này ({{ orcid }}) chưa được kết nối với tài khoản trên trang ORCID hoặc kết nối đã hết hạn.", + "person.page.orcid.profile-preferences": "Tham số của hồ sơ", + "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", + "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", + "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", + "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", + "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", + "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", + "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", + "person.page.orcid.sync-fundings.all": "Tất cả quỹ", + "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-fundings.mine": "Quỹ của tôi", + "person.page.orcid.sync-fundings.my_selected": "Quỹ đã chọn", + "person.page.orcid.synchronization-mode": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.batch": "Theo lô", + "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.manual": "Thủ công", + "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", + "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", + "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", + "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", + "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", + "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", + "person.page.orcid.sync-profile.affiliation": "Tổ chức", + "person.page.orcid.sync-profile.biographical": "Dữ liệu sinh trắc học", + "person.page.orcid.sync-profile.education": "Giáo dục", + "person.page.orcid.sync-profile.identifiers": "Định danh", + "person.page.orcid.sync-publications.all": "Tất cả ấn phẩm", + "person.page.orcid.sync-publications.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-publications.mine": "Ấn phẩm của tôi", + "person.page.orcid.sync-publications.my_selected": "Ấn phẩm đã chọn", + "person.page.orcid.sync-queue.description.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.description.country": "Quốc gia", + "person.page.orcid.sync-queue.description.education": "Giáo dục", + "person.page.orcid.sync-queue.description.external_ids": "ID ngoài", + "person.page.orcid.sync-queue.description.keywords": "Từ khóa", + "person.page.orcid.sync-queue.description.other_names": "Tên khác", + "person.page.orcid.sync-queue.description.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.description.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.discard": "Hủy thay đổi và không đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.discard.error": "Việc loại bỏ biểu ghi trong danh sách chờ của ORCID đã thất bại", + "person.page.orcid.sync-queue.discard.success": "Biểu ghi trong danh sách chờ của ORCID đã được hủy bỏ thành công", + "person.page.orcid.sync-queue.empty-message": "Danh sách chờ ORCID trống", + "person.page.orcid.sync-queue.send": "Đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.send.bad-request-error": "Đẩy dữ liệu lên ORCID không thành công vì tài nguyên này không hợp lệ", + "person.page.orcid.sync-queue.send.conflict-error": "Đẩy dữ liệu lên ORCID không thành công bởi vì tài nguyên này đã có trên trang ORCID", + "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", + "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", + "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", + "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "2 ký tự mã quốc gia theo ISO 3166 là không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Cần có số định danh (ID) để phân biệt giữa các tổ chức. ID được hỗ trợ là GRID Ringgold LEI và số định dang Cơ quan đăng ký Crossref Funder", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Định danh của tổ chức yêu cầu phải có một giá trị", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Nguồn của một trong các số định danh của tổ chức không hợp lệ. Các nguồn được hỗ trợ là RINGGOLD GRID LEI và FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Phải có một nguồn cho định danh của tổ chức", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Tài nguyên được gửi yêu cầu phải có ít nhất một định danh", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Nhà tài trợ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Tổ chức này yêu cầu phải có địa chỉ", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Địa chỉ của tổ chức này phải là một thành phố", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Địa chỉ của tổ chức này phải là một mã quốc gia bao gồm 2 ký tự theo ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Tên của tổ chức là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Yêu cầu phải có tổ chức", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Năm xuất bản phải là năm sau năm 1900", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Ngày bắt đầu là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Nhan đề là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.type.required": "Trường dc.type là bắt buộc", + "person.page.orcid.sync-queue.table.header.action": "Hành động", + "person.page.orcid.sync-queue.table.header.description": "Mô tả", + "person.page.orcid.sync-queue.table.header.type": "Loại hình tài liệu", + "person.page.orcid.sync-queue.tooltip.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.tooltip.country": "Quốc gia", + "person.page.orcid.sync-queue.tooltip.delete": "Loại bỏ mục này khỏi trang ORCID", + "person.page.orcid.sync-queue.tooltip.education": "Giáo dục", + "person.page.orcid.sync-queue.tooltip.external_ids": "Định danh ", + "person.page.orcid.sync-queue.tooltip.insert": "Thêm mục mới trong ORCID", + "person.page.orcid.sync-queue.tooltip.keywords": "Từ khóa", + "person.page.orcid.sync-queue.tooltip.other_names": "Tên khác", + "person.page.orcid.sync-queue.tooltip.project": "Dự án", + "person.page.orcid.sync-queue.tooltip.publication": "Ấn phẩm", + "person.page.orcid.sync-queue.tooltip.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.tooltip.update": "Cập nhật mục này trên trang ORCID", + "person.page.orcid.unlink": "Ngắt kết nối khỏi ORCID", + "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", + "person.page.orcid.unlink.processing": "Đang xử lý…", + "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", + "person.page.staffid": "ID nhân viên", + "person.page.titleprefix": "Nhà nghiên cứu", + "person.search.results.head": "Kết quả tìm kiếm Nhà nghiên cứu", + "person.search.title": "Tìm kiếm Nhà nghiên cứu", + "person-relationships.search.results.head": "Kết quả tìm kiếm Tác giả\/Nhà nghiên cứu", + + "process.bulk.delete.error.body": "Không thể xóa tiến trình có ID {{ processId}}. Các tiến trình còn lại sẽ tiếp tục bị xóa.", + "process.bulk.delete.error.head": "Đã xảy ra lỗi khi xóa tiến trình", + "process.detail.actions": "Hành động", + "process.detail.arguments": "Tham số", + "process.detail.arguments.empty": "Tiến trình này không chứa bất kì tham số nào", + "process.detail.back": "Quay lại", + "process.detail.create": "Tạo tiến trình tương tự", + "process.detail.delete.body": "Bạn có chắc chắn muốn xóa tiến trình hiện tại?", + "process.detail.delete.button": "Xóa tiến trình", + "process.detail.delete.cancel": "Hủy", + "process.detail.delete.confirm": "Xóa tiến trình", + "process.detail.delete.error": "Đã xảy ra sự cố trong khi xóa tiến trình", + "process.detail.delete.header": "Xóa tiến trình", + "process.detail.delete.success": "Tiến trình đã được xóa thành công.", + "process.detail.end-time": "Thời gian kết thúc", + "process.detail.logs.button": "Tìm kiếm đầu ra của tiến trình", + "process.detail.logs.loading": "Đang tìm kiếm", + "process.detail.logs.none": "Tiến trình này không có đầu ra nào", + "process.detail.output": "Đầu ra của tiến trình", + "process.detail.output-files": "Tệp tin đầu ra", + "process.detail.output-files.empty": "Tiến trình này không chứa tệp tin đầu ra nào", + "process.detail.script": "Tập lệnh", + "process.detail.start-time": "Thời gian bắt đầu", + "process.detail.status": "Trạng thái", + "process.detail.title": "Tiến trình: {{ id }} - {{ name }}", + "process.new.breadcrumbs": "Tạo tiến trình mới", + "process.new.cancel": "Hủy", + "process.new.header": "Tạo tiến trình mới", + "process.new.notification.error.content": "Đã có lỗi xảy ra trong khi tạo tiến trình", + "process.new.notification.error.title": "Lỗi", + "process.new.notification.success.content": "Tiến trình đã được thực hiện thành công", + "process.new.notification.success.title": "Thành công", + "process.new.parameter.file.required": "Vui lòng chọn một tệp tin", + "process.new.parameter.file.upload-button": "Chọn tệp tin...", + "process.new.parameter.required.missing": "Các tham số bắt buộc sau đang bị thiếu:", + "process.new.parameter.string.required": "Giá trị tham số là bắt buộc", + "process.new.parameter.type.file": "tệp tin", + "process.new.parameter.type.value": "giá trị", + "process.new.select-parameters": "Tham số", + "process.new.select-script": "Tập lệnh", + "process.new.select-script.placeholder": "Chọn một tập lệnh...", + "process.new.select-script.required": "Tập lệnh là bắt buộc", + "process.new.submit": "Lưu", + "process.new.title": "Tạo tiến trình mới", + "process.overview.breadcrumbs": "Tiến trình tổng quan", + "process.overview.delete": "Xóa {{count}} tiến trình", + "process.overview.delete.body": "Bạn có chắc chắn muốn xóa {{count}} tiến trình?", + "process.overview.delete.clear": "Xóa các tiến trình đã chọn", + "process.overview.delete.header": "Xóa", + "process.overview.new": "Tạo mới", + "process.overview.table.actions": "Hành động", + "process.overview.table.finish": "Thời gian kết thúc", + "process.overview.table.id": "ID tiến trình", + "process.overview.table.name": "Tên", + "process.overview.table.start": "Thời gian bắt đầu", + "process.overview.table.status": "Trạng thái", + "process.overview.table.user": "Người dùng", + "process.overview.title": "Tổng quan tiến trình", + + "profile.breadcrumbs": "Cập nhật hồ sơ", + "profile.card.identify": "Hồ sơ định danh", + "profile.card.researcher": "Định danh", + "profile.card.security": "Bảo mật", + "profile.form.submit": "Lưu", + "profile.groups.head": "Nhóm quyền của bạn", + "profile.head": "Cập nhật hồ sơ", + "profile.metadata.form.error.firstname.required": "Yêu cầu nhập Tên của người dùng", + "profile.metadata.form.error.lastname.required": "Yêu cầu nhập Họ của người dùng", + "profile.metadata.form.label.email": "Địa chỉ email", + "profile.metadata.form.label.firstname": "Tên", + "profile.metadata.form.label.language": "Ngôn ngữ", + "profile.metadata.form.label.lastname": "Họ", + "profile.metadata.form.label.phone": "Số điện thoại liên hệ", + "profile.metadata.form.notifications.success.content": "Cập nhật hồ sơ thành công .", + "profile.metadata.form.notifications.success.title": "Lưu hồ sơ", + "profile.notifications.warning.no-changes.content": "Không có thay đổi nào trên hồ sơ của bạn.", + "profile.notifications.warning.no-changes.title": "Không thay đổi", + "profile.security.form.error.matching-passwords": "Mật khẩu không khớp.", + "profile.security.form.info": "Nhập vào mật khẩu mới và xác nhận mật khẩu vào ô phía dưới. Độ dài tối thiểu của mật khẩu là 6 ký tự.", + "profile.security.form.label.current-password": "Mật khẩu hiện tại", + "profile.security.form.label.password": "Mật khẩu", + "profile.security.form.label.passwordrepeat": "Nhập lại mật khẩu để xác nhận", + "profile.security.form.notifications.error.change-failed": "Đã xảy ra lỗi khi thay đổi mật khẩu. Vui lòng kiểm tra lại tính chính xác của mật khẩu hiện tại.", + "profile.security.form.notifications.error.general": "Vui lòng điền vào các trường bắt buộc của biểu mẫu bảo mật.", + "profile.security.form.notifications.error.not-same": "Mật khẩu được cung cấp không giống nhau.", + "profile.security.form.notifications.error.title": "Thay đổi mật khẩu không thành công", + "profile.security.form.notifications.success.content": "Thay đổi mật khẩu thành công.", + "profile.security.form.notifications.success.title": "Đã lưu mật khẩu", + "profile.special.groups.head": "Phân quyền cho các nhóm đặc biệt mà bạn thuộc về", + "profile.title": "Cập nhật hồ sơ", + + "project.listelement.badge": "Dự án nghiên cứu", + "project.page.contributor": "Người tham gia", + "project.page.description": "Mô tả", + "project.page.edit": "Chỉnh sửa tài liệu", + "project.page.expectedcompletion": "Dự kiến hoàn thành", + "project.page.funder": "Nhà tài trợ", + "project.page.id": "ID", + "project.page.keyword": "Từ khóa", + "project.page.status": "Trạng thái", + "project.page.titleprefix": "Dự án nghiên cứu:", + "project.search.results.head": "Kết quả tìm kiếm dự án", + "project-relationships.search.results.head": "Kết quả tìm kiếm dự án", + + "publication.listelement.badge": "Ấn phẩm", + "publication.page.description": "Mô tả", + "publication.page.edit": "Chỉnh sửa tài liệu", + "publication.page.journal-issn": "ISSN tạp chí", + "publication.page.journal-title": "Nhan đề tạp chí", + "publication.page.publisher": "Nhà xuất bản", + "publication.page.titleprefix": "Ấn phẩm: ", + "publication.page.volume-title": "Nhan đề tập", + "publication.search.results.head": "Kết quả tìm kiếm ấn phẩm", + "publication.search.title": "Tìm kiếm ấn phẩm", + "publication-relationships.search.results.head": "Kết quả tìm kiếm ấn phẩm", + + "media-viewer.next": "Tiếp theot", + "media-viewer.playlist": "Danh sách phát", + "media-viewer.previous": "Quay lại", + + "register-email.title": "Đăng ký tài khoản mới", + "register-page.create-profile.header": "Tạo hồ sơ", + "register-page.create-profile.identification.contact": "Điện thoại liên hệ", + "register-page.create-profile.identification.email": "Địa chỉ email", + "register-page.create-profile.identification.first-name": "Tên *", + "register-page.create-profile.identification.first-name.error": "Nhập vào tên của người dùng", + "register-page.create-profile.identification.header": "Hồ sơ định danh", + "register-page.create-profile.identification.language": "Ngôn ngữ", + "register-page.create-profile.identification.last-name": "Họ *", + "register-page.create-profile.identification.last-name.error": "Nhập vào họ của người dùng", + "register-page.create-profile.security.error.empty-password": "Nhập mật khẩu vào ô phía dưới.", + "register-page.create-profile.security.error.matching-passwords": "Mật khẩu không khớp.", + "register-page.create-profile.security.header": "Bảo mật", + "register-page.create-profile.security.info": "Nhập vào mật khẩu mới và xác nhận mật khẩu vào ô phía dưới. Độ dài tối thiểu của mật khẩu là 6 ký tự.", + "register-page.create-profile.security.label.password": "Mật khẩu *", + "register-page.create-profile.security.label.passwordrepeat": "Nhập lại để xác nhận *", + "register-page.create-profile.submit": "Đăng ký thành công", + "register-page.create-profile.submit.error.content": "Đã có sự cố xảy ra khi đăng ký người dùng mới.", + "register-page.create-profile.submit.error.head": "Đăng ký lỗi", + "register-page.create-profile.submit.success.content": "Đăng ký thành công. Bạn đã đăng nhập với tư cách người dùng mới", + "register-page.create-profile.submit.success.head": "Đăng ký thành công", + "register-page.registration.email": "Địa chỉ email *", + "register-page.registration.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", + "register-page.registration.email.error.required": "Vui lòng nhập vào địa chỉ email", + "register-page.registration.email.hint": "Địa chỉ này sẽ được xác minh và dùng làm tên đăng nhập của bạn.", + "register-page.registration.error.content": "Đã xảy ra lỗi khi đăng ký địa chỉ email sau: {{ email }}", + "register-page.registration.error.head": "Lỗi khi đăng ký email", + "register-page.registration.error.recaptcha": "Lỗi khi thực hiện xác minh bằng recaptcha", + "register-page.registration.google-recaptcha.must-accept-cookies": "Để đăng ký bạn phải chấp nhận cookie Đăng ký và khôi phục mật khẩu<\/b> (Google reCaptcha).", + "register-page.registration.google-recaptcha.notification.message.error": "Xác minh đã hết hạn. Vui lòng xác minh lại.", + "register-page.registration.google-recaptcha.notification.message.expired": "Đã xảy ra lỗi trong quá trình xác minh reCaptcha", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.open-cookie-settings": "Mở phần cài đặt cookie", + "register-page.registration.header": "Đăng ký người dùng mới", + "register-page.registration.info": "Đăng ký tài khoản để nhận cập nhật mới về bộ sưu tập qua email và theo dõi tài liệu mới trên DSpace.", + "register-page.registration.submit": "Đăng ký", + "register-page.registration.success.content": "Một email sẽ được gửi đến địa chỉ email {{ email }} chứa liên kết xác nhận và các hướng dẫn khác.", + "register-page.registration.success.head": "Gửi email xác nhận", + + "relationships.add.error.relationship-type.content": "Không có kết quả nào phù hợp cho kiểu quan hệ {{ type }} giữa hai tài liệu", + "relationships.add.error.server.content": "Máy chủ trả về lỗi", + "relationships.add.error.title": "Không thể thêm mối quan hệ", + "relationships.isAuthorOf": "Tác giả", + "relationships.isAuthorOf.OrgUnit": "Tác giả (tổ chức)", + "relationships.isAuthorOf.Person": "Tác giả (người)", + "relationships.isContributorOf": "Người tham gia", + "relationships.isContributorOf.OrgUnit": "Người tham gia (Tổ chức)", + "relationships.isContributorOf.Person": "Người tham gia", + "relationships.isFundingAgencyOf.OrgUnit": "Nhà tài trợ", + "relationships.isIssueOf": "Số kỳ của tạp chí", + "relationships.isJournalIssueOf": "Số kỳ của tạp chí", + "relationships.isJournalOf": "Tạp chí", + "relationships.isOrgUnitOf": "Đơn vị tổ chức", + "relationships.isPersonOf": "Tác giả", + "relationships.isProjectOf": "Dự án nghiên cứu", + "relationships.isPublicationOf": "Ấn phẩm", + "relationships.isPublicationOfJournalIssue": "Bài báo", + "relationships.isSingleJournalOf": "Tạp chí", + "relationships.isSingleVolumeOf": "Số tập của tạp chí", + "relationships.isVolumeOf": "Số tập của tạp chí", + + "repository.image.logo": "Logo lưu trữ", + "repository.title.prefix": "Digital Library ::", + "repository.title.prefixDSpace": "Digital Library ::", + + "resource-policies.add.button": "Thêm", + "resource-policies.add.for.bitstream": "Thêm chính sách dữ liệu số mới", + "resource-policies.add.for.bundle": "Thêm chính sách gói dữ liệu mới", + "resource-policies.add.for.collection": "Thêm chính sách bộ sưu tập mới", + "resource-policies.add.for.community": "Thêm chính sách đơn vị mới", + "resource-policies.add.for.item": "Thêm chính sách tài liệu mới", + "resource-policies.create.page.failure.content": "Đã có lỗi xảy ra khi tạo chính sách tài nguyên.", + "resource-policies.create.page.heading": "Tạo chính sách tài nguyên mới cho", + "resource-policies.create.page.success.content": "Hành động thành công", + "resource-policies.create.page.title": "Tạp chính sách tài nguyên mới", + "resource-policies.delete.btn": "Xóa lựa chọn", + "resource-policies.delete.btn.title": "Xóa chính sách tài nguyên đã chọn", + "resource-policies.delete.failure.content": "Đã có lỗi xảy ra khi xóa chính sách tài nguyên đã lựa chọn.", + "resource-policies.delete.success.content": "Hành động thành công", + "resource-policies.edit.page.failure.content": "Đã có lỗi xảy ra khi chỉnh sửa chính sách tài nguyên.", + "resource-policies.edit.page.heading": "Chỉnh sửa chính sách tài nguyên", + "resource-policies.edit.page.other-failure.content": "Đã xảy ra lỗi khi chỉnh sửa chính sách phân quyền. Người dùng\/ nhóm người dùng đã được cập nhật thành công.", + "resource-policies.edit.page.success.content": "Hành động thành công", + "resource-policies.edit.page.target-failure.content": "Đã xảy ra lỗi khi chỉnh sửa người dùng\/ nhóm người dùng trong chính sách phân quyền.", + "resource-policies.edit.page.title": "Chỉnh sửa chính sách phân quyền", + "resource-policies.form.action-type.label": "Lựa chọn kiểu hành động", + "resource-policies.form.action-type.required": "Bạn cần phải lựa chọn hành động chính sách phân quyền.", + "resource-policies.form.date.end.label": "Ngày kết thúc", + "resource-policies.form.date.start.label": "Ngày bắt đầu", + "resource-policies.form.description.label": "Mô tả", + "resource-policies.form.eperson-group-list.label": "Người hoặc nhóm người dùng được cấp quyền", + "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.header": "Không thể thay đổi kiểu", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Không thể thay thế nhóm người dùng bằng người dùng.", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Không thể thay thế người dùng bằng nhóm người dùng.", + "resource-policies.form.eperson-group-list.modal.text2": "Xóa chính sách phân quyền hiện tại và tạo chính sách mới với kiểu mong muốn.", + "resource-policies.form.eperson-group-list.select.btn": "Lựa chọn", + "resource-policies.form.eperson-group-list.tab.eperson": "Tìm kiếm người dùng", + "resource-policies.form.eperson-group-list.tab.group": "Tìm kiếm một nhóm người dùng", + "resource-policies.form.eperson-group-list.table.headers.action": "Hành động", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", + "resource-policies.form.eperson-group-list.table.headers.name": "Tên", + "resource-policies.form.name.label": "Tên", + "resource-policies.form.policy-type.label": "Lựa chọn kiểu chính sách", + "resource-policies.form.policy-type.required": "Bạn cần lựa chọn kiểu chính sách tài nguyên.", + "resource-policies.table.headers.action": "Quyền", + "resource-policies.table.headers.date.end": "Ngày kết thúc", + "resource-policies.table.headers.date.start": "Ngày bắt đầu", + "resource-policies.table.headers.edit": "Chỉnh sửa", + "resource-policies.table.headers.edit.group": "Chỉnh sửa nhóm", + "resource-policies.table.headers.edit.policy": "Chỉnh sửa chính sách", + "resource-policies.table.headers.eperson": "Người dùng", + "resource-policies.table.headers.group": "Nhóm", + "resource-policies.table.headers.id": "ID", + "resource-policies.table.headers.name": "Tên", + "resource-policies.table.headers.policyType": "kiểu", + "resource-policies.table.headers.title.for.bitstream": "Chính sách tệp dữ liệu số", + "resource-policies.table.headers.title.for.bundle": "Chính sách gói dữ liệu số", + "resource-policies.table.headers.title.for.collection": "Chính sách bộ sưu tập", + "resource-policies.table.headers.title.for.community": "Chính sách đơn vị", + "resource-policies.table.headers.title.for.item": "Chính sách tài liệu", + "resource-policies.table.headers.title.for.topic": "Chính sách topic", + + "search.breadcrumbs": "Tìm kiếm", + "search.browse.item-back": "Quay lại kết quả tìm kiếm", + "search.filters.applied.f.author": "Tác giả", + "search.filters.applied.f.birthDate.max": "Ngày sinh kết thúc", + "search.filters.applied.f.birthDate.min": "Ngày sinh bắt đầu", + "search.filters.applied.f.dateIssued.max": "Ngày kết thúc", + "search.filters.applied.f.dateIssued.min": "Ngày bắt đầu", + "search.filters.applied.f.dateSubmitted": "Ngày đăng", + "search.filters.applied.f.discoverable": "Tài liệu cá nhân", + "search.filters.applied.f.entityType": "Kiểu tài liệu", + "search.filters.applied.f.has_content_in_original_bundle": "Có tệp", + "search.filters.applied.f.itemtype": "Kiểu", + "search.filters.applied.f.jobTitle": "Chức danh", + "search.filters.applied.f.namedresourcetype": "Trạng thái", + "search.filters.applied.f.subject": "Chủ đề", + "search.filters.applied.f.submitter": "Người gửi", + "search.filters.applied.f.withdrawn": "Tài liệu ẩn", + "search.filters.discoverable.false": "Có", + "search.filters.discoverable.true": "Không", + "search.filters.entityType.JournalIssue": "Kỳ của tạp chí", + "search.filters.entityType.JournalVolume": "Số tập cảu tạp chí", + "search.filters.entityType.OrgUnit": "Đơn vị tổ chức", + "search.filters.filter.author.head": "Tác giả", + "search.filters.filter.author.label": "Tìm kiếm tên tác giả", + "search.filters.filter.author.placeholder": "Tên tác giả", + "search.filters.filter.birthDate.head": "Ngày sinh", + "search.filters.filter.birthDate.label": "Tìm kiếm ngày sinh", + "search.filters.filter.birthDate.placeholder": "Ngày sinh", + "search.filters.filter.collapse": "Thu hẹp bộ lọc", + "search.filters.filter.creativeDatePublished.head": "Ngày xuất bản", + "search.filters.filter.creativeDatePublished.label": "Tìm kiếm ngày xuất bản", + "search.filters.filter.creativeDatePublished.placeholder": "Ngày xuất bản", + "search.filters.filter.creativeWorkEditor.head": "Người biên tập", + "search.filters.filter.creativeWorkEditor.label": "Tìm kiếm người biên tập", + "search.filters.filter.creativeWorkEditor.placeholder": "Người biên tập", + "search.filters.filter.creativeWorkKeywords.head": "Chủ đề", + "search.filters.filter.creativeWorkKeywords.label": "Tìm kiếm chủ đề", + "search.filters.filter.creativeWorkKeywords.placeholder": "Chủ đề", + "search.filters.filter.creativeWorkPublisher.head": "Nhà xuất bản", + "search.filters.filter.creativeWorkPublisher.label": "Tìm kiếm nhà xuất bản", + "search.filters.filter.creativeWorkPublisher.placeholder": "Nhà xuất bản", + "search.filters.filter.dateIssued.head": "Thời gian xuất bản", + "search.filters.filter.dateIssued.max.label": "Kết thúc", + "search.filters.filter.dateIssued.max.placeholder": "Thời gian tối đa", + "search.filters.filter.dateIssued.min.label": "Bắt đầu", + "search.filters.filter.dateIssued.min.placeholder": "Thời gian tối thiểu", + "search.filters.filter.dateSubmitted.head": "Ngày gửi", + "search.filters.filter.dateSubmitted.label": "Tìm kiếm ngày gửi", + "search.filters.filter.dateSubmitted.placeholder": "Ngày gửi", + "search.filters.filter.discoverable.head": "Tài liệu cá nhân", + "search.filters.filter.entityType.head": "Kiểu thực thể", + "search.filters.filter.entityType.label": "Tìm kiếm kiểu thực thể", + "search.filters.filter.entityType.placeholder": "Kiểu thực thể", + "search.filters.filter.expand": "Mở rộng bộ lọc", + "search.filters.filter.has_content_in_original_bundle.head": "Có tệp", + "search.filters.filter.itemtype.head": "Kiểu tài liệu", + "search.filters.filter.itemtype.label": "Tìm kiếm kiểu tài liệu", + "search.filters.filter.itemtype.placeholder": "Kiểu tài liệu", + "search.filters.filter.jobTitle.head": "Chức danh", + "search.filters.filter.jobTitle.label": "Tìm kiếm chức danh", + "search.filters.filter.jobTitle.placeholder": "Chức danh", + "search.filters.filter.knowsLanguage.head": "Ngôn ngữ", + "search.filters.filter.knowsLanguage.label": "Tìm kiếm ngôn ngữ", + "search.filters.filter.knowsLanguage.placeholder": "Ngôn ngữ", + "search.filters.filter.namedresourcetype.head": "Trạng thái", + "search.filters.filter.namedresourcetype.label": "Tìm kiếm trạng thái", + "search.filters.filter.namedresourcetype.placeholder": "Trạng thái", + "search.filters.filter.objectpeople.head": "Người", + "search.filters.filter.objectpeople.label": "Tìm kiếm tên người", + "search.filters.filter.objectpeople.placeholder": "Người", + "search.filters.filter.organizationAddressCountry.head": "Quốc gia", + "search.filters.filter.organizationAddressCountry.label": "Tìm kiếm quốc gia", + "search.filters.filter.organizationAddressCountry.placeholder": "Quốc gia", + "search.filters.filter.organizationAddressLocality.head": "Thành phố", + "search.filters.filter.organizationAddressLocality.label": "Tìm kiếm thành phố", + "search.filters.filter.organizationAddressLocality.placeholder": "Thành phố", + "search.filters.filter.organizationFoundingDate.head": "Ngày thành lập", + "search.filters.filter.organizationFoundingDate.label": "Tìm kiếm ngày thành lập", + "search.filters.filter.organizationFoundingDate.placeholder": "Ngày thành lập", + "search.filters.filter.scope.head": "Phạm vi", + "search.filters.filter.scope.label": "Tìm kiếm phạm vi giới hạn", + "search.filters.filter.scope.placeholder": "phạm vi giới hạn", + "search.filters.filter.show-less": "Thu hẹp", + "search.filters.filter.show-more": "Xem thêm", + "search.filters.filter.show-tree": "Duyệt cây {{ name }}", + "search.filters.filter.subject.head": "Chủ đề", + "search.filters.filter.subject.label": "Tìm kiếm chủ đề", + "search.filters.filter.subject.placeholder": "Chủ đề", + "search.filters.filter.submitter.head": "Người gửi", + "search.filters.filter.submitter.label": "Tìm kiếm người gửi", + "search.filters.filter.submitter.placeholder": "Người gửi", + "search.filters.filter.withdrawn.head": "Tài liệu ẩn", + "search.filters.has_content_in_original_bundle.false": "Không", + "search.filters.has_content_in_original_bundle.true": "Có", + "search.filters.head": "Bộ lọc", + "search.filters.reset": "Làm mới bộ lọc", + "search.filters.search.submit": "Xác nhận", + "search.filters.withdrawn.false": "Không", + "search.filters.withdrawn.true": "Có", + "search.form.scope.all": "Toàn bộ thư viện", + "search.form.search": "Tìm kiếm", + "search.form.search_dspace": "tất cả kho lưu trữ", + "search.results.empty": "Tìm kiếm của bạn không trả về kết quả.", + "search.results.head": "Kết quả tìm kiếm", + "search.results.no-results": "Tìm kiếm của bạn không trả về kết quả. Bạn có gặp khó khăn khi thực hiện tìm kiếm? Hãy thử lại bằng cách", + "search.results.no-results-link": "đặt từ khóa tìm vào trong cặp dấu ngoặc kép", + "search.results.response.500": "Đã xảy ra lỗi trong khi thực hiện truy vấn vui lòng thử lại sau", + "search.results.view-result": "Xem", + "search.search-form.placeholder": "Từ khóa tìm kiếm", + "search.sidebar.close": "Quay lại kết quả tìm kiếm", + "search.sidebar.filters.title": "Bộ lọc", + "search.sidebar.open": "Công cụ tìm kiếm", + "search.sidebar.results": "kết quả", + "search.sidebar.settings.rpp": "Kết quả mỗi trang", + "search.sidebar.settings.sort-by": "Sắp xếp theo", + "search.sidebar.settings.title": "Cài đặt", + "search.switch-configuration.title": "Xem", + "search.title": "Tìm kiếm", + "search.view-switch.show-detail": "Xem chi tiết", + "search.view-switch.show-grid": "Hiển thị dưới dạng lưới", + "search.view-switch.show-list": "Hiển thị dưới dạng danh sách", + + "sorting.ASC": "Tăng dần", + "sorting.dc.date.accessioned.ASC": "Tăng dần theo ngày lưu trữ", + "sorting.dc.date.accessioned.DESC": "Giảm dần theo ngày lưu trữ", + "sorting.dc.date.issued.ASC": "Tăng dần theo ngày", + "sorting.dc.date.issued.DESC": "Giảm dần theo ngày", + "sorting.dc.title.ASC": "Tăng dần theo nhan đề", + "sorting.dc.title.DESC": "Giảm dần theo nhan đề", + "sorting.DESC": "Giảm dần", + "sorting.lastModified.ASC": "Tăng dần theo lần chỉnh sửa cuối cùng", + "sorting.lastModified.DESC": "Giảm dần theo lần chỉnh sửa cuối cùng", + "sorting.score.ASC": "Liên quan ít nhất", + "sorting.score.DESC": "Liên quan nhiều nhất", + + "statistics.breadcrumbs": "Thống kê", + "statistics.header": "Thống kê theo {{ scope }}", + "statistics.page.no-data": "Không có dữ liệu", + "statistics.table.header.views": "Xem", + "statistics.table.no-data": "Không có dữ liệu", + "statistics.table.title.TopCities": "Top thành phố xem nhiều nhất", + "statistics.table.title.TopCountries": "Top quốc gia xem nhiều nhất", + "statistics.table.title.TotalDownloads": "Truy cập tệp", + "statistics.table.title.TotalVisits": "Tổng số truy cập", + "statistics.table.title.TotalVisitsPerMonth": "Tổng số lượt truy cập theo từng tháng", + "statistics.title": "Thống kê", + + + "submission.edit.breadcrumbs": "Chỉnh sửa đăng ký", + "submission.edit.title": "Chỉnh sửa đăng ký", + "submission.general.cancel": "Hủy", + "submission.general.cannot_submit": "Bạn không có quyền chỉnh sửa đăng ký đã gửi .", + "submission.general.deposit": "Tải lên", + "submission.general.discard.confirm.cancel": "Hủy", + "submission.general.discard.confirm.info": "Không thể hoàn tác thao tác. Bạn có chắc chắn không?", + "submission.general.discard.confirm.submit": "Có tôi đồng ý", + "submission.general.discard.confirm.title": "Hủy đăng ký", + "submission.general.discard.submit": "Hủy", + "submission.general.info.pending-changes": "Thay đổi chưa được lưu", + "submission.general.info.saved": "Lưu", + "submission.general.save": "Lưu", + "submission.general.save-later": "Lưu lại", + "submission.import-external.back-to-my-dspace": "Trở lại thư viện số", + "submission.import-external.page.hint": "Nhập vào một truy vấn phía trên để tìm các tài liệu trên trang web để nhập vào thư viện số", + "submission.import-external.page.title": "Nhập thông tin mô tả từ nguồn bên ngoài", + "submission.import-external.preview.button.import": "Bắt đầu gửi", + "submission.import-external.preview.error.import.body": "Đã xảy ra lỗi trong quá trình nhập tài liệu từ nguồn bên ngoài", + "submission.import-external.preview.error.import.title": "Lỗi gửi đi", + "submission.import-external.preview.subtitle": "Siêu dữ liệu bên dưới được nhập từ nguồn bên ngoài. Nó sẽ được điền vào trước khi bạn gửi đi.", + "submission.import-external.preview.title": "Xem trước tài liệu", + "submission.import-external.preview.title.Journal": "Xem trước Tạp chí", + "submission.import-external.preview.title.none": "Xem trước tài liệu", + "submission.import-external.preview.title.OrgUnit": "Xem trước tổ chức", + "submission.import-external.preview.title.Person": "Xem trước Tác giả\/nhà nghiên cứu", + "submission.import-external.preview.title.Project": "Xem trước dự án", + "submission.import-external.preview.title.Publication": "Xem trước ấn phẩm", + "submission.import-external.search.button": "Tìm kiếm", + "submission.import-external.search.button.hint": "Nhập một từ để tìm kiếm", + "submission.import-external.search.placeholder": "Tìm kiếm nguồn bên ngoài", + "submission.import-external.search.source.hint": "Chọn một nguồn bên ngoài", + "submission.import-external.source.ads": "NASA\/ADS", + "submission.import-external.source.arxiv": "arXiv", + "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.datacite": "submission.import-external.source.datacite", + "submission.import-external.source.epo": "Văn phòng Bằng sáng chế Châu Âu (EPO)", + "submission.import-external.source.lcname": "Tên Thư viện Quốc hội", + "submission.import-external.source.loading": "Đang tải lên ...", + "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.orcid": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.pubmed": "Pubmed", + "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scopus": "SciELO", + "submission.import-external.source.sherpaJournal": "Tạp chí SHERPA", + "submission.import-external.source.sherpaJournalIssn": "Số ISSN của tạp chí SHERPA", + "submission.import-external.source.sherpaPublisher": "Nhà xuất bản SHERPA", + "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.wos": "Web Of Science", + "submission.import-external.title": "Nhập thông tin mô tả từ nguồn bên ngoài", + "submission.import-external.title.Journal": "Nhập tạp chí từ nguồn bên ngoài", + "submission.import-external.title.JournalIssue": "Nhập kỳ ấn phẩm tạp chí từ nguồn bên ngoài", + "submission.import-external.title.JournalVolume": "Nhập một tập của tạp chí từ nguồn bên ngoài", + "submission.import-external.title.none": "Nhập thông tin mô tả từ nguồn bên ngoài", + "submission.import-external.title.OrgUnit": "Nhập nhà xuất bản từ nguồn bên ngoài", + "submission.import-external.title.Person": "Nhập một tác giả\/ nhà nghiên cứu từ nguồn bên ngoài", + "submission.import-external.title.Project": "Nhập một dự án từ nguồn bên ngoài", + "submission.import-external.title.Publication": "Nhập một ấn phẩm từ nguồn bên ngoài", + "submission.sections.accesses.form.access-condition-hint": "Chọn chính sách phân quyền để áp dụng cho biểu ghi khi nó được nhập vào hệ thống.", + "submission.sections.accesses.form.access-condition-label": "Loại chính sách truy cập", + "submission.sections.accesses.form.date-required": "Thông tin thời gian là bắt buộc.", + "submission.sections.accesses.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", + "submission.sections.accesses.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", + "submission.sections.accesses.form.discoverable-description": "Khi được chọn biểu ghi này sẽ có thể được tìm thấy trong các chức năng tìm kiếm\/duyệt. Khi bỏ chọn biểu ghi sẽ chỉ có sẵn qua đường dẫn trực tiếp và sẽ không bao giờ xuất hiện trong tìm kiếm\/duyệt.", + "submission.sections.accesses.form.discoverable-label": "Có thể khám phá", + "submission.sections.accesses.form.from-hint": "Chọn ngày mà quyền được áp dụng", + "submission.sections.accesses.form.from-label": "Cấp quyền truy cập từ", + "submission.sections.accesses.form.from-placeholder": "Từ", + "submission.sections.accesses.form.group-label": "Nhóm", + "submission.sections.accesses.form.group-required": "Trường Nhóm là bắt buộc.", + "submission.sections.accesses.form.until-hint": "Chọn ngày mà quyền được áp dụng", + "submission.sections.accesses.form.until-label": "Cấp quyền truy cập cho đến khi", + "submission.sections.accesses.form.until-placeholder": "Cho tới khi", + "submission.sections.ccLicense.change": "Thay đổi loại giấy phép…", + "submission.sections.ccLicense.confirmation": "Tôi đồng ý với giấy phép ở trên", + "submission.sections.ccLicense.link": "Bạn có lựa chọn theo giấy phép này:", + "submission.sections.ccLicense.none": "Không có giấy phép nào", + "submission.sections.ccLicense.option.select": "Lựa chọn tùy chọn…", + "submission.sections.ccLicense.select": "Lựa chọn loại giấy phép…", + "submission.sections.ccLicense.type": "Loại giấy phép", + "submission.sections.describe.relationship-lookup.close": "Đóng", + "submission.sections.describe.relationship-lookup.external-source.added": "Thêm thành công tài liệu nội bộ vào mục đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Nhập thiết bị từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Nhập sự kiện từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Nhập sự kiện từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Nhập tác giả từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Nhập tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.JournalIssue": "Nhập số kỳ của tạp chí từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.JournalVolume": "Nhập số tập của tạp chí từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Nhập tài liệu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Nhập tổ chức từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Nhập bằng sáng chế từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Nhập dự án từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Nhập ấn phẩm từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Kiểm soát", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Nhập dưới dạng một kiểm soát nội bộ mới", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Hủy", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Chọn một bộ sưu tập để thêm các tài liệu mới", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Thực thể", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Nhập vào một thực thể nội bộ mới", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Nhập từ arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Nhập từ tên LC", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Nhập từ ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Nhập từ PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Nhập từ tạp chí Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Nhập từ nhà xuất bản Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Nhập liệu", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Thêm thành công tác giả nội bộ bộ vào mục đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Nhập thành công và thêm tác giả bên ngoài vào mục đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Nhập tác giả từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Thực thể mới đã được thêm!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Dự án", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Thêm thành công tạp chí đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Nhập thành công tạp chí bên ngoài vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Nhập tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.added.local-entity": "Thêm thành công số kỳ tạp chí nội bộ vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.added.new-entity": "Nhập thành công và thêm số kỳ của tạp chí bên ngoài vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.title": "Nhập số kỳ của tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.added.local-entity": "Thêm thành công số tập của tạp chí nội bộ vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.added.new-entity": "Nhập và thêm thành công số tập của tạp chí bên ngoài vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.title": "Nhập số tập của tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Chọn một phù hợp:", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Lưu một biến thể tên mới", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Bạn có muốn lưu \"{{ value }}\" làm tên biến thể cho người này để bạn và những người khác có thể sử dụng lại cho những lần gửi sau không? Nếu không bạn vẫn có thể sử dụng cho lần gửi này\"", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Chỉ sử dụng cho lần gửi này", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Bỏ chọn tất cả", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Bỏ chọn trang", + "submission.sections.describe.relationship-lookup.search-tab.loading": "Đang tải...", + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Tìm kiếm truy vấn", + "submission.sections.describe.relationship-lookup.search-tab.search": "Đi", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Tìm kiếm...", + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Lựa chọn tất cả", + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Lựa chọn trang", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Tệp dữ liệu nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Gói dữ liệu nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Tác giả nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Tìm kiếm đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Nhà tài trợ của dự án", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Tìm kiếm cơ quan cấp vốn", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Tìm kiếm tài trợ", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Số kỳ của tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Số tập của tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Ấn phẩm của tác giả", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Số kỳ của tạp chsi nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Số tập của tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Tên LC ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Đơn vị tổ chức nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Tác giả nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Dự án nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Ấn phẩm nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Tạp chí Sherpa ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Nhà xuất bản Sherpa ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Chuyển đổi danh mục thả xuống", + "submission.sections.describe.relationship-lookup.selected": "Lựa chọn {{ size }} tài liệu", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Lựa chọn cảu bạn hiện đang trống.", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Tìm kiếm...", + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Cài đặt", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Lựa chọn hiện tại ({{ count }})", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Lựa chọn tệp dữ liệu", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Lựa chọn gói dữ liệu", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Lựa chọn tác giả.", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Lựa chọn đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Lựa chọn đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Lựa chọn tài trợ", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Lựa chọn kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Lựa chọn tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Lựa chọn số tập của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Lựa chọn tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Lựa chọn số kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Lựa chọn số tập của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Lựa chọn đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Lựa chọn tác giả", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Lựa chọn dự án", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Lựa chọn ấn phẩm", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Lựa chọn kết quả", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.title.DataFile": "Tệp dữ liệu", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Gói dữ liệu", + "submission.sections.describe.relationship-lookup.title.FundingAgency": "Đơn vị tài trợ", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Tác giả", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Đơn vị tổ chức chính", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Nhà tài trợ của dự án", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Đơn vị tài trợ", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Tài trợ", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Số kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Tạp chí", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Số tập cảu tạp chí", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Ấn phẩm", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Số kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Số tập của tạp chí", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.title.Person": "Tác giả", + "submission.sections.describe.relationship-lookup.title.Project": "Dự án", + "submission.sections.describe.relationship-lookup.title.Publication": "Ấn phẩm", + "submission.sections.general.add-more": "Thêm nhiều hơn", + "submission.sections.general.cannot_deposit": "Không thể hoàn tất quá trình nhập dữ liệu do lỗi trong biểu mẫu.
    Vui lòng điền vào tất cả các trường bắt buộc để hoàn tất quá trình nhập liệu.", + "submission.sections.general.collection": "Bộ sưu tập", + "submission.sections.general.deposit_error_notice": "Đã xảy ra sự cố khi gửi tài liệu vui lòng thử lại sau.", + "submission.sections.general.deposit_success_notice": "Đã gửi thành công.", + "submission.sections.general.discard_error_notice": "Đã xảy ra sự cố khi hủy tài liệu vui lòng thử lại sau.", + "submission.sections.general.discard_success_notice": "Đã hủy thành công.", + "submission.sections.general.metadata-extracted": "Siêu dữ liệu mới đã được trích xuất và thêm vào phần {{sectionId}} phần.", + "submission.sections.general.metadata-extracted-new-section": " {{sectionId}} mới phần đã được thêm vào thông tin gửi đi.", + "submission.sections.general.no-collection": "Không tìm thấy bộ sưu tập", + "submission.sections.general.no-sections": "Không có tùy chọn", + "submission.sections.general.save_error_notice": "Đã xảy ra sự cố khi lưu tài liệu vui lòng thử lại sau.", + "submission.sections.general.save_success_notice": "Lưu thành công.", + "submission.sections.general.search-collection": "Tìm kiếm bộ sưu tập", + "submission.sections.general.sections_not_valid": "Không có phần nào hoàn thành.", + "submission.sections.license.granted-label": "Xác nhận giấy phép", + "submission.sections.license.notgranted": "Bạn phải chấp nhận giấy phép", + "submission.sections.license.required": "Bạn phải chấp nhận giấy phép", + "submission.sections.sherpa.error.message": "Đã xảy ra lỗi trong quá trình truy xuất thông tin", + "submission.sections.sherpa.publication.information": "Thông tin ấn phẩm", + "submission.sections.sherpa.publication.information.issns": "ISSNs", + "submission.sections.sherpa.publication.information.publishers": "Nhà xuất bản", + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + "submission.sections.sherpa.publication.information.title": "Nhan đề", + "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + "submission.sections.sherpa.publisher.policy": "Chính sách của nhà xuất bản", + "submission.sections.sherpa.publisher.policy.conditions": "Điều kiện", + "submission.sections.sherpa.publisher.policy.description": "Thông tin dưới đây được tìm thấy thông qua Sherpa Romeo. Dựa trên các chính sách của nhà xuất bản của bạn hệ thống sẽ đưa ra lời khuyên về việc có cần thiết phải hạn chế hay không và\/hoặc những tệp nào mà bạn được phép tải lên. Nếu bạn có thắc mắc vui lòng liên hệ với quản trị viên.", + "submission.sections.sherpa.publisher.policy.embargo": "Hạn chế", + "submission.sections.sherpa.publisher.policy.license": "Bản quyền", + "submission.sections.sherpa.publisher.policy.location": "Vị trí", + "submission.sections.sherpa.publisher.policy.more.information": "Để biết thêm thông tin vui lòng xem đường dẫn dưới đây:", + "submission.sections.sherpa.publisher.policy.noembargo": "Không hạn chế", + "submission.sections.sherpa.publisher.policy.nolocation": "Trống", + "submission.sections.sherpa.publisher.policy.openaccess": "Các đường dẫn truy cập mở được cho phép bởi chính sách của tạp chí này được liệt kê bên dưới theo phiên bản bài viết. Nhấp vào một đường dẫn để xem chi tiết", + "submission.sections.sherpa.publisher.policy.prerequisites": "Điều kiện cần", + "submission.sections.sherpa.publisher.policy.refresh": "Làm mới", + "submission.sections.sherpa.publisher.policy.version": "Phiên bản", + "submission.sections.sherpa.record.information": "Thông tin biểu ghi", + "submission.sections.sherpa.record.information.date.created": "Ngày tạo", + "submission.sections.sherpa.record.information.date.modified": "Lần chỉnh sửa gần nhất", + "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.uri": "URL", + "submission.sections.sherpa-policy.title-empty": "Không có chính sách của nhà xuất bản. Nếu tác phẩm của bạn có ISSN liên quan vui lòng nhập nó ở trên để xem các chính sách truy cập mở của nhà xuất bản (nếu có)", + "submission.sections.status.errors.aria": "có lỗi", + "submission.sections.status.errors.title": "Lỗi", + "submission.sections.status.info.aria": "Thông tin bổ sung", + "submission.sections.status.info.title": "Thông tin bổ sung", + "submission.sections.status.valid.aria": "là hợp lệ", + "submission.sections.status.valid.title": "Hợp lệ", + "submission.sections.status.warnings.aria": "có cảnh báo", + "submission.sections.status.warnings.title": "Cảnh báo", + "submission.sections.submit.progressbar.accessCondition": "Điều kiện truy cập biểu ghi", + "submission.sections.submit.progressbar.CClicense": "Bằng sáng chế", + "submission.sections.submit.progressbar.describe.recycle": "Tái chế", + "submission.sections.submit.progressbar.describe.stepcustom": "Mô tả", + "submission.sections.submit.progressbar.describe.stepone": "Mô tả", + "submission.sections.submit.progressbar.describe.steptwo": "Mô tả", + "submission.sections.submit.progressbar.detect-duplicate": "Các trùng lặp xảy ra", + "submission.sections.submit.progressbar.license": "Giấy phép tiền gửi", + "submission.sections.submit.progressbar.sherpaPolicies": "Chính sách truy cập mở của nhà xuất bản", + "submission.sections.submit.progressbar.sherpapolicy": "Chính sách", + "submission.sections.submit.progressbar.upload": "Tải tệp lên", + "submission.sections.toggle.aria.close": "Thu hẹp phần {{sectionHeader}}", + "submission.sections.toggle.aria.open": "Mở rộng phần {{sectionHeader}}", + "submission.sections.toggle.close": "Đóng phiên", + "submission.sections.toggle.open": "Mở phiên mới", + "submission.sections.upload.delete.confirm.cancel": "Hủy", + "submission.sections.upload.delete.confirm.info": "Không thể hoàn tác thao tác này. Bạn có chắc không?", + "submission.sections.upload.delete.confirm.submit": "Có tôi chắc chắn", + "submission.sections.upload.delete.confirm.title": "Xóa dữ liệu số", + "submission.sections.upload.delete.submit": "Xóa", + "submission.sections.upload.download.title": "Tải dữ liệu số", + "submission.sections.upload.drop-message": "Kéo tệp đính kèm vào tài liệu", + "submission.sections.upload.edit.title": "Chỉnh sửa dữ liệu số", + "submission.sections.upload.form.access-condition-hint": "Chọn quyền truy cập áp dụng trên tệp tin khi biểu ghi được biên mục vào hệ thống.", + "submission.sections.upload.form.access-condition-label": "Loại điều kiện truy cập", + "submission.sections.upload.form.date-required": "Ngày yêu cầu", + "submission.sections.upload.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", + "submission.sections.upload.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày kết thúc cấp quyền truy cập", + "submission.sections.upload.form.from-hint": "Chọn ngày mà quyền được áp dụng", + "submission.sections.upload.form.from-label": "Cấp quyền truy cập từ", + "submission.sections.upload.form.from-placeholder": "Từ", + "submission.sections.upload.form.group-label": "Nhóm", + "submission.sections.upload.form.group-required": "Nhóm yêu cầu.", + "submission.sections.upload.form.until-hint": "Chọn ngày hết hạn quyền truy cập", + "submission.sections.upload.form.until-label": "Cấp quyền truy cập cho đến khi", + "submission.sections.upload.form.until-placeholder": "Đến khi", + "submission.sections.upload.header.policy.default.nolist": "Các tệp tải lên trong bộ sưu tập {{collectionName}} sẽ cso quyền truy cập thep các nhóm sau:", + "submission.sections.upload.header.policy.default.withlist": "Xin lưu ý rằng các tệp đã tải lên trong bộ sưu tập {{collectionName}} sẽ có thể truy cập được ngoài những gì được quyết định rõ ràng cho một tệp với (các) nhóm sau:", + "submission.sections.upload.info": "Tại đây bạn sẽ tìm thấy tất cả các tệp hiện có trong tài liệu. Bạn có thể cập nhật thông tin mô tả tệp và điều kiện truy cập hoặc tải lên tệp bổ sung chỉ cần kéo và thả chúng ở mọi nơi trong trang", + "submission.sections.upload.no-entry": "Không", + "submission.sections.upload.no-file-uploaded": "Không có tệp tải lên.", + "submission.sections.upload.save-metadata": "Lưu thông tin mô tả", + "submission.sections.upload.undo": "Hủy", + "submission.sections.upload.upload-failed": "Tải lên lỗi", + "submission.sections.upload.upload-successful": "Tải lên thành công", + "submission.submit.breadcrumbs": "Gửi mới", + "submission.submit.title": "Gửi mới", + "submission.workflow.generic.delete": "Xóa", + "submission.workflow.generic.delete-help": "Nếu bạn muốn hủy tài liệu này hãy chọn \"Delete\". Sau đó bạn sẽ được yêu cầu xác nhận.\"", + "submission.workflow.generic.edit": "Chỉnh sửa", + "submission.workflow.generic.edit-help": "Chọn tùy chọn này để thay đổi thông tin mô tả của tài liệu.", + "submission.workflow.generic.view": "Xem", + "submission.workflow.generic.view-help": "Chọn tùy chọn này để xem dữ liệu cảu tài liệu.", + "submission.workflow.tasks.claimed.approve": "Chấp nhận", + "submission.workflow.tasks.claimed.approve_help": "Nếu bạn đã xem xét tài liệu và thấy phù hợp để đưa vào bộ sưu tập hãy chọn \"Approve\".", + "submission.workflow.tasks.claimed.edit": "Chỉnh sửa", + "submission.workflow.tasks.claimed.edit_help": "Chọn tùy chọn này để thay đổi thông tin mô tả của tài liệu.", + "submission.workflow.tasks.claimed.reject.reason.info": "Vui lòng nhập lý do từ chối gửi của bạn vào ô bên dưới cho biết liệu người gửi có thể khắc phục sự cố và gửi lại hay không.", + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Mô tả lý do từ chối", + "submission.workflow.tasks.claimed.reject.reason.submit": "Từ chối tài liệu", + "submission.workflow.tasks.claimed.reject.reason.title": "Lý do", + "submission.workflow.tasks.claimed.reject.submit": "Từ chối", + "submission.workflow.tasks.claimed.reject_help": "Nếu bạn đã xem xét tài liệu và thấy không phù hợp để đưa vào bộ sưu tập hãy chọn \"Reject\". Sau đó bạn sẽ được yêu cầu nhập một thông báo cho biết lý do tại sao tài liệu đó không phù hợp và liệu người gửi có nên thay đổi điều gì đó và gửi lại hay không.", + "submission.workflow.tasks.claimed.return": "Trả lại nhiệm vụ", + "submission.workflow.tasks.claimed.return_help": "Trả tác vụ về nhóm để người dùng khác có thể thực hiện tác vụ.", + "submission.workflow.tasks.generic.error": "Đã xảy ra lỗi trong khi vận hành ...", + "submission.workflow.tasks.generic.processing": "Đang xử lý...", + "submission.workflow.tasks.generic.submitter": "Người gửi", + "submission.workflow.tasks.generic.success": "Hoạt động thành công", + "submission.workflow.tasks.pool.claim": "Nhận nhiệm vụ", + "submission.workflow.tasks.pool.claim_help": "Giao nhiệm vụ này cho chính bạn.", + "submission.workflow.tasks.pool.hide-detail": "Ẩn chi tiết", + "submission.workflow.tasks.pool.show-detail": "Xem chi tiết", + "submission.workspace.generic.view": "Xem", + "submission.workspace.generic.view-help": "Chọn tủy chọn để xem thông tin mô tả của tài liệu", + + "thumbnail.default.alt": "Hình ảnh thu nhỏ", + "thumbnail.default.placeholder": "Không có ảnh thu nhỏ nào", + "thumbnail.orgunit.alt": "Logo Đơn vị tổ chức", + "thumbnail.orgunit.placeholder": "Hỉnh ảnh giữ chỗ của đơn vị tổ chức", + "thumbnail.person.alt": "Ảnh hồ sơ", + "thumbnail.person.placeholder": "Không có ảnh hồ sơ nào", + "thumbnail.project.alt": "Logo dự án", + "thumbnail.project.placeholder": "Hình ảnh giữ chỗ của dự án", + + "title": "DSpace", + + "vocabulary-treeview.header": "Chế độ xem phân cấp", + "vocabulary-treeview.info": "Chọn một chủ đề để thêm làm bộ lọc tìm kiếm", + "vocabulary-treeview.load-more": "Xem thêm", + "vocabulary-treeview.search.form.reset": "Khôi phục", + "vocabulary-treeview.search.form.search": "Tìm kiếm", + "vocabulary-treeview.search.no-result": "Không có tài liệu nào hiển thị", + "vocabulary-treeview.tree.description.nsi": "Chỉ số Norwegian Science", + "vocabulary-treeview.tree.description.srsc": "Danh mục chủ đề", + + "uploader.browse": "duyệt", + "uploader.delete.btn-title": "Xóa", + "uploader.drag-message": "Kéo & thả tệp tại đây", + "uploader.processing": "Đang xử lý", + "uploader.queue-length": "Chiều dài hàng đợi", + + "virtual-metadata.delete-item.info": "Chọn kiểu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", + "virtual-metadata.delete-item.modal-head": "Siêu dữ liệu ảo của mối quan hệ này", + "virtual-metadata.delete-relationship.modal-head": "Chọn các tài liệu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", + + "supervisedWorkspace.search.results.head": "Supervised Items", + + + "workflow.search.results.head": "Tất cả nhiệm vụ", + "workflowAdmin.search.results.head": "Tiến trình làm việc của quản trị viên", + "workflow-item.delete.button.cancel": "Hủy", + "workflow-item.delete.button.confirm": "Xóa", + "workflow-item.delete.header": "Xóa tiến trình tài liệu", + "workflow-item.delete.notification.error.content": "Không thể xóa tiến trình tài liệu", + "workflow-item.delete.notification.error.title": "Đã xảy ra lỗi", + "workflow-item.delete.notification.success.content": " Tiến trình tài liệu này đã được xóa thành công", + "workflow-item.delete.notification.success.title": "Xóa", + "workflow-item.delete.title": "Xóa tiến trình tài liệu", + "workflow-item.edit.breadcrumbs": "Chỉnh sửa tiến trình tài liệu", + "workflow-item.edit.title": "Xem tiến trình tài liệu", + "workflow-item.send-back.button.cancel": "Hủy", + "workflow-item.send-back.button.confirm": "Gửi lại", + "workflow-item.send-back.header": "Gửi lại tiến trình tài liệucho người gửi", + "workflow-item.send-back.notification.error.content": "Không thể gửi lại tiến trình tài liệu cho người gửi", + "workflow-item.send-back.notification.error.title": "Đã xảy ra lỗi", + "workflow-item.send-back.notification.success.content": "Tiến trình tài liệu này đã được gửi lại thành công cho người gửi", + "workflow-item.send-back.notification.success.title": "Đã gửi lại cho người gửi", + "workflow-item.send-back.title": "Gửi lại tiến trình tài liệu cho người gửi", + "workflow-item.view.breadcrumbs": "Xem tiến trình", + "workspace.search.results.head": "Biểu ghi bạn đã tải lên", + "workspace-item.view.breadcrumbs": "Xem các tài liệu đang biên mục dở dang", + "workspace-item.view.title": "Xem các tài liệu đang biên mục dở dang", + + "idle-modal.extend-session": "Gia hạn phiên", + "idle-modal.header": "Phiên sẽ sớm hết hạn", + "idle-modal.info": "Vì lý do bảo mật các phiên của người dùng sẽ hết hạn sau {{timeToExpire}} phút không hoạt động. Phiên của bạn sẽ sớm hết hạn. Bạn muốn gia hạn hay đăng xuất?", + "idle-modal.log-out": "Đăng xuất", + + "researcher.profile.action.processing": "Đang xử lý…", + "researcher.profile.associated": "Hồ sơ nhà nghiên cứu đã được liên kết", + "researcher.profile.change-visibility.fail": "Đã xảy ra lỗi khi thay đổi chế độ hiển thị hồ sơ", + "researcher.profile.create.fail": "Đã có lỗi xảy ra trong khi tạo hồ sơ nhà nghiên cứu", + "researcher.profile.create.new": "Tạo mới", + "researcher.profile.create.success": "Đã tạo thành công hồ sơ nhà nghiên cứu", + "researcher.profile.delete": "Xóa", + "researcher.profile.expose": "Hiển thị", + "researcher.profile.hide": "Ẩn", + "researcher.profile.not.associated": "Hồ sơ nhà nghiên cứu chưa được liên kết", + "researcher.profile.private.visibility": "CÁ NHÂN", + "researcher.profile.public.visibility": "CÔNG CỘNG", + "researcher.profile.status": "Trạng thái:", + "researcher.profile.view": "Xem", + + "person.page.orcid": "ORCID", + "person.page.orcid.create": "Tạo một ID trên ORCID", + "person.page.orcid.funding-preferences": "Quỹ ưa thích", + "person.page.orcid.grant-authorizations": "Cấp quyền", + "person.page.orcid.granted-authorizations": "Quyền đã cấp", + "person.page.orcid.link": "Liên kết với ID ORCID", + "person.page.orcid.link.error.message": "Đã xảy ra lỗi khi kết nối hồ sơ với ORCID. Nếu sự cố vẫn tiếp tục xảy ra vui lòng liên hệ với quản trị viên.", + "person.page.orcid.link.processing": "Đang kết nối hồ sơ tới ORCID…", + "person.page.orcid.missing-authorizations": "Thiếu quyền", + "person.page.orcid.missing-authorizations-message": "Những quyền sau đang bị thiếu:", + "person.page.orcid.no-missing-authorizations-message": "Tuyệt! Ô này đang trống vì vậy bạn đã được cấp tất cả các quyền truy cập để sử dụng tất cả các chức năng do tổ chức của bạn cung cấp.", + "person.page.orcid.no-orcid-message": "Chưa có ID ORCID nào được liên kết. Bạn có thể click vào nút dưới đây để liên kết hồ sơ này với một tài khoản ORCID.", + "person.page.orcid.orcid-not-linked-message": "ID ORCID của hồ sơ này ({{ orcid }}) chưa được kết nối với tài khoản trên trang ORCID hoặc kết nối đã hết hạn.", + "person.page.orcid.profile-preferences": "Tham số của hồ sơ", + "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", + "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", + "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", + "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", + "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", + "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", + "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", + "person.page.orcid.sync-fundings.all": "Tất cả quỹ", + "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-fundings.mine": "Quỹ của tôi", + "person.page.orcid.sync-fundings.my_selected": "Quỹ đã chọn", + "person.page.orcid.synchronization-mode": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.batch": "Theo lô", + "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.manual": "Thủ công", + "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", + "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", + "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", + "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", + "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", + "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", + "person.page.orcid.sync-profile.affiliation": "Tổ chức", + "person.page.orcid.sync-profile.biographical": "Dữ liệu sinh trắc học", + "person.page.orcid.sync-profile.education": "Giáo dục", + "person.page.orcid.sync-profile.identifiers": "Định danh", + "person.page.orcid.sync-publications.all": "Tất cả ấn phẩm", + "person.page.orcid.sync-publications.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-publications.mine": "Ấn phẩm của tôi", + "person.page.orcid.sync-publications.my_selected": "Ấn phẩm đã chọn", + "person.page.orcid.sync-queue.description.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.description.country": "Quốc gia", + "person.page.orcid.sync-queue.description.education": "Giáo dục", + "person.page.orcid.sync-queue.description.external_ids": "ID ngoài", + "person.page.orcid.sync-queue.description.keywords": "Từ khóa", + "person.page.orcid.sync-queue.description.other_names": "Tên khác", + "person.page.orcid.sync-queue.description.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.description.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.discard": "Hủy thay đổi và không đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.discard.error": "Việc loại bỏ biểu ghi trong danh sách chờ của ORCID đã thất bại", + "person.page.orcid.sync-queue.discard.success": "Biểu ghi trong danh sách chờ của ORCID đã được hủy bỏ thành công", + "person.page.orcid.sync-queue.empty-message": "Danh sách chờ ORCID trống", + "person.page.orcid.sync-queue.send": "Đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.send.bad-request-error": "Đẩy dữ liệu lên ORCID không thành công vì tài nguyên này không hợp lệ", + "person.page.orcid.sync-queue.send.conflict-error": "Đẩy dữ liệu lên ORCID không thành công bởi vì tài nguyên này đã có trên trang ORCID", + "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", + "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", + "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp
    vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", + "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "2 ký tự mã quốc gia theo ISO 3166 là không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Cần có số định danh (ID) để phân biệt giữa các tổ chức. ID được hỗ trợ là GRID Ringgold LEI và số định dang Cơ quan đăng ký Crossref Funder", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Định danh của tổ chức yêu cầu phải có một giá trị", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Nguồn của một trong các số định danh của tổ chức không hợp lệ. Các nguồn được hỗ trợ là RINGGOLD GRID LEI và FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Phải có một nguồn cho định danh của tổ chức", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Tài nguyên được gửi yêu cầu phải có ít nhất một định danh", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Nhà tài trợ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Tổ chức này yêu cầu phải có địa chỉ", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Địa chỉ của tổ chức này phải là một thành phố", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Địa chỉ của tổ chức này phải là một mã quốc gia bao gồm 2 ký tự theo ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Tên của tổ chức là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Yêu cầu phải có tổ chức", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Năm xuất bản phải là năm sau năm 1900", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Ngày bắt đầu là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Nhan đề là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.type.required": "Trường dc.type là bắt buộc", + "person.page.orcid.sync-queue.table.header.action": "Hành động", + "person.page.orcid.sync-queue.table.header.description": "Mô tả", + "person.page.orcid.sync-queue.table.header.type": "Loại hình tài liệu", + "person.page.orcid.sync-queue.tooltip.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.tooltip.country": "Quốc gia", + "person.page.orcid.sync-queue.tooltip.delete": "Loại bỏ mục này khỏi trang ORCID", + "person.page.orcid.sync-queue.tooltip.education": "Giáo dục", + "person.page.orcid.sync-queue.tooltip.external_ids": "Định danh ", + "person.page.orcid.sync-queue.tooltip.insert": "Thêm mục mới trong ORCID", + "person.page.orcid.sync-queue.tooltip.keywords": "Từ khóa", + "person.page.orcid.sync-queue.tooltip.other_names": "Tên khác", + "person.page.orcid.sync-queue.tooltip.project": "Dự án", + "person.page.orcid.sync-queue.tooltip.publication": "Ấn phẩm", + "person.page.orcid.sync-queue.tooltip.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.tooltip.update": "Cập nhật mục này trên trang ORCID", + "person.page.orcid.unlink": "Ngắt kết nối khỏi ORCID", + "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", + "person.page.orcid.unlink.processing": "Đang xử lý…", + "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", + + "person.orcid.registry.auth": "Được phép qua ORCID ", + "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", + "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", + + "home.recent-submissions.head": "Các tài liệu tải lên gần đây", + + "listable-notification-object.default-message": "Không thể truy xuất", + + "system-wide-alert-banner.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo hệ thống", + "system-wide-alert-banner.countdown.prefix": "Trong", + "system-wide-alert-banner.countdown.days": "{{days}} ngày", + "system-wide-alert-banner.countdown.hours": "{{hours}} giờ và", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} phút:", + + "menu.section.system-wide-alert": "Cảnh báo toàn hệ thống", + + "system-wide-alert.form.header": "Cảnh báo toàn hệ thống", + "system-wide-alert-form.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo trên toàn hệ thống", + "system-wide-alert.form.cancel": "Hủy", + "system-wide-alert.form.save": "Lưu", + "system-wide-alert.form.label.active": "HOẠT ĐỘNG", + "system-wide-alert.form.label.inactive": "KHÔNG HOẠT ĐỘNG", + "system-wide-alert.form.error.message": "Cảnh báo trên toàn hệ thống phải chứa một nội dung", + "system-wide-alert.form.label.message": "Nội dung cảnh báo", + "system-wide-alert.form.label.countdownTo.enable": "Kích hoạt thời gian tạm dừng máy chủ", + "system-wide-alert.form.label.countdownTo.hint": "Gợi ý: Thiết lập lịch tạm dừng máy chủ. Khi chức năng này được kích hoạt, có thể lựa chọn một ngày tạm dừng máy chủ trong tương lai và nội dung cảnh báo sẽ được đếm ngược tới ngày đã đặt. Khi bộ hẹn giờ này được kết thúc, nội dung này sẽ biến mất khỏi cảnh báo. Máy chủ sẽ không tự động tạm dừng.", + "system-wide-alert.form.label.preview": "Xem trước cảnh báo toàn hệ thống", + "system-wide-alert.form.update.success": "Cảnh báo toàn hệ thống đã được cập nhật thành công", + "system-wide-alert.form.update.error": "Đã xảy ra lỗi trong quá trình cập nhật cảnh báo toàn hệ thống", + "system-wide-alert.form.create.success": "Cảnh báo toàn hệ thống đã được tạo thành công", + "system-wide-alert.form.create.error": "Đã xảy ra lỗi trong quá trình tạo cảnh báo toàn hệ thống", + "admin.system-wide-alert.breadcrumbs": "Cảnh báo toàn hệ thống", + "admin.system-wide-alert.title": "Cảnh báo toàn hệ thống", +} \ No newline at end of file From 222c220c5667fb76c183ca9eb25273aaf68aa1f8 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 26 Apr 2023 10:54:36 +0200 Subject: [PATCH 534/833] 101289: #1578 fixed redirection bug --- .../edit-bitstream-page.component.spec.ts | 9 +- .../edit-bitstream-page.component.ts | 116 +++++++----------- src/assets/i18n/en.json5 | 2 + 3 files changed, 48 insertions(+), 79 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts index 13f3ec7f27..258ff2432f 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.spec.ts @@ -388,20 +388,13 @@ describe('EditBitstreamPageComponent', () => { expect(comp.navigateToItemEditBitstreams).toHaveBeenCalled(); }); }); - describe('when navigateToItemEditBitstreams is called, and the component has an itemId', () => { + describe('when navigateToItemEditBitstreams is called', () => { it('should redirect to the item edit page on the bitstreams tab with the itemId from the component', () => { comp.itemId = 'some-uuid1'; comp.navigateToItemEditBitstreams(); expect(router.navigate).toHaveBeenCalledWith([getEntityEditRoute(null, 'some-uuid1'), 'bitstreams']); }); }); - describe('when navigateToItemEditBitstreams is called, and the component does not have an itemId', () => { - it('should redirect to the item edit page on the bitstreams tab with the itemId from the bundle links ', () => { - comp.itemId = undefined; - comp.navigateToItemEditBitstreams(); - expect(router.navigate).toHaveBeenCalledWith([getEntityEditRoute(null, 'some-uuid'), 'bitstreams']); - }); - }); }); describe('EditBitstreamPageComponent with IIIF fields', () => { diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 3c3965a70a..5110a5e936 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -1,58 +1,32 @@ -import { - ChangeDetectionStrategy, - ChangeDetectorRef, - Component, - OnDestroy, - OnInit -} from '@angular/core'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { Bitstream } from '../../core/shared/bitstream.model'; import { ActivatedRoute, Router } from '@angular/router'; -import { map, mergeMap, switchMap } from 'rxjs/operators'; -import { - combineLatest, - combineLatest as observableCombineLatest, - Observable, - of as observableOf, - Subscription -} from 'rxjs'; -import { - DynamicFormControlModel, - DynamicFormGroupModel, - DynamicFormLayout, - DynamicFormService, - DynamicInputModel, - DynamicSelectModel -} from '@ng-dynamic-forms/core'; +import { map, switchMap, tap } from 'rxjs/operators'; +import { combineLatest, combineLatest as observableCombineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; +import { DynamicFormControlModel, DynamicFormGroupModel, DynamicFormLayout, DynamicFormService, DynamicInputModel, DynamicSelectModel } from '@ng-dynamic-forms/core'; import { FormGroup } from '@angular/forms'; import { TranslateService } from '@ngx-translate/core'; import { DynamicCustomSwitchModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/custom-switch/custom-switch.model'; import cloneDeep from 'lodash/cloneDeep'; import { BitstreamDataService } from '../../core/data/bitstream-data.service'; -import { - getAllSucceededRemoteDataPayload, - getFirstCompletedRemoteData, - getFirstSucceededRemoteData, - getFirstSucceededRemoteDataPayload, - getRemoteDataPayload -} from '../../core/shared/operators'; +import { getAllSucceededRemoteDataPayload, getFirstCompletedRemoteData, getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload, getRemoteDataPayload } from '../../core/shared/operators'; import { NotificationsService } from '../../shared/notifications/notifications.service'; import { BitstreamFormatDataService } from '../../core/data/bitstream-format-data.service'; import { BitstreamFormat } from '../../core/shared/bitstream-format.model'; import { BitstreamFormatSupportLevel } from '../../core/shared/bitstream-format-support-level'; -import { hasValue, isNotEmpty, isEmpty } from '../../shared/empty.util'; +import { hasValue, isEmpty, isNotEmpty } from '../../shared/empty.util'; import { Metadata } from '../../core/shared/metadata.utils'; import { Location } from '@angular/common'; import { RemoteData } from '../../core/data/remote-data'; import { PaginatedList } from '../../core/data/paginated-list.model'; -import { getEntityEditRoute, getItemEditRoute } from '../../item-page/item-page-routing-paths'; +import { getEntityEditRoute } from '../../item-page/item-page-routing-paths'; import { Bundle } from '../../core/shared/bundle.model'; import { DSONameService } from '../../core/breadcrumbs/dso-name.service'; import { Item } from '../../core/shared/item.model'; -import { - DsDynamicInputModel -} from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; +import { DsDynamicInputModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-input.model'; import { DsDynamicTextAreaModel } from '../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-textarea.model'; import { BundleDataService } from '../../core/data/bundle-data.service'; +import { Operation } from 'fast-json-patch'; @Component({ selector: 'ds-edit-bitstream-page', @@ -440,17 +414,24 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { getFirstSucceededRemoteDataPayload(), ); + const item$ = bundle$.pipe( + switchMap((bundle: Bundle) => bundle.item), + getFirstSucceededRemoteDataPayload() + ); this.subs.push( observableCombineLatest( bitstream$, allFormats$, - bundle$ - ).subscribe(([bitstream, allFormats, bundle]) => { - this.bitstream = bitstream as Bitstream; - this.formats = allFormats.page; - this.bundle = bundle; - this.setIiifStatus(this.bitstream); - }) + bundle$, + item$, + ).pipe() + .subscribe(([bitstream, allFormats, bundle, item]) => { + this.bitstream = bitstream as Bitstream; + this.formats = allFormats.page; + this.bundle = bundle; + this.itemId = item.uuid; + this.setIiifStatus(this.bitstream); + }) ); this.subs.push( @@ -582,7 +563,6 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { } } - /** * Check for changes against the bitstream and send update requests to the REST API */ @@ -598,23 +578,8 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { let bundle$: Observable; if (wasPrimary !== isPrimary) { - let patchOperation; - // No longer primary bitstream: remove - if (wasPrimary) { - patchOperation = { - path: this.primaryBitstreamPath, - op: 'remove' - }; - } else { - // Has become primary bitstream - // If it already had a value: replace, otherwise: add - patchOperation = { - path: this.primaryBitstreamPath, - op: hasValue(this.bundle.primaryBitstreamUUID) ? 'replace' : 'add', - value: this.bitstream.uuid - }; - } - bundle$ = this.bundleService.patch(this.bundle, [patchOperation]).pipe( + const patchOperations: Operation[] = this.retrieveBundlePatch(wasPrimary); + bundle$ = this.bundleService.patch(this.bundle, patchOperations).pipe( getFirstCompletedRemoteData(), map((bundleResponse: RemoteData) => { if (hasValue(bundleResponse) && bundleResponse.hasFailed) { @@ -649,6 +614,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { } combineLatest([bundle$, bitstream$]).pipe( + tap(([bundle]) => this.bundle = bundle), switchMap(() => { return this.bitstreamService.update(updatedBitstream).pipe( getFirstSucceededRemoteDataPayload() @@ -664,6 +630,24 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { }); } + private retrieveBundlePatch(wasPrimary: boolean): Operation[] { + // No longer primary bitstream: remove + if (wasPrimary) { + return [{ + path: this.primaryBitstreamPath, + op: 'remove' + }]; + } else { + // Has become primary bitstream + // If it already had a value: replace, otherwise: add + return [{ + path: this.primaryBitstreamPath, + op: hasValue(this.bundle.primaryBitstreamUUID) ? 'replace' : 'add', + value: this.bitstream.uuid + }]; + } + } + /** * Parse form data to an updated bitstream object * @param rawForm Raw form data @@ -671,8 +655,6 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { formToBitstream(rawForm): Bitstream { const updatedBitstream = cloneDeep(this.bitstream); const newMetadata = updatedBitstream.metadata; - // TODO: Set bitstream to primary when supported - const primary = rawForm.fileNamePrimaryContainer.primaryBitstream; Metadata.setFirstValue(newMetadata, 'dc.title', rawForm.fileNamePrimaryContainer.fileName); if (isEmpty(rawForm.descriptionContainer.description)) { delete newMetadata['dc.description']; @@ -724,15 +706,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { * otherwise retrieve the item ID based on the owning bundle's link */ navigateToItemEditBitstreams() { - if (hasValue(this.itemId)) { - this.router.navigate([getEntityEditRoute(this.entityType, this.itemId), 'bitstreams']); - } else { - this.bitstream.bundle.pipe(getFirstSucceededRemoteDataPayload(), - mergeMap((bundle: Bundle) => bundle.item.pipe(getFirstSucceededRemoteDataPayload()))) - .subscribe((item) => { - this.router.navigate(([getItemEditRoute(item), 'bitstreams'])); - }); - } + this.router.navigate([getEntityEditRoute(this.entityType, this.itemId), 'bitstreams']); } /** diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 66824e56b3..5f09574ab0 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -705,6 +705,8 @@ "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", + "bitstream.edit.notifications.error.primaryBitstream.title": "An error occurred saving the primary bitstream", + "bitstream.edit.form.iiifLabel.label": "IIIF Label", "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", From 618f03c8ca0d26488bbc1cba87666ac9a169cd6c Mon Sep 17 00:00:00 2001 From: tuanvu Date: Wed, 26 Apr 2023 15:55:52 +0700 Subject: [PATCH 535/833] Update Locale --- src/assets/i18n/vi.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 index afc7ce4e3c..cb8b205d3f 100644 --- a/src/assets/i18n/vi.json5 +++ b/src/assets/i18n/vi.json5 @@ -294,7 +294,7 @@ "advanced-workflow-action.rating.form.rating.error": "Bạn phải đánh giá tài liệu/ thực thế này", "advanced-workflow-action.rating.form.review.label": "Kiểm duyệt", "advanced-workflow-action.rating.form.review.error": "Bạn phải nhập nội dung đánh giá để gửi bản xếp hạng này", - "advanced-workflow-action.rating.description": "Vui lòng chọn một xếp hạng bên dưới" + "advanced-workflow-action.rating.description": "Vui lòng chọn một xếp hạng bên dưới", "advanced-workflow-action.rating.description-requiredDescription": "Vui lòng chọn xếp hạng bên dưới và thêm đánh giá", "advanced-workflow-action.select-reviewer.description-single": "Vui lòng chọn một người kiểm duyệt dưới đây trước khi tải tài liệu lên", "advanced-workflow-action.select-reviewer.description-multiple": "Vui lòng chọn một hoặc nhiều người kiểm duyệt dưới đây trước khi tải tài liệu lên", From 6e7a8a992ce607a30033f78f0344d30e2880334e Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 10:12:28 +0200 Subject: [PATCH 536/833] 101127: Add VocabularyTreeview to BrowseByTaxonomyPage --- .../browse-by-taxonomy-page.component.html | 6 +++++- .../browse-by-taxonomy-page.component.ts | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index 04f39bf727..39fcf1ab30 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -1 +1,5 @@ -

    browse-by-taxonomy-page works!

    +
    + + +
    diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index 97402843f5..b697c74052 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -1,4 +1,5 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { VocabularyOptions } from '../../core/submission/vocabularies/models/vocabulary-options.model'; @Component({ selector: 'ds-browse-by-taxonomy-page', @@ -8,6 +9,11 @@ import { Component } from '@angular/core'; /** * Component for browsing items by metadata in a hierarchical controlled vocabulary */ -export class BrowseByTaxonomyPageComponent { +export class BrowseByTaxonomyPageComponent implements OnInit { + vocabularyOptions: VocabularyOptions; + + ngOnInit() { + this.vocabularyOptions = { name: 'srsc', closed: true }; + } } From 702f9cd4dbd44340386c51080a2f3fd24b2aa43f Mon Sep 17 00:00:00 2001 From: tuanvu Date: Wed, 26 Apr 2023 16:06:02 +0700 Subject: [PATCH 537/833] Update Lang file --- src/assets/i18n/vi.json5 | 5220 +++++++++++++++++++------------------- 1 file changed, 2610 insertions(+), 2610 deletions(-) diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 index cb8b205d3f..4e3528148f 100644 --- a/src/assets/i18n/vi.json5 +++ b/src/assets/i18n/vi.json5 @@ -1,1301 +1,1301 @@ { - "401.help": "Bạn không có quyền truy cập trang này. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", - "401.link.home-page": "Đi tới trang chủ", - "401.unauthorized": "không có quyền truy cập", - "403.forbidden": "không được phép truy cập", - "403.help": "Bạn không có quyền truy cập trang này. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", - "403.link.home-page": "Đi tới trang chủ", - "404.help": "Chúng tôi không tìm thấy trang mà bạn đang tìm kiếm. Trang này có thể đã được chuyển tới một địa chỉ khác hoặc đã bị xóa. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", - "404.link.home-page": "Đi tới trang chủ", - "404.page-not-found": "không tìm thấy trang", - "500.help": "Máy chủ tạm thời không thể phục vụ yêu cầu của bạn do đang trong giai đoạn bảo trì hoặc vấn đề về dung lượng. Vui lòng thử lại sau.", - "500.link.home-page": "Đi tới trang chủ", - "500.page-internal-server-error": "Dịch vụ không sẵn sàng", - - "access-status.embargo.listelement.badge": "Ngăn chặn", - "access-status.metadata.only.listelement.badge": "Chỉ siêu dữ liệu", - "access-status.open.access.listelement.badge": "Truy cập mở", - "access-status.restricted.listelement.badge": "Hạn chế", - "access-status.unknown.listelement.badge": "Không xác định", - - "admin.curation-tasks.breadcrumbs": "Thu thập các tác vụ hệ thống", - "admin.curation-tasks.header": "Thu thập các tác vụ hệ thống", - "admin.curation-tasks.title": "Thu thập các tác vụ hệ thống", - - "admin.registries.bitstream-formats.breadcrumbs": "Tạo định dạng", - "admin.registries.bitstream-formats.create.breadcrumbs": "Định dạng tệp tin", - "admin.registries.bitstream-formats.create.failure.content": "Đã xảy ra lỗi khi tạo định dạng tệp tin mới.", - "admin.registries.bitstream-formats.create.failure.head": "Không thành công", - "admin.registries.bitstream-formats.create.head": "Tạo định dạng tệp tin", - "admin.registries.bitstream-formats.create.new": "Thêm một định dạng tệp tin mới", - "admin.registries.bitstream-formats.create.success.content": "Định dạng tệp tin mới đã được tạo thành công.", - "admin.registries.bitstream-formats.create.success.head": "Thành công", - "admin.registries.bitstream-formats.delete.failure.amount": "Loại bỏ không thành công {{ amount }} định dạng", - "admin.registries.bitstream-formats.delete.failure.head": "Không thành công", - "admin.registries.bitstream-formats.delete.success.amount": "Loại bỏ thành công {{ amount }} định dạng", - "admin.registries.bitstream-formats.delete.success.head": "Thành công", - "admin.registries.bitstream-formats.description": "Danh sách các định dạng tệp tin này cung cấp thông tin về các định dạng đã biết và mức hỗ trợ của chúng.", - "admin.registries.bitstream-formats.edit.breadcrumbs": "Định dạng tệp tin", - "admin.registries.bitstream-formats.edit.description.label": "Mô tả", - "admin.registries.bitstream-formats.edit.extensions.hint": "Tiện ích mở rộng là phần mở rộng tệp được sử dụng để tự động xác định định dạng của tệp được tải lên. Bạn có thể nhập một vài phần mở rộng cho mỗi định dạng.", - "admin.registries.bitstream-formats.edit.extensions.label": "Mở rộng tệp", - "admin.registries.bitstream-formats.edit.extensions.placeholder": "Nhập một phần mở rộng tệp không có dấu chấm", - "admin.registries.bitstream-formats.edit.failure.content": "Đã xảy ra lỗi khi chỉnh sửa định dạng tệp tin.", - "admin.registries.bitstream-formats.edit.failure.head": "Không thành công", - "admin.registries.bitstream-formats.edit.head": "Định dạng tệp tin: {{ format }}", - "admin.registries.bitstream-formats.edit.internal.hint": "Các định dạng được đánh dấu là nội bộ sẽ được ẩn đối với người dùng và được sử dụng cho các mục đích quản trị.", - "admin.registries.bitstream-formats.edit.internal.label": "Nội bộ", - "admin.registries.bitstream-formats.edit.mimetype.hint": "Kiểu MIME được liên kết với định dạng này không nhất thiết phải là duy nhất.", - "admin.registries.bitstream-formats.edit.mimetype.label": "Kiểu MIME", - "admin.registries.bitstream-formats.edit.shortDescription.hint": "Một tên duy nhất cho định dạng này (ví dụ: Microsoft Word XP hoặc Microsoft Word 2000)", - "admin.registries.bitstream-formats.edit.shortDescription.label": "Tên", - "admin.registries.bitstream-formats.edit.success.content": "Định dạng tệp tin đã được chỉnh sửa thành công.", - "admin.registries.bitstream-formats.edit.success.head": "Thành công", - "admin.registries.bitstream-formats.edit.supportLevel.hint": "Mức độ hỗ trợ mà đơn vị của bạn cam kết cho định dạng này.", - "admin.registries.bitstream-formats.edit.supportLevel.label": "Mức độ hỗ trợ", - "admin.registries.bitstream-formats.head": "Tạo định dạng tệp tin số", - "admin.registries.bitstream-formats.no-items": "Không có định dạng tệp tin nào để hiển thị.", - "admin.registries.bitstream-formats.table.delete": "Xóa các mục được chọn", - "admin.registries.bitstream-formats.table.deselect-all": "Bỏ chọn tất cả", - "admin.registries.bitstream-formats.table.id": "ID", - "admin.registries.bitstream-formats.table.internal": "nội bộ", - "admin.registries.bitstream-formats.table.mimetype": "Kiểu MIME", - "admin.registries.bitstream-formats.table.name": "Tên", - "admin.registries.bitstream-formats.table.return": "Quay lại", - "admin.registries.bitstream-formats.table.supportLevel.head": "Mức độ hỗ trợ", - "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Đã xác định", - "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Được hỗ trợ", - "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Không xác định", - "admin.registries.bitstream-formats.title": "Tạo định dạng tệp tin số", - "admin.registries.metadata.breadcrumbs": "Mẫu nhập liệu", - "admin.registries.metadata.description": "Tạo mẫu nhập liệu cho phép duy trì danh sách tất cả các trường thông tin mô tả có sẵn trong hệ thống. Các trường này có thể được phân ra cho nhiều lược đồ. Tuy nhiên DSpace yêu cầu đủ điều kiện cho lược đồ Dublin Core.", - "admin.registries.metadata.form.create": "Tạo lược đồ thông tin mô tả", - "admin.registries.metadata.form.edit": "Chỉnh sửa lược đồ thông tin mô tả", - "admin.registries.metadata.form.name": "Tên", - "admin.registries.metadata.form.namespace": "Tên miền", - "admin.registries.metadata.head": "Tạo mẫu nhập liệu", - "admin.registries.metadata.schemas.no-items": "Không có lược đồ thông tin mô tả nào để hiển thị.", - "admin.registries.metadata.schemas.table.delete": "Xóa các mục đã chọn", - "admin.registries.metadata.schemas.table.id": "ID", - "admin.registries.metadata.schemas.table.name": "Tên", - "admin.registries.metadata.schemas.table.namespace": "Tên miền", - "admin.registries.metadata.title": "Tạo mẫu nhập liệu", - "admin.registries.schema.breadcrumbs": "Lược đồ thông tin mô tả", - "admin.registries.schema.description": "Đây là lược đồ thông tin mô tả cho \"{{namespace}}\".", - "admin.registries.schema.fields.head": "Lược đồ các trường thông tin mô tả", - "admin.registries.schema.fields.no-items": "Không có trường thông tin mô tả nào để hiển thị.", - "admin.registries.schema.fields.table.delete": "Xóa các mục đã lựa chọn", - "admin.registries.schema.fields.table.field": "Trường", - "admin.registries.schema.fields.table.id": "ID", - "admin.registries.schema.fields.table.scopenote": "Ghi chú phạm vi", - "admin.registries.schema.form.create": "Tạo trường thông tin mô tả", - "admin.registries.schema.form.edit": "Chỉnh sửa trường thông tin mô tả", - "admin.registries.schema.form.element": "Yếu tố", - "admin.registries.schema.form.qualifier": "Đối tượng bổ trợ", - "admin.registries.schema.form.scopenote": "Ghi chú phạm vi", - "admin.registries.schema.head": "Lược đồ thông tin mô tả", - "admin.registries.schema.notification.created": "Tạo thành công lược đồ thông tin mô tả \"{{prefix}}\"", - "admin.registries.schema.notification.deleted.failure": "Xóa không thành công {{amount}} lược đồ thông tin mô tả", - "admin.registries.schema.notification.deleted.success": "Đã xóa thành công {{amount}} lược đồ thông tin mô tả", - "admin.registries.schema.notification.edited": "Chỉnh sửa thành công lược đồ thông tin mô tả \"{{prefix}}\"", - "admin.registries.schema.notification.failure": "Lỗi", - "admin.registries.schema.notification.field.created": "Tạo thành công trường thông tin mô tả \"{{field}}\"", - "admin.registries.schema.notification.field.deleted.failure": "Xóa không thành công {{amount}} trường thông tin mô tả", - "admin.registries.schema.notification.field.deleted.success": "Đã xóa thành công {{amount}} trường thông tin mô tả", - "admin.registries.schema.notification.field.edited": "Chỉnh sửa thành công trường thông tin mô tả \"{{field}}\"", - "admin.registries.schema.notification.success": "Thành công", - "admin.registries.schema.return": "Quay lại", - "admin.registries.schema.title": "Tạo lược đồ thông tin mô tả", - - "admin.access-control.epeople.actions.delete": "Xóa người dùng", - "admin.access-control.epeople.actions.impersonate": "Mạo danh người dùng", - "admin.access-control.epeople.actions.reset": "Cài lại mật khẩu", - "admin.access-control.epeople.actions.stop-impersonating": "Dừng mạo danh người dùng", - "admin.access-control.epeople.breadcrumbs": "Người dùng", - "admin.access-control.epeople.button.add": "Thêm người dùng", - "admin.access-control.epeople.button.see-all": "Duyệt toàn bộ", - "admin.access-control.epeople.form.canLogIn": "Có thể đăng nhập", - "admin.access-control.epeople.form.create": "Tạo người dùng", - "admin.access-control.epeople.form.edit": "Chỉnh sửa người dùng", - "admin.access-control.epeople.form.email": "E-mail", - "admin.access-control.epeople.form.emailHint": "Phải là địa chỉ e-mail hợp lệ", - "admin.access-control.epeople.form.firstName": "Tên", - "admin.access-control.epeople.form.goToGroups": "Thêm vào nhóm", - "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Thành viên của các nhóm:", - "admin.access-control.epeople.form.lastName": "Họ", - "admin.access-control.epeople.form.memberOfNoGroups": "Người dùng không là thành viên của bất kỳ nhóm nào", - "admin.access-control.epeople.form.notification.created.failure": "Tạo không thành công người dùng \"{{name}}\"", - "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Tạo không thành công người dùng \"{{name}}\" email \"{{email}}\" đã được sử dụng.", - "admin.access-control.epeople.form.notification.created.success": "Tạo thành công người dùng \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.failure": "Xóa không thành công người dùng \"{{name}}\"", - "admin.access-control.epeople.form.notification.deleted.success": "Xóa thành công người dùng \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.failure": "Chỉnh sửa không thành công người dùng \"{{name}}\"", - "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Chỉnh sửa không thành công người dùng \"{{name}}\" email \"{{email}}\" đã được sử dụng.", - "admin.access-control.epeople.form.notification.edited.success": "Chỉnh sửa thành công người dùng \"{{name}}\"", - "admin.access-control.epeople.form.requireCertificate": "Khóa tài khoản", - "admin.access-control.epeople.form.return": "Quay lại", - "admin.access-control.epeople.form.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", - "admin.access-control.epeople.form.table.id": "ID", - "admin.access-control.epeople.form.table.name": "Tên", - "admin.access-control.epeople.head": "Người dùng", - "admin.access-control.epeople.no-items": "Không có người dùng nào để hiển thị.", - "admin.access-control.epeople.notification.deleted.failure": "Xóa không thành công người dùng: \"{{name}}\"", - "admin.access-control.epeople.notification.deleted.success": "Xóa thành công người dùng: \"{{name}}\"", - "admin.access-control.epeople.notification.resetpassword.success": "Thiết lập lại mật khẩu thành công cho người dùng: \"{{name}}\"", - "admin.access-control.epeople.search.button": "Tìm kiếm", - "admin.access-control.epeople.search.head": "Tìm kiếm", - "admin.access-control.epeople.search.placeholder": "Tìm kiếm người dùng...", - "admin.access-control.epeople.search.scope.email": "E-mail (chính xác)", - "admin.access-control.epeople.search.scope.metadata": "Siêu dữ liệu", - "admin.access-control.epeople.table.edit": "Chỉnh sửa", - "admin.access-control.epeople.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", - "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Bạn không có quyền chỉnh sửa nhóm này", - "admin.access-control.epeople.table.edit.buttons.remove": "Xóa \"{{name}}\"", - "admin.access-control.epeople.table.email": "E-mail (chính xác)", - "admin.access-control.epeople.table.id": "ID", - "admin.access-control.epeople.table.name": "Tên", - "admin.access-control.epeople.title": "Người dùng", - "admin.access-control.groups.addGroup.breadcrumbs": "Tạo nhóm người dùng", - "admin.access-control.groups.breadcrumbs": "Nhóm người dùng", - "admin.access-control.groups.button.add": "Thêm nhóm người dùng", - "admin.access-control.groups.button.see-all": "Duyệt toàn bộ", - "admin.access-control.groups.form.actions.delete": "Xóa nhóm người dùng", - "admin.access-control.groups.form.alert.permanent": "Nhóm này là cố định vì vậy nó không thể bị chỉnh sửa hoặc xóa. Bạn vẫn có thể thêm và loại bỏ thành viên trong nhóm tại trang này.", - "admin.access-control.groups.form.alert.workflowGroup": "Không thể chỉnh sửa hoặc xóa nhóm này vì nó tương ứng với một vai trò trong quá trình gửi và quy trình xử lý trong \"{{name}}\" {{comcol}}. Bạn có thể xóa nó từ thẻ
    assign roles<\/a> trên trang chỉnh sửa {{comcol}}. Bạn vẫn có thể thêm và loại bỏ thành viên nhóm bằng trang này.\"", - "admin.access-control.groups.form.delete-group.modal.cancel": "Hủy", - "admin.access-control.groups.form.delete-group.modal.confirm": "Xóa", - "admin.access-control.groups.form.delete-group.modal.header": "Xóa nhóm người dùng \"{{ dsoName }}\"", - "admin.access-control.groups.form.delete-group.modal.info": "Bạn có chắc chắn rằng bạn muốn xóa nhóm người dùng \"{{ dsoName }}\"", - "admin.access-control.groups.form.groupCommunity": "Đơn vị hoặc Bộ sưu tập", - "admin.access-control.groups.form.groupDescription": "Mô tả", - "admin.access-control.groups.form.groupName": "Tên nhóm người dùng", - "admin.access-control.groups.form.head.create": "Tạo nhóm người dùng", - "admin.access-control.groups.form.head.edit": "Chỉnh sửa nhóm người dùng", - "admin.access-control.groups.form.members-list.button.see-all": "Duyệt toàn bộ", - "admin.access-control.groups.form.members-list.head": "Người dùng", - "admin.access-control.groups.form.members-list.headMembers": "Các thành viên hiện tại", - "admin.access-control.groups.form.members-list.no-items": "Không người dùng nào được tìm thấy trong tìm kiếm", - "admin.access-control.groups.form.members-list.no-members-yet": "Chưa có thành viên trong nhóm tìm kiếm và thêm thành viên vào nhóm.", - "admin.access-control.groups.form.members-list.notification.failure.addMember": "Thêm không thành công thành viên: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Xóa không thành công thành viên: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Hiện tại không có nhóm hoạt động gửi một tên trước.", - "admin.access-control.groups.form.members-list.notification.success.addMember": "Thêm thành công thành viên: \"{{name}}\"", - "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Xóa thành công thành viên: \"{{name}}\"", - "admin.access-control.groups.form.members-list.search.button": "Tìm kiếm", - "admin.access-control.groups.form.members-list.search.head": "Thêm người dùng", - "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (chính xác)", - "admin.access-control.groups.form.members-list.search.scope.metadata": "Siêu dữ liệu", - "admin.access-control.groups.form.members-list.table.edit": "Loại bỏ \/ Thêm", - "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Thêm thành viên với tên \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Loại bỏ thành viên với tên \"{{name}}\"", - "admin.access-control.groups.form.members-list.table.email": "Email", - "admin.access-control.groups.form.members-list.table.id": "ID", - "admin.access-control.groups.form.members-list.table.identity": "Định danh", - "admin.access-control.groups.form.members-list.table.name": "Tên", - "admin.access-control.groups.form.members-list.table.netid": "NetID", - "admin.access-control.groups.form.notification.created.failure": "Tạo không thành công nhóm người dùng \"{{name}}\"", - "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Tạo không thành công nhóm người dùng với tên: \"{{name}}\" đảm bảo tên này chưa được sử dụng\"", - "admin.access-control.groups.form.notification.created.success": "Tạo thành công nhóm người dùng \"{{name}}\"", - "admin.access-control.groups.form.notification.deleted.failure.content": "Nguyên nhân: \"{{ cause }}\"", - "admin.access-control.groups.form.notification.deleted.failure.title": "Xóa không thành công nhóm người dùng \"{{ name }}\"", - "admin.access-control.groups.form.notification.deleted.success": "Xóa thành công nhóm người dùng \"{{ name }}\"", - "admin.access-control.groups.form.notification.edited.failure": "Chỉnh sửa không thành công nhóm người dùng \"{{name}}\"", - "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Tên \"{{name}}\" đã được sử dụng!\"", - "admin.access-control.groups.form.notification.edited.success": "Chỉnh sửa thành công nhóm người dùng \"{{name}}\"", - "admin.access-control.groups.form.return": "Quay lại", - "admin.access-control.groups.form.subgroups-list.button.see-all": "Duyệt toàn bộ", - "admin.access-control.groups.form.subgroups-list.head": "Nhóm người dùng", - "admin.access-control.groups.form.subgroups-list.headSubgroups": "Nhóm người dùng con hiện tại", - "admin.access-control.groups.form.subgroups-list.no-items": "Không tìm thấy nhóm nào có tên hoặc UUID như vậy", - "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Chưa có nhóm người dùng con nào trong nhóm.", - "admin.access-control.groups.form.subgroups-list.notification.failure": "Đã xảy ra sự cố: \"{{cause}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Thêm không thành công nhóm người dùng con: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Xóa không thành công nhóm người dùng con: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Hiện tại không có nhóm hoạt động gửi một tên trước.", - "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Đây là nhóm hiện tại không thể thêm được.", - "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Thêm thành công nhóm người dùng con: \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Loại bỏ thành công nhóm người dùng: \"{{name}}\" ra khỏi nhóm", - "admin.access-control.groups.form.subgroups-list.search.button": "Tìm kiếm", - "admin.access-control.groups.form.subgroups-list.search.head": "Thêm nhóm người dùng con", - "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", - "admin.access-control.groups.form.subgroups-list.table.edit": "Loại bỏ \/ Thêm", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Thêm nhóm người dùng con với tên \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Loại bỏ nhóm người dùng con với tên \"{{name}}\"", - "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Nhóm người dùng hiện tại", - "admin.access-control.groups.form.subgroups-list.table.id": "ID", - "admin.access-control.groups.form.subgroups-list.table.name": "Tên", - "admin.access-control.groups.head": "Nhóm người dùng", - "admin.access-control.groups.no-items": "Không tìm thấy nhóm nào có tên hoặc UUID như vậy", - "admin.access-control.groups.notification.deleted.failure.content": "Nguyên nhân: \"{{cause}}\"", - "admin.access-control.groups.notification.deleted.failure.title": "Xóa không thành công nhóm \"{{name}}\"", - "admin.access-control.groups.notification.deleted.success": "Xóa thành công nhóm \"{{name}}\"", - "admin.access-control.groups.search.button": "Tìm kiếm", - "admin.access-control.groups.search.head": "Tìm kiếm nhóm người dùng", - "admin.access-control.groups.search.placeholder": "Tìm kiếm nhóm người dùng...", - "admin.access-control.groups.singleGroup.breadcrumbs": "Chỉnh sửa nhóm người dùng", - "admin.access-control.groups.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", - "admin.access-control.groups.table.edit": "Chỉnh sửa", - "admin.access-control.groups.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", - "admin.access-control.groups.table.edit.buttons.remove": "Xóa \"{{name}}\"", - "admin.access-control.groups.table.id": "ID", - "admin.access-control.groups.table.members": "Thành viên", - "admin.access-control.groups.table.name": "Tên", - "admin.access-control.groups.title": "Nhóm người dùng", - "admin.access-control.groups.title.addGroup": "Tạo nhóm người dùng", - "admin.access-control.groups.title.singleGroup": "Chỉnh sửa nhóm người dùng", - - "admin.search.breadcrumbs": "Tìm kiếm quản trị", - "admin.search.collection.edit": "Chỉnh sửa", - "admin.search.community.edit": "Chỉnh sửa", - "admin.search.item.delete": "Xóa", - "admin.search.item.edit": "Chỉnh sửa", - "admin.search.item.make-private": "Đặt làm tài liệu cá nhân", - "admin.search.item.make-public": "Đặt làm tài liệu công cộng", - "admin.search.item.move": "Di chuyển", - "admin.search.item.reinstate": "Khôi phục", - "admin.search.item.withdraw": "Ẩn", - "admin.search.title": "Tìm kiếm quản trị", - - "administrativeView.search.results.head": "Tìm kiếm quản trị", - - "admin.workflow.breadcrumbs": "Quản trị luồng công việc", - "admin.workflow.title": "Quản trị luồng công việc", - "admin.workflow.item.workflow": "Luồng công việc", - "admin.workflow.item.workspace": "Workspace", - "admin.workflow.item.delete": "Xóa", - "admin.workflow.item.send-back": "Gửi trở lại", - "admin.workflow.item.policies": "Policies", - "admin.workflow.item.supervision": "Supervision", - - "admin.batch-import.breadcrumbs": "Nhập dữ liệu theo lô", - "admin.batch-import.page.dropMsg": "Kéo thả file ZIP để nhập vào", - "admin.batch-import.page.dropMsgReplace": "Kéo thả để thay thế file ZIP cần nhập vào", - "admin.batch-import.page.error.addFile": "Chọn file Zip đầu tiên!", - "admin.batch-import.page.header": "Nhập dữ liệu theo lô", - "admin.batch-import.page.help": "Chọn Bộ sưu tập để nhập dữ liệu. Sau đó kéo thả hoặc duyệt tới tệp tin định dạng zip có chứa các tài liệu cần nhập vào.", - "admin.batch-import.page.remove": "xóa", - "admin.batch-import.title": "Nhập dữ liệu theo lô", - "admin.batch-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra file ZIP tải lên\", hệ thống sẽ chạy một tiến trình kiểm tra việc nhập dữ liệu theo lô thay vì đổ trực tiếp dữ liệu lên hệ thống. Việc này giúp cán bộ xác nhận lại kết quả của quy trình nhập trước khi nhập dữ liệu chính thức. Bỏ chọn tùy chọn này để đổ lô tài liệu lên hệ thống.", - - "admin.metadata-import.breadcrumbs": "Nhập thông tin mô tả", - "admin.metadata-import.page.button.proceed": "Tiếp tục", - "admin.metadata-import.page.button.return": "Quay lại", - "admin.metadata-import.page.button.select-collection": "Chọn Bộ sưu tập", - "admin.metadata-import.page.dropMsg": "Thả một tệp CSV để nhập thông tin mô tả", - "admin.metadata-import.page.dropMsgReplace": "Thả một tệp CSV để nhập thông tin mô tả thay thế", - "admin.metadata-import.page.error.addFile": "Lựa chọn tệp trước!", - "admin.metadata-import.page.header": "Nhập thông tin mô tả", - "admin.metadata-import.page.help": "Bạn có thể thả hoặc duyệt tới tệp CSV chứa hàng loạt các thông tin mô tả tại đây", - "admin.metadata-import.page.validateOnly": "Kiểm tra nhập lô siêu dữ liệu", - "admin.metadata-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra nhập lô siêu dữ liệu\", hệ thống sẽ chạy một tiến trình kiểm tra nhập lô siêu dữ liệu thay vì đổ trực tiếp dữ liệu lên hệ thống. Bỏ chọn tùy chọn này để tiến hành nhập dữ liệu chính thức.", - "admin.metadata-import.title": "Nhập thông tin mô tả", - - "advanced-workflow-action.rating.form.rating.label": "Xếp hạng", - "advanced-workflow-action.rating.form.rating.error": "Bạn phải đánh giá tài liệu/ thực thế này", - "advanced-workflow-action.rating.form.review.label": "Kiểm duyệt", - "advanced-workflow-action.rating.form.review.error": "Bạn phải nhập nội dung đánh giá để gửi bản xếp hạng này", - "advanced-workflow-action.rating.description": "Vui lòng chọn một xếp hạng bên dưới", - "advanced-workflow-action.rating.description-requiredDescription": "Vui lòng chọn xếp hạng bên dưới và thêm đánh giá", - "advanced-workflow-action.select-reviewer.description-single": "Vui lòng chọn một người kiểm duyệt dưới đây trước khi tải tài liệu lên", - "advanced-workflow-action.select-reviewer.description-multiple": "Vui lòng chọn một hoặc nhiều người kiểm duyệt dưới đây trước khi tải tài liệu lên", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Người dùng", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Thêm người dùng", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Duyệt tất cả", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Các thành viên hiện tại", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Siêu dữ liệu", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Tìm kiếm", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Loại bỏ / Thêm", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Loại bỏ người dùng \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Thêm thành công thành viên: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Không thể thêm thành viên: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Xóa thành công thành viên: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Không thể xóa thành viên: \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Thêm thành viên \"{{name}}\"", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Không có nhóm hoạt động, gửi tên trước.", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Chưa có thành viên nào trong nhóm, tìm kiếm để thêm.", - "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Không tìm thấy người dùng", - "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", - - "auth.errors.invalid-user": "Địa chỉ email hoặc mật khẩu không hợp lệ.", - - "auth.messages.expired": "Phiên của bạn đã hết hạn. Xin vui lòng đăng nhập lại.", - "auth.messages.token-refresh-failed": "Làm mới mã token phiên làm việc của bạn không thành công. Vui lòng đăng nhập lại.", - - "bitstream.download.page": "Đang tải xuống {{bitstream}}... ", - "bitstream.download.page.back": "Quay lại", - - "bitstream.edit.authorizations.link": "Chỉnh sửa chính sách của tệp tin", - "bitstream.edit.authorizations.title": "Chỉnh sửa chính sách của tệp tin", - "bitstream.edit.bitstream": "Tệp tin:", - "bitstream.edit.form.description.hint": "Tùy chọn cung cấp mô tả ngắn gọn về tệp ví dụ \"Bài báo chính\" or \"Dữ liệu đọc thử nghiệm\".", - "bitstream.edit.form.description.label": "Mô tả", - "bitstream.edit.form.embargo.hint": "Ngày đầu tiên được phép truy cập. Ngày này không thể được chỉnh sửa trên biểu mẫu này. Để thiết lập một ngày ngừng phục vụ tệp tin này đi tới thẻ Trạng thái tài liệu nhấp Phân quyền... tạo hoặc chỉnh sửa quyền ĐỌC của tệp tin và thiết lập Ngày bắt đầu như mong muốn.", - "bitstream.edit.form.embargo.label": "Ngừng phục vụ cho tới ngày", - "bitstream.edit.form.fileName.hint": "Thay đổi tên tệp cho tệp tin. Lưu ý rằng điều này sẽ thay đổi hiển thị URL tệp tin nhưng các liên kết cũ sẽ vẫn phân giải miễn là ID trình tự không thay đổi.", - "bitstream.edit.form.fileName.label": "Tên tệp", - "bitstream.edit.form.iiifHeight.hint": "Chiều cao của khung thường phải khớp với chiều cao của hình ảnh", - "bitstream.edit.form.iiifHeight.label": "Chiều cao ảnh", - "bitstream.edit.form.iiifLabel.hint": "Tên cho hình ảnh này. Nếu không được cung cấp tên mặc định sẽ được sử dụng.", - "bitstream.edit.form.iiifLabel.label": "Tên", - "bitstream.edit.form.iiifToc.hint": "Thêm mục lục mới", - "bitstream.edit.form.iiifToc.label": "Mục lục", - "bitstream.edit.form.iiifWidth.hint": "Chiều rộng của khung thường phải khớp với chiều rộng của hình", - "bitstream.edit.form.iiifWidth.label": "Chiều rộng khung", - "bitstream.edit.form.newFormat.hint": "Ứng dụng bạn đã sử dụng để tạo tệp và thông tin phiên bản (ví dụ \"ACMESoft SuperApp phiên bản 1.5\").", - "bitstream.edit.form.newFormat.label": "Mô tả định dạng mới", - "bitstream.edit.form.primaryBitstream.label": "Tệp tin chính", - "bitstream.edit.form.selectedFormat.hint": "Nếu định dạng không có trong danh sách trên chọn \"định dạng không có trong danh sách\" trên và mô tả nó dưới mục\"Mô tả định dạng mới\".", - "bitstream.edit.form.selectedFormat.label": "Định dạng đã chọn", - "bitstream.edit.form.selectedFormat.unknown": "Định dạng không có trong danh sách", - "bitstream.edit.notifications.error.format.title": "Đã xảy ra lỗi khi lưu định dạng của tệp tin", - "bitstream.edit.notifications.saved.content": "Thay đổi của bạn đối với tệp tin đã được lưu.", - "bitstream.edit.notifications.saved.title": "Đã lưu tệp tin", - "bitstream.edit.return": "Quay lại", - "bitstream.edit.title": "Chỉnh sửa tệp tin", - - "bitstream-request-a-copy.alert.canDownload1": "Bạn đã có quyền truy cập tệp tin này. Nếu muốn tải tệp tin click ", - "bitstream-request-a-copy.alert.canDownload2": "vào đây", - "bitstream-request-a-copy.allfiles.label": "Các tệp tin", - "bitstream-request-a-copy.email.error": "Vui lòng nhập một địa chỉ email hợp lệ.", - "bitstream-request-a-copy.email.hint": "Địa chỉ email này đã được sử dụng để gửi tệp tin.", - "bitstream-request-a-copy.email.label": "Địa chỉ email của bạn *", - "bitstream-request-a-copy.files-all-false.label": "Chỉ tệp tin được yêu cầu", - "bitstream-request-a-copy.files-all-true.label": "Tất cả tệp tin của tài liệu này đều bị hạn chế quyền truy cập", - "bitstream-request-a-copy.header": "Yêu cầu bản sao", - "bitstream-request-a-copy.intro": "Nhập các thông tin dưới đây để yêu cầu bản sao của tài liệu:", - "bitstream-request-a-copy.intro.bitstream.all": "Yêu cầu tất cả các tệp tin.", - "bitstream-request-a-copy.intro.bitstream.one": "Yêu cầu các tệp tin sau:", - "bitstream-request-a-copy.message.label": "Tin nhắn", - "bitstream-request-a-copy.name.error": "Tên là bắt buộc", - "bitstream-request-a-copy.name.label": "Tên*", - "bitstream-request-a-copy.return": "Quay lại", - "bitstream-request-a-copy.submit": "Yêu cầu bản sao", - "bitstream-request-a-copy.submit.error": "Đã xảy ra lỗi trong quá trình gửi yêu cầu tài liệu.", - "bitstream-request-a-copy.submit.success": "Yêu cầu tài liệu đã được gửi thành công.", - - "browse.back.all-results": "Tất cả kết quả", - - "browse.comcol.by.author": "Tác giả", - "browse.comcol.by.dateissued": "Năm xuất bản", - "browse.comcol.by.subject": "Chủ đề", - "browse.comcol.by.title": "Nhan đề", - "browse.comcol.head": "Duyệt", - - "browse.empty": "Không có tài liệu nào để hiển thị.", - - "browse.metadata.author": "Tác giả", - "browse.metadata.author.breadcrumbs": "Duyệt theo tác giả", - "browse.metadata.dateissued": "Năm xuất bản", - "browse.metadata.dateissued.breadcrumbs": "Duyệt theo năm xuất bản", - "browse.metadata.subject": "Chủ đề", - "browse.metadata.subject.breadcrumbs": "Duyệt theo chủ đề", - "browse.metadata.title": "Nhan đề", - "browse.metadata.title.breadcrumbs": "Duyệt theo nhan đề", - "browse.metadata.topic": "Topic", - "browse.metadata.type": "Kiểu tài liệu", - - "pagination.next.button": "Tiếp theo", - "pagination.previous.button": "Quay lại", - "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", - - "browse.startsWith.choose_year.label": "Chọn năm xuất bản", - "browse.startsWith.choose_year": "(Năm)", - "browse.startsWith.jump": "Chuyển tới một điểm trong chỉ mục:", - "browse.startsWith.months.april": "Tháng Tư", - "browse.startsWith.months.august": "Tháng Tám", - "browse.startsWith.months.december": "Tháng Mười hai", - "browse.startsWith.months.february": "Tháng Hai", - "browse.startsWith.months.january": "Tháng Một", - "browse.startsWith.months.july": "Tháng Bảy", - "browse.startsWith.months.june": "Tháng Sáu", - "browse.startsWith.months.march": "Tháng Ba", - "browse.startsWith.months.may": "Tháng Năm", - "browse.startsWith.months.none.label": "Chọn tháng xuất bản", - "browse.startsWith.months.none": "(Tháng)", - "browse.startsWith.months.november": "Tháng Mười một", - "browse.startsWith.months.october": "Tháng Mười", - "browse.startsWith.months.september": "Tháng Chín", - "browse.startsWith.submit": "Duyệt", - "browse.startsWith.type_date": "Hoặc nhập một ngày (năm-tháng) và nhấp \"Duyệt\"", - "browse.startsWith.type_date.label": "Hoặc nhập một ngày (năm-tháng) à nhấp Duyệt", - "browse.startsWith.type_text": "Nhập một vài ký tự đầu tiên và nhấp vào nút Duyệt", - - "browse.title": "Duyệt {{ collection }} theo {{ field }}{{ startsWith }} {{ value }}", - "browse.title.page": "Duyệt {{ collection }} theo {{ field }} {{ value }}", - - "search.browse.item-back": "Quay lại kết quả tìm kiếm", - - "chips.remove": "Loại bỏ chip", - - "claimed-approved-search-result-list-element.title": "Chấp nhận", - "claimed-declined-search-result-list-element.title": "Đã bị từ chối, đã gửi lại cho người nhập liệu", - "claimed-declined-task-search-result-list-element.title": "Bị từ chối, đã gửi lại tới người quản lý kiểm duyệt", - - "collection.create.head": "Tạo một Bộ sưu tập", - "collection.create.notifications.success": "Tạo bộ sưu tập thành công", - "collection.create.sub-head": "Tạo một bộ sưu tập cho đơnn vị {{ parent }}", - "collection.curate.header": "Kiểm tra bộ sưu tập: {{collection}}", - "collection.delete.cancel": "Hủy", - "collection.delete.confirm": "Xác nhận", - "collection.delete.head": "Xóa bộ sưu tập", - "collection.delete.notification.fail": "Không thể xóa bộ sưu tập", - "collection.delete.notification.success": "Xóa bộ sưu tập thành công", - "collection.delete.processing": "Đang xóa", - "collection.delete.text": "Bạn có chắc chắn rằng bạn muốn xóa bộ sưu tập \"{{ dso }}\"", - "collection.edit.breadcrumbs": "Chỉnh sửa bộ sưu tập", - "collection.edit.delete": "Xóa bộ sưu tập này", - "collection.edit.head": "Chỉnh sửa bộ sưu tập", - "collection.edit.item.authorizations.load-bundle-button": "Hiển thị thêm các nhóm khác", - "collection.edit.item.authorizations.load-more-button": "Hiển thị thêm", - "collection.edit.item.authorizations.show-bitstreams-button": "Hiển thị chính sách phân quyền tệp tin đối với nhóm", - "collection.edit.item-mapper.cancel": "Hủy", - "collection.edit.item-mapper.collection": "Bộ sưu tập: \"{{name}}\"", - "collection.edit.item-mapper.confirm": "Ánh xạ những tài liệu đã chọn", - "collection.edit.item-mapper.description": "Đây là công cụ liên kết tài liệu cho phép người quản trị bộ sưu tập liên kết các tài liệu từ các bộ sưu tập khác vào bộ sưu tập này. Bạn có thể tìm kiếm các tài liệu từ các bộ sưu tập khác và liên kết chúng hoặc duyệt qua danh sách các tài liệu hiện đã được liên kết.", - "collection.edit.item-mapper.head": "Liên kết tài liệu - Liên kết tài liệu tới bộ sưu tập khác", - "collection.edit.item-mapper.no-search": "Vui lòng nhập truy vấn để tìm kiếm", - "collection.edit.item-mapper.notifications.map.error.content": "Đã xảy ra lỗi khi liên kết{{amount}} tài liệu.", - "collection.edit.item-mapper.notifications.map.error.head": "Lỗi liên kết", - "collection.edit.item-mapper.notifications.map.success.content": "Ánh xạ thành công {{amount}} tài liệu.", - "collection.edit.item-mapper.notifications.map.success.head": "Ánh xạ được hoàn thành", - "collection.edit.item-mapper.notifications.unmap.error.content": "Đã xảy ra lỗi khi loại bỏ các liên kết của {{amount}} tài liệu.", - "collection.edit.item-mapper.notifications.unmap.error.head": "Lỗi loại bỏ liên kết", - "collection.edit.item-mapper.notifications.unmap.success.content": "Loại bỏ thành công các liên kết của {{amount}} tài liệu.", - "collection.edit.item-mapper.notifications.unmap.success.head": "Hoàn thành loại bỏ liên kết", - "collection.edit.item-mapper.remove": "Loại bỏ các liên kết của tài liệu được chọn", - "collection.edit.item-mapper.search-form.placeholder": "Tìm kiếm tài liệu...", - "collection.edit.item-mapper.tabs.browse": "Duyệt các tài liệu được liên kết", - "collection.edit.item-mapper.tabs.map": "Liên kết tài liệu mới", - "collection.edit.logo.delete.title": "Xóa logo", - "collection.edit.logo.delete-undo.title": "Hoàn tác xóa", - "collection.edit.logo.label": "Logo bộ sưu tập", - "collection.edit.logo.notifications.add.error": "Tải lên không thành công logo bộ sưu tập. Vui lòng kiểm tra nội dung trước khi thử lại.", - "collection.edit.logo.notifications.add.success": "Tài thành công logo bộ sưu tập.", - "collection.edit.logo.notifications.delete.error.title": "Lỗi khi xóa logo", - "collection.edit.logo.notifications.delete.success.content": "Xóa thành công logo của bộ sưu tập", - "collection.edit.logo.notifications.delete.success.title": "Logo đã được xóa", - "collection.edit.logo.upload": "Thả một logo bộ sưu tập để tải lên", - "collection.edit.notifications.success": "Chỉnh sửa thành công bộ sưu tập", - "collection.edit.return": "Quay lại", - "collection.edit.tabs.authorizations.head": "Phân quyền", - "collection.edit.tabs.authorizations.title": "Chỉnh sửa bộ sưu tập - Phân quyền", - "collection.edit.tabs.curate.head": "Kiểm tra", - "collection.edit.tabs.curate.title": "Chỉnh sửa bộ sưu tập - Kiểm tra", - "collection.edit.tabs.item-mapper.title": "Chỉnh sửa bộ sưu tập - Liên kết tài liệu", - "collection.edit.tabs.mapper.head": "Liên kết tài liệu", - "collection.edit.tabs.metadata.head": "Chỉnh sửa thông tin mô tả", - "collection.edit.tabs.metadata.title": "Chỉnh sửa bộ sưu tập - Siêu dữ liệu", - "collection.edit.tabs.roles.head": "Gán quyền", - "collection.edit.tabs.roles.title": "Chỉnh sửa bộ sưu tập - Vai trò", - "collection.edit.tabs.source.external": "Bộ sưu tập này thu thập nội dung từ một nguồn bên ngoài", - "collection.edit.tabs.source.form.errors.oaiSource.required": "Bạn phải cung cấp một bộ id của bộ sưu tập đích.", - "collection.edit.tabs.source.form.harvestType": "Nội dung đang được thu thập", - "collection.edit.tabs.source.form.head": "Cấu hình nguồn bên ngoài", - "collection.edit.tabs.source.form.metadataConfigId": "Định dạng thông tin mô tả", - "collection.edit.tabs.source.form.oaiSetId": "ID của bộ OAI", - "collection.edit.tabs.source.form.oaiSource": "Nhà cung cấp OAI", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Thu thập thông tin mô tả và tệp tin (yêu cầu hỗ trợ ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Thu thập thông tin mô tả và tham chiếu đến tệp tin (yêu cầu hỗ trợ ORE)", - "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Chỉ thu thập thông tin mô tả", - "collection.edit.tabs.source.head": "Nguồn nội dung", - "collection.edit.tabs.source.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục các thay đổi hãy nhấp vào nút 'Hoàn tác'", - "collection.edit.tabs.source.notifications.discarded.title": "Các thay đổi đã bị hủy", - "collection.edit.tabs.source.notifications.invalid.content": "Các thay đổi chưa được lưu. Hãy đảm bảo rằng tất cả các trường đều hợp lệ trước khi lưu.", - "collection.edit.tabs.source.notifications.invalid.title": "Siêu dữ liệu không hợp lệ", - "collection.edit.tabs.source.notifications.saved.content": "Các thay đổi của bạn đối với nguồn nội dung của bộ sưu tập này đã được lưu.", - "collection.edit.tabs.source.notifications.saved.title": "Nguồn nội dung đã được lưu", - "collection.edit.tabs.source.title": "Chỉnh sửa bộ sưu tập - Nguồn nội dung", - "collection.edit.template.add-button": "Thêm", - "collection.edit.template.breadcrumbs": "Khung mẫu tài liệu", - "collection.edit.template.cancel": "Hủy", - "collection.edit.template.delete-button": "Xóa", - "collection.edit.template.edit-button": "Chỉnh sửa", - "collection.edit.template.error": "Đã xảy ra lỗi khi truy xuất khung mẫu tài liệu", - "collection.edit.template.head": "Chỉnh sửa khung mẫu tài liệu cho bộ sưu tập \"{{ collection }}\"", - "collection.edit.template.label": "Khung mẫu tài liệu", - "collection.edit.template.loading": "Đang tải khung mẫu tài liệu...", - "collection.edit.template.notifications.delete.error": "Xóa khung mẫu tài liệu không thành công", - "collection.edit.template.notifications.delete.success": "Xóa khung mẫu tài liệu thành công", - "collection.edit.template.title": "Chỉnh sửa khung mẫu tài liệu", - "collection.form.abstract": "Mô tả ngắn", - "collection.form.description": "Văn bản giới thiệu (HTML)", - "collection.form.entityType": "Loại thực thể", - "collection.form.errors.title.required": "Vui lòng nhập tên bộ sưu tập", - "collection.form.license": "Giấy phép", - "collection.form.provenance": "Nguồn gốc", - "collection.form.rights": "Bản quyền (HTML)", - "collection.form.tableofcontents": "Tin tức (HTML)", - "collection.form.title": "Tên", - "collection.listelement.badge": "Bộ sưu tập", - "collection.page.browse.recent.empty": "Không có biểu ghi nào để hiển thị", - "collection.page.browse.recent.head": "Những tài liệu tải lên gần đây", - "collection.page.edit": "Chỉnh sửa bộ sưu tập", - "collection.page.handle": "URL", - "collection.page.description.abstract": "Mô tả", - "collection.page.license": "Giấy phép", - "collection.page.news": "Tin tức", - "collection.select.confirm": "Xác nhận các mục đã chọn", - "collection.select.empty": "Không có bộ sưu tập nào để hiển thị", - "collection.select.table.title": "Nhan đề", - "collection.source.controls.harvest.last": "Lần thu thập trước:", - "collection.source.controls.harvest.message": "Thông tin thu thập:", - "collection.source.controls.harvest.no-information": "N\/A", - "collection.source.controls.harvest.start": "Thời gian bắt đầu thu thập:", - "collection.source.controls.harvest.status": "Trạng thái thu thập:", - "collection.source.controls.head": "Quản lý thu thập:", - "collection.source.controls.import.completed": "Quá trình nhập liệu đã hoàn thành", - "collection.source.controls.import.failed": "Xảy ra lỗi trong quá trình nhập dữ liệu", - "collection.source.controls.import.running": "Đang nhập dữ liệu…", - "collection.source.controls.import.submit": "Nhập ngay", - "collection.source.controls.import.submit.error": "Xảy ra sự cố khi bắt đầu quá trình nhập dữ liệu", - "collection.source.controls.import.submit.success": "Quá trình nhập liệu đã được bắt đầu thành công", - "collection.source.controls.reset.completed": "Quá trình thiết lập và nhập lại dữ liệu đã hoàn tất", - "collection.source.controls.reset.failed": "Xảy ra sự cố trong quá trình thiết lập và nhập lại dữ liệu", - "collection.source.controls.reset.running": "Đang thiết lập và nhập lại dữ liệu", - "collection.source.controls.reset.submit": "Thiết lập và nhập lại dữ liệu", - "collection.source.controls.reset.submit.error": "Đã xảy ra lỗi khi bắt đầu thiết lập và nhập lại dữ liệu", - "collection.source.controls.reset.submit.success": "Quá trình thiết lập và nhập lại dữ liệu đã được bắt đầu thành công", - "collection.source.controls.test.completed": "Tập lệnh để kiểm tra cài đặt đã kết thúc thành công", - "collection.source.controls.test.failed": "Tập lệnh để kiểm tra cài đặt không thành công", - "collection.source.controls.test.running": "Cấu hình thử nghiệm…", - "collection.source.controls.test.submit": "Cấu hình thử nghiệm", - "collection.source.controls.test.submit.error": "Đã xảy ra lỗi khi bắt đầu cài đặt thử nghiệm", - "collection.source.update.notifications.error.content": "Các cài đặt đã được kiểm tra và không hoạt động.", - "collection.source.update.notifications.error.title": "Lỗi máy chủ", - - "community.create.head": "Tạo đơn vị", - "community.create.notifications.success": "Tạo đơn vị thành công", - "community.create.sub-head": "Tạo một đơn vị con cho đơn vị {{ parent }}", - "community.curate.header": "Kiểm tra đơn vị: {{community}}", - "community.delete.cancel": "Hủy", - "community.delete.confirm": "Xác nhận", - "community.delete.head": "Xóa đơn vị", - "community.delete.notification.fail": "Không thể xóa đơn vị", - "community.delete.notification.success": "Xóa đơn vị thành công", - "community.delete.processing": "Đang xóa…", - "community.delete.text": "Bạn có chắc chắn muốn xóa đơn vị \"{{ dso }}\"", - "community.edit.breadcrumbs": "Chỉnh sửa đơn vị", - "community.edit.delete": "Xóa đơn vị này", - "community.edit.head": "Chỉnh sửa đơn vị", - "community.edit.logo.delete.title": "Xóa logo", - "community.edit.logo.delete-undo.title": "Hoàn tác xóa", - "community.edit.logo.label": "Logo đơn vị", - "community.edit.logo.notifications.add.error": "Tải lên không thành công thành công logo đơn vị. Vui lòng kiểm tra lại nội dung trước khi tải lại.", - "community.edit.logo.notifications.add.success": "Tài lên thành công logo đơn vị.", - "community.edit.logo.notifications.delete.error.title": "Lỗi khi xóa logo", - "community.edit.logo.notifications.delete.success.content": "Xóa thành công logo của đơn vị", - "community.edit.logo.notifications.delete.success.title": "Đã xóa logo", - "community.edit.logo.upload": "Thả một logo đơn vị để tải lên", - "community.edit.notifications.error": "Đã xảy ra lỗi khi chỉnh sửa đơn vị", - "community.edit.notifications.success": "Chỉnh sửa đơn vị thành công", - "community.edit.notifications.unauthorized": "Bạn không có quyền để thực hiện thay đổi này", - "community.edit.return": "Quay lại", - "community.edit.tabs.authorizations.head": "Phân quyền", - "community.edit.tabs.authorizations.title": "Chỉnh sửa đơn vị - Phân quyền", - "community.edit.tabs.curate.head": "Kiểm tra", - "community.edit.tabs.curate.title": "Chỉnh sửa đơn vị - Kiểm tra", - "community.edit.tabs.metadata.head": "Chỉnh sửa thông tin mô tả", - "community.edit.tabs.metadata.title": "Chỉnh sửa đơn vị - Siêu dữ liệu", - "community.edit.tabs.roles.head": "Gán quyền", - "community.edit.tabs.roles.title": "Chỉnh sửa đơn vị - Quyền", - "community.form.abstract": "Mô tả ngắn", - "community.form.description": "Văn bản giới thiệu (HTML)", - "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", - "community.form.rights": "Thông tin bản quyền (HTML)", - "community.form.tableofcontents": "Tin tức (HTML)", - "community.form.title": "Tên", - "community.listelement.badge": "Đơn vị", - "community.page.edit": "Chỉnh sửa đơn vị", - "community.page.handle": "URL", - "community.page.license": "Giấy phép", - "community.page.news": "Tin tức", - "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", - "community.sub-community-list.head": "Các đơn vị con của đơn vị này", - "communityList.breadcrumbs": "Danh sách đơn vị", - "communityList.showMore": "Hiển thị thêm", - "communityList.tabTitle": "Danh sách đơn vị", - "communityList.title": "Danh sách các đơn vị", - - "comcol-role.edit.bitstream_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", - "comcol-role.edit.bitstream_read.description": "Người có quyền đọc tệp tin có khả năng tải các tệp tin về máy tính cá nhân để sử dụng", - "comcol-role.edit.bitstream_read.name": "Quyền đọc tệp tin mặc định", - "comcol-role.edit.collection-admin.description": "Quản trị viên bộ sưu tập quyết định người có thể tải tài liệu vào bộ sưu tập sửa thông tin mô tả của tài liệu (sau khi tải lên) và thêm (liên kết) tài liệu đã tồn tại từ bộ sưu tập khác (phụ thuộc phân quyền vào bộ sưu tập đó)", - "comcol-role.edit.collection-admin.name": "Quản trị", - "comcol-role.edit.community-admin.description": "Quản trị viên đơn vị có thể tạo đơn vị con hoặc bộ sưu tập và quản lý hoặc gán quyền quản lý cho những đơn vị con hoặc bộ sưu tập đó. Ngoài ra họ quyết định ai có thể tải các tài liệu vào bất kì bộ sưu tập nào chỉnh sửa thông tin thông tin mô tả của tài liệu (sau khi tải lên) và thêm (liên kết) các tài liệu đã tồn tại ở bộ sưu tập khác (phụ thuộc vào phân quyền)", - "comcol-role.edit.community-admin.name": "Quản trị", - "comcol-role.edit.create": "Tạo", - "comcol-role.edit.create.error.title": "Không tạo được nhóm có quyền '{{role }}'", - "comcol-role.edit.delete": "Xóa", - "comcol-role.edit.delete.error.title": "Không thể xóa nhóm có quyền '{{ role }}'", - "comcol-role.edit.editor.description": "Người biên tập có thể chỉnh sửa thông tin mô tả của tài liệu được tải lên, có thể chấp nhận hoặc từ chối tài liệu được tải lên.", - "comcol-role.edit.editor.name": "Người biên tập", - "comcol-role.edit.finaleditor.description": "Người biên tập cuối có thể chỉnh sửa thông tin mô tả của tài liệu được tải lên nhưng không thể từ chối tài liệu được tải lên.", - "comcol-role.edit.finaleditor.name": "Người biên tập cuối", - "comcol-role.edit.item_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", - "comcol-role.edit.item_read.description": "Tài khoản người dùng và nhóm người dùng có thể đọc những tài liệu mới được tải lên bộ sưu tập này. Các thay đổi quyền này không có hiêu lực với những tài liệu đã được tải lên từ trước. Những tài liệu đã tồn tại trong hệ thống sẽ vẫn được xem bởi những người có quyền xem vào thời điểm chúng được bổ sung", - "comcol-role.edit.item_read.name": "Quyền đọc thông tin mô tả của tài liệu", - "comcol-role.edit.no-group": "Trống", - "comcol-role.edit.restrict": "Hạn chế", - "comcol-role.edit.reviewer.description": "Người kiểm duyệt có thể chấp nhận hoặc từ chối các tài liệu được tải lên. Tuy nhiên sẽ không thể chỉnh sửa thông tin mô tả của tài liệu.", - "comcol-role.edit.reviewer.name": "Người kiểm duyệt", - "comcol-role.edit.submitters.description": "Tài khoản người dùng và nhóm người dùng có quyền tải tài liệu mới vào bộ sưu tập này", - "comcol-role.edit.submitters.name": "Người tải lên", - - "community.form.abstract": "Mô tả ngắn", - "community.form.description": "Văn bản giới thiệu (HTML)", - "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", - "community.form.rights": "Thông tin bản quyền (HTML)", - "community.form.tableofcontents": "Tin tức (HTML)", - "community.form.title": "Tên", - - "community.page.edit": "Chỉnh sửa đơn vị", - "community.page.handle": "URL", - "community.page.license": "Giấy phép", - "community.page.news": "Tin tức", - - "community.all-lists.head": "Đơn vị con và bộ sưu tập", - - "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", - "community.sub-community-list.head": "Các đơn vị con của đơn vị này", - - "cookies.consent.accept-all": "Chấp thuận tất cả", - "cookies.consent.accept-selected": "Chấp nhận các mục đã chọn", - "cookies.consent.app.description.acknowledgement": "Bắt buộc để lưu sự xác nhận và đồng ý của bạn", - "cookies.consent.app.description.authentication": "Bắt buộc để đăng nhập", - "cookies.consent.app.description.google-analytics": "Cho phép chúng tôi theo dõi dữ liệu thống kê", - "cookies.consent.app.description.google-recaptcha": "Chúng tôi sử dụng dịch vụ google reCAPTCHA trong quá trình đăng ký và khôi phục mật khẩu", - "cookies.consent.app.description.preferences": "Bắt buộc để lưu tùy chọn của bạn", - "cookies.consent.app.disable-all.description": "Sử dụng nút chuyển này để bật hoặc tắt tất cả dịch vụ.", - "cookies.consent.app.disable-all.title": "Bật hoặc tắt tất cả dịch vụ", - "cookies.consent.app.opt-out.description": "Ứng dụng này đã được tải theo mặc định (nhưng bạn có thể chọn không tham gia)", - "cookies.consent.app.purpose": "mục đích", - "cookies.consent.app.required.description": "Ứng dụng này luôn được yêu cầu", - "cookies.consent.app.title.acknowledgement": "Sự xác nhận", - "cookies.consent.app.title.authentication": "Xác thực", - "cookies.consent.app.title.google-analytics": "Google Analytics", - "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", - "cookies.consent.app.title.preferences": "Cài đặt cá nhân", - "cookies.consent.close": "Đóng", - "cookies.consent.content-modal.description": "Tại đây bạn có thể xem và tùy chỉnh thông tin mà chúng tôi thu thập được về bạn.", - "cookies.consent.content-modal.privacy-policy.name": "chính sách bảo mật", - "cookies.consent.content-modal.privacy-policy.text": "Để biết thêm vui lòng đọc {privacyPolicy} của chúng tôi.", - "cookies.consent.content-modal.service": "dịch vụ", - "cookies.consent.content-modal.services": "các dịch vụ", - "cookies.consent.content-modal.title": "Thông tin mà chúng tôi thu thập", - "cookies.consent.content-notice.description": "Chúng tôi thu thập và xử lý thông tin các nhân của bạn cho các mục đích sau: Xác thực các ưa thích xác nhận và thống kê.
    Để biết thêm vui lòng đọc {privacyPolicy} của chúng tôi.", - "cookies.consent.content-notice.description.no-privacy": "Chúng tôi thu thập và xử lý thông tin cá nhân của bạn cho các mục đích sau: Xác thực Cài đặt cá nhân Xác nhận và Thống kê.", - "cookies.consent.content-notice.learnMore": "Tùy chỉnh", - "cookies.consent.content-notice.title": "Đồng ý sử dụng cookie", - "cookies.consent.decline": "Từ chối", - "cookies.consent.ok": "OK", - "cookies.consent.purpose.functional": "Chức năng", - "cookies.consent.purpose.registration-password-recovery": "Đăng ký và khôi phục mật khẩu", - "cookies.consent.purpose.sharing": "Chia sẻ", - "cookies.consent.purpose.statistical": "Thống kê", - "cookies.consent.save": "Lưu", - "cookies.consent.update": "Có 1 vài thay đổi từ lần ghé thăm cuối cùng của bạn vui lòng cập nhập sự đồng ý của bạn.", - - "curation-task.task.checklinks.label": "\"Kiểm tra các link trong thông tin mô tả\"", - "curation-task.task.citationpage.label": "Tạo trang trích dẫn", - "curation-task.task.noop.label": "NOOP", - "curation-task.task.profileformats.label": "Định dạng tệp tin", - "curation-task.task.register-doi.label": "Đăng ký DOI", - "curation-task.task.requiredmetadata.label": "Kiểm tra các trường dữ liệu bắt buộc", - "curation-task.task.translate.label": "Bộ dịch của Microsoft", - "curation-task.task.vscan.label": "Quét Virus", - - "curation.form.handle.hint": "Gợi ý: Nhập [your-handle-prefix]\/0 để chạy một tác vụ trên toàn bộ trang (chú ý rằng không phải tất cả tác vụ đều hỗ trợ khả năng này)", - "curation.form.handle.label": "Handle:", - "curation.form.submit": "Bắt đầu", - "curation.form.submit.error.content": "Đã có lỗi xảy ra khi cố gắng khởi động tác vụ kiểm tra.", - "curation.form.submit.error.head": "Việc chạy tác vụ kiểm tra đã thất bại", - "curation.form.submit.error.invalid-handle": "Không thể xác định định danh của đối tượng này", - "curation.form.submit.success.content": "Bạn sẽ được điều hướng đến trang phản hồi quy trình.", - "curation.form.submit.success.head": "Tác vụ kiểm tra đã khởi động thành công", - "curation.form.task-select.label": "Tác vụ:", - - "deny-request-copy.email.message": "Kính gửi {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện rất tiếc phải thông báo với bạn rằng chúng tôi không thể gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\nTrân trọng\n,{{ authorName}}<{{ authorEmail }}>", - "deny-request-copy.email.subject": "Yêu cầu bản sao tài liệu", - "deny-request-copy.error": "Đã xảy ra lỗi", - "deny-request-copy.header": "Từ chối yêu cầu bản sao tài liệu", - "deny-request-copy.intro": "Tin nhắn này sẽ được gửi đến người yêu cầu", - "deny-request-copy.success": "Từ chối thành công yêu cầu tài liệu", - - "dso.name.untitled": "Không có nhan đề", - - "dso-selector.claim.item.body": "Đây là những hồ sơ hiện có có thể liên quan đến bạn. Nếu bạn nhận ra mình ở một trong những hồ sơ này hãy chọn hồ sơ đó và trên trang chi tiết hãy chọn xác nhận hồ sơ. Nếu không bạn có thể tạo một hồ sơ mới từ đầu bằng cách sử dụng nút bên dưới.", - "dso-selector.claim.item.create-from-scratch": "Tạo hồ sơ mới", - "dso-selector.claim.item.head": "Mẹo quản lý hồ sơ", - "dso-selector.claim.item.not-mine-label": "Không có mục nào trong số này là của tôi", - "dso-selector.create.collection.head": "Bộ sưu tập mới", - "dso-selector.create.collection.sub-level": "Tạo một bộ sưu tập mới trong", - "dso-selector.create.community.head": "Đơn vị mới", - "dso-selector.create.community.or-divider": "hoặc", - "dso-selector.create.community.sub-level": "Tạo một đơn vị mới trong", - "dso-selector.create.community.top-level": "Tạo một đơn vị lớn", - "dso-selector.create.item.head": "Tài liệu mới", - "dso-selector.create.item.sub-level": "Tạo một tài liệu mới trong", - "dso-selector.create.submission.head": "Biên mục mới", - "dso-selector.create.topic.sub-level": "Tạo topic mới trong", - "dso-selector.create.topic.top-level": "Tạo topic lớn", - "dso-selector.edit.collection.head": "Chỉnh sửa bộ sưu tập", - "dso-selector.edit.community.head": "Chỉnh sửa đơn vị", - "dso-selector.edit.item.head": "Chỉnh sửa tài liệu", - "dso-selector.error.title": "Đã có lỗi xảy ra khi tìm kiếm kiểu tài liệu {{ type }}", - "dso-selector.export-batch.dspaceobject.head": "Xuất lô dữ liệu (định dạng file ZIP) từ", - "dso-selector.export-metadata.dspaceobject.head": "Xuất siêu dữ liệu từ", - "dso-selector.import-batch.dspaceobject.head": "Nhập lô dữ liệu từ", - "dso-selector.no-results": "Không tìm thấy kiểu {{ type }} nào", - "dso-selector.placeholder": "Tìm kiếm {{ type }}", - "dso-selector.results-could-not-be-retrieved": "Đã xảy ra lỗi vui lòng làm mới lại ↻", - "dso-selector.select.collection.head": "Chọn một bộ sưu tập", - "dso-selector.set-scope.community.button": "Tìm kiếm trên toàn hệ thống", - "dso-selector.set-scope.community.head": "Chọn một phạm vi tìm kiếm", - "dso-selector.set-scope.community.input-header": "Tìm kiếm một đơn vị hoặc bộ sưu tập", - "dso-selector.set-scope.community.or-divider": "hoặc", - - "supervision-group-selector.header": "Supervision Group Selector", - "supervision-group-selector.select.type-of-order.label": "Select a type of Order", - "supervision-group-selector.select.type-of-order.option.none": "NONE", - "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", - "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", - "supervision-group-selector.select.group.label": "Select a Group", - "supervision-group-selector.button.cancel": "Cancel", - "supervision-group-selector.button.save": "Save", - "supervision-group-selector.select.type-of-order.error": "Please select a type of order", - "supervision-group-selector.select.group.error": "Please select a group", - "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", - "supervision-group-selector.notification.create.failure.title": "Error", - "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", - - "confirmation-modal.delete-eperson.cancel": "Hủy", - "confirmation-modal.delete-eperson.confirm": "Xóa", - "confirmation-modal.delete-eperson.header": "Xóa người dùng \"{{ dsoName }}\"", - "confirmation-modal.delete-eperson.info": "Bạn có chắc muốn xóa người dùng \"{{ dsoName }}\"", - "confirmation-modal.delete-profile.cancel": "Hủy", - "confirmation-modal.delete-profile.confirm": "Xóa", - "confirmation-modal.delete-profile.header": "Xóa hồ sơ", - "confirmation-modal.delete-profile.info": "Bạn có chắc chắn muốn xóa hồ sơ", - "confirmation-modal.export-batch.cancel": "Hủy", - "confirmation-modal.export-batch.confirm": "Xuất dữ liệu", - "confirmation-modal.export-batch.header": "Xuất lô dữ liệu (định dạng file ZIP) của tác giả {{ dsoName }}", - "confirmation-modal.export-batch.info": "Bạn có chắc chắn muốn xuất lô dữ liệu (định dạng file ZIP) của tác giả {{ dsoName }}", - "confirmation-modal.export-metadata.cancel": "Hủy", - "confirmation-modal.export-metadata.confirm": "Xuất dữ liệu", - "confirmation-modal.export-metadata.header": "Xuất thông tin mô tả tài liệu của đơn vị, bộ sưu tập {{ dsoName }}", - "confirmation-modal.export-metadata.info": "Bạn có chắc muốn xuất thông tin mô tả tài liệu của đơn vị, bộ sưu tập {{ dsoName }}", - "confirmation-modal.policies.cancel": "Hủy", - "confirmation-modal.policies.confirm": "Xác nhận", - "confirmation-modal.policies.header": "Chọn hướng phân quyền cho đối tượng đã di chuyển", - "confirmation-modal.policies.info": "Bạn muốn chọn hướng phân quyền cho đối tượng đã di chuyển", - "confirmation-modal.reset-password-eperson.cancel": "Hủy", - "confirmation-modal.reset-password-eperson.confirm": "Thiết lập lại mật khẩu", - "confirmation-modal.reset-password-eperson.info": "Bạn có chắc chắn muốn thiết lập lại mật khẩu cho người dùng \"{{ dsoName }}\"", - - "error.bitstream": "Lỗi tìm kiếm tệp tin", - "error.browse-by": "Lỗi tìm kiếm tài liệu", - "error.collection": "Lỗi tìm kiếm bộ sưu tập", - "error.collections": "Lỗi tìm kiếm bộ sưu tập", - "error.community": "Lỗi tìm kiếm đơn vị", - "error.default": "Lỗi", - "error.identifier": "Không tìm thấy tài liệu nào cho định danh này", - "error.invalid-search-query": "Truy vấn tìm kiếm không hợp lệ. Vui lòng kiểm tra
    Cú pháp truy vấn Solr các phương pháp tốt nhất để biết thêm thông tin về lỗi này.", - "error.item": "Lỗi tìm kiếm tài liệu", - "error.items": "Lỗi tìm kiếm tài liệu", - "error.objects": "Lỗi tìm kiếm đối tượng", - "error.recent-submissions": "Lỗi tìm kiếm các tài liệu biên mục gần đây", - "error.search-results": "Lỗi tìm kiếm các kết quả tìm", - "error.sub-collections": "Lỗi tìm kiếm bộ sưu tập con", - "error.sub-communities": "Lỗi tìm kiếm đơn vị con", - "error.submission.sections.init-form-error": "Đã xảy ra lỗi khi khởi chạy các phần vui lòng kiểm tra cấu hình biểu mẫu đầu vào của bạn. Thông tin chi tiết ở bên dưới:

    ", - "error.top-level-communities": "Lỗi tìm kiếm đơn vị lớn", - "error.validation.emailTaken": "Email này đã được sử dụng", - "error.validation.filerequired": "Bắt buộc phải tải tệp tin lên", - "error.validation.groupExists": "Nhóm này đã tồn tại", - "error.validation.license.notgranted": "Bạn phải đồng ý với giấy phép này để hoàn thành tài liệu biên mục của mình. Nếu hiện tại bạn không thể đồng ý giấy phép này bạn có thể lưu tài liệu biên mục của mình và quay lại sau hoặc xóa nội dung đã biên mục.", - "error.validation.NotValidEmail": "Email này không hợp lệ", - "error.validation.pattern": "Đầu vào này bị giới hạn bởi mẫu hiện tại: {{ pattern }}.", - "error.validation.required": "Đây là trường bắt buộc", - "error-page.description.401": "không có quyền truy cập", - "error-page.description.403": "không được phép truy cập", - "error-page.description.404": "không tìm thấy trang", - "error-page.description.500": "Dịch vụ không sẵn sàng", - "error-page.orcid.generic-error": "Đã xảy ra lỗi khi đăng nhập qua ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists contact the administrator", - - "feed.description": "Nguồn cấp dữ liệu tổng hợp", - - "file-section.error.header": "Lỗi khi lấy tệp cho tài liệu này", - - "footer.copyright": "bản quyền © 2002-{{ year }}", - "footer.link.cookies": "Cài đặt Cookie", - "footer.link.dspace": "Phần mềm thư viện số", - "footer.link.end-user-agreement": "Thỏa thuận bạn đọc", - "footer.link.feedback": "Gửi phản hồi", - "footer.link.lyrasis": "LYRASIS", - "footer.link.privacy-policy": "Chính sách riêng tư", - - "forgot-email.form.email": "Địa chỉ Email *", - "forgot-email.form.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", - "forgot-email.form.email.error.required": "Vui lòng nhập địa chỉ email", - "forgot-email.form.email.hint": "Địa chỉ email này sẽ được xác nhận và sử dụng như là tên đăng nhập.", - "forgot-email.form.error.content": "Đã xảy ra lỗi khi đăng kí địa chỉ email sau: {{ email }}", - "forgot-email.form.error.head": "Đã xảy ra lỗi khi đăng kí email", - "forgot-email.form.header": "Quên mật khẩu", - "forgot-email.form.info": "Nhập địa chỉ email mà để đăng kí cập nhật thông tin tài liệu mới trong các bộ sưu tập qua email và biên mục tài liệu mới vào thư viện số.", - "forgot-email.form.submit": "Lưu", - "forgot-email.form.success.content": "Một email đã được gửi tới địa chỉ {{ email }} trong đó có chứa URL và các hướng dẫn chi tiết hơn.", - "forgot-email.form.success.head": "Email xác nhận đã được gửi tới bạn", - - "forgot-password.form.card.security": "Bảo mật", - "forgot-password.form.error.empty-password": "Vui lòng nhập mật khẩu mới trong ô dưới đây.", - "forgot-password.form.error.matching-passwords": "Hai mật khẩu không trùng khớp.", - "forgot-password.form.head": "Quên mật khẩu", - "forgot-password.form.identification.email": "Địa chỉ email:", - "forgot-password.form.identification.header": "Định danh", - "forgot-password.form.info": "Nhập mật khẩu mới trong ô dưới đây và xác nhận bằng cách nhập lại vào ô thứ hai. Mật khẩu nên chứa ít nhất 6 kí tự.", - "forgot-password.form.label.password": "Mật khẩu", - "forgot-password.form.label.passwordrepeat": "Nhập lại mật khẩu mới", - "forgot-password.form.notification.error.title": "Đã xảy ra lỗi khi gửi mật khẩu mới", - "forgot-password.form.notification.success.content": "Đã đặt lại mật khẩu thành công. Bạn đã được đăng nhập với tư cách là người dùng được tạo.", - "forgot-password.form.notification.success.title": "Hoàn thành đặt lại mật khẩu", - "forgot-password.form.submit": "Gửi mật khẩu", - "forgot-password.title": "Quên mật khẩu", - - "form.add": "Thêm", - "form.add-help": "Nhấp vào đây để thêm mục hiện tại và một mục khác", - "form.cancel": "Hủy", - "form.clear": "Xóa", - "form.clear-help": "Nhấp vào đây để xóa giá trị đã chọn", - "form.discard": "Hủy bỏ", - "form.drag": "Kéo", - "form.edit": "Chỉnh sửa", - "form.edit-help": "Nhấp vào đây để chỉnh sửa giá trị đã chọn", - "form.first-name": "Tên", - "form.group-collapse": "Thu hẹp", - "form.group-collapse-help": "Nhấp vào đây để thu hẹp", - "form.group-expand": "Mở rộng", - "form.group-expand-help": "Nhấp vào đây để mở rộng và thêm các yếu tố khác", - "form.last-name": "Họ", - "form.loading": "Đang tải...", - "form.lookup": "Tìm kiếm", - "form.lookup-help": "Nhấp vào đây để tìm kiếm mối liên hệ đang tồn tại", - "form.no-results": "Không tìm thấy kết quả phù hợp", - "form.no-value": "Không có giá trị nào được nhập vào", - "form.remove": "Xóa", - "form.repeatable.sort.tip": "Thả tài liệu vào vị trí mới", - "form.save": "Lưu", - "form.save-help": "Lưu thay đổi", - "form.search": "Tìm kiếm", - "form.search-help": "Nhấp vào đây để tìm kiếm thư từ đang tồn tại", - "form.submit": "Lưu", - - "grant-deny-request-copy.deny": "Không gửi bản sao", - "grant-deny-request-copy.email.back": "Quay lại", - "grant-deny-request-copy.email.message": "Tin nhắn", - "grant-deny-request-copy.email.message.empty": "Vui lòng nhập một tin nhắn", - "grant-deny-request-copy.email.permissions.info": "Bạn có thể nhân tiện dịp này để xem xét lại các hạn chế truy cập vào tài liệu để tránh phải trả lời các yêu cầu tương tự. Nếu bạn muốn yêu cầu quản trị hệ thống loại bỏ những hạn chế này vui lòng đánh dấu vào hộp bên dưới.", - "grant-deny-request-copy.email.permissions.label": "Chuyển thành truy cập mở", - "grant-deny-request-copy.email.send": "Gửi", - "grant-deny-request-copy.email.subject": "Chủ đề", - "grant-deny-request-copy.email.subject.empty": "Vui lòng nhập một chủ đề", - "grant-deny-request-copy.grant": "Gửi bản sao", - "grant-deny-request-copy.header": "Yêu cầu bản sao tài liệu", - "grant-deny-request-copy.home-page": "Đi tới trang chủ", - "grant-deny-request-copy.intro1": "Nếu bạn là một trong các tác giả của tài liệu {{ name }} vui lòng sử dụng một trong các tùy chọn dưới đây để phản hồi yêu cầu của bạn đọc.", - "grant-deny-request-copy.intro2": "Sau khi chọn một tùy chọn bạn sẽ thấy một email gợi ý trả lời mà bạn có thể chỉnh sửa.", - "grant-deny-request-copy.processed": "Yêu cầu này đã được xử lý. Bạn có thể sử dụng nút bên dưới để quay lại trang chủ.", - "grant-request-copy.email.message": "Dear {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện đồng ý gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\n\nTrân trọng\n\n{{ authorName }} <{{ authorEmail }}>\n", - "grant-request-copy.email.subject": "Yêu cầu bản sao tài liệu", - "grant-request-copy.error": "Đã xảy ra lỗi", - "grant-request-copy.header": "Chấp nhận yêu cầu bản sao tài liệu", - "grant-request-copy.intro": "Tin nhắn này sẽ được gửi đến người gửi yêu cầu. (Các) tài liệu được yêu cầu sẽ được gửi kèm tin nhắn.", - "grant-request-copy.success": "Yêu cầu tài liệu đã được xử lý thành công", - - "health.breadcrumbs": "Kiểm tra hệ thống", - "health-page.error.msg": "Dịch vụ kiểm tra hệ thống tạm thời không khả dụng", - "health-page.heading": "Kiểm tra hệ thống", - "health-page.info-tab": "Thông tin hệ thống", - "health-page.property.status": "Mã trạng thái", - "health-page.section.db.title": "Cơ sở dữ liệu", - "health-page.section.geoIp.title": "GeoIp", - "health-page.section.no-issues": "Không có vấn đề được phát hiện", - "health-page.section.solrAuthorityCore.title": "Solr: authority core", - "health-page.section.solrOaiCore.title": "Solr: oai core", - "health-page.section.solrSearchCore.title": "Solr: search core", - "health-page.section.solrStatisticsCore.title": "Solr: statistics core", - "health-page.section-info.app.title": "Ứng dụng Backend", - "health-page.section-info.java.title": "Java", - "health-page.status": "Trạng thái", - "health-page.status.error.info": "Các vấn đề được tìm thấy", - "health-page.status.ok.info": "Vận hành", - "health-page.status.warning.info": "Phát hiện các vấn đề có thể xảy ra", - "health-page.status-tab": "Trạng thái", - "health-page.title": "Kiểm tra hệ thống", - - "home.description": "", - "home.breadcrumbs": "Trang chủ", - "home.search-form.placeholder": "Tìm kiếm kho lưu trữ", - "home.title": "Trang chủ", - "home.top-level-communities.head": "Danh sách đơn vị trong DSpace", - "home.top-level-communities.help": "Chọn một đơn vị để xem các bộ sưu tập của nó.", - - "info.contact.breadcrumbs": "Thông tin liên hệ", - "info.contact.head": "Thông tin liên hệ", - "info.contact.title": "Thông tin liên hệ", - "info.end-user-agreement.accept": "Tôi đã đọc và đồng ý với Thỏa thuận bạn đọc", - "info.end-user-agreement.accept.error": "Đã xảy ra lỗi khi chấp nhận Thỏa thuận bạn đọc", - "info.end-user-agreement.accept.success": "Đã cập nhật thành công Thỏa thuận bạn đọc", - "info.end-user-agreement.breadcrumbs": "Thỏa thuận bạn đọc", - "info.end-user-agreement.buttons.cancel": "Hủy", - "info.end-user-agreement.buttons.save": "Lưu", - "info.end-user-agreement.head": "Thỏa thuận người dùng", - "info.end-user-agreement.title": "Thỏa thuận người dùng", - "info.feedback.breadcrumbs": "Phản hồi", - "info.feedback.comments": "Bình luận", - "info.feedback.create.success": "Gửi phản hồi thành công!", - "info.feedback.email_help": "Địa chỉ này sẽ được sử dụng để theo dõi phản hồi của bạn.", - "info.feedback.email-label": "Email", - "info.feedback.error.email.required": "Yêu cầu địa chỉ email hợp lệ", - "info.feedback.error.message.required": "Yêu cầu phải có nội dung bình luận", - "info.feedback.head": "Phản hồi", - "info.feedback.info": "Cảm ơn bạn đã chia sẽ phản hồi của mình tới Thư viện. Chúng tôi luôn trân trọng mọi ý kiến đóng góp của bạn!", - "info.feedback.page_help": "Trang liên kết với các phản hồi của bạn", - "info.feedback.page-label": "Trang", - "info.feedback.send": "Gửi phản hồi", - "info.feedback.title": "Phản hồi", - "info.help.head": "Trợ giúp", - "info.help.title": "Trợ giúp", - "info.privacy.breadcrumbs": "Cam kết bảo mật", - "info.privacy.head": "Cam kết bảo mật", - "info.privacy.title": "Cam kết bảo mật", - - "item.alerts.private": "Đây là tài liệu cá nhân", - "item.alerts.withdrawn": "Tài liệu này đã được chuyển sang chế độ ẩn", - "item.badge.private": "Cá nhân", - "item.badge.withdrawn": "Ẩn", - "item.bitstreams.upload.bundle": "Gói tệp tin", - "item.bitstreams.upload.bundle.new": "Tạo gói tệp tin", - "item.bitstreams.upload.bundle.placeholder": "Chọn một gói tệp tin", - "item.bitstreams.upload.bundles.empty": "Tài liệu này không có gói tệp tin nào để tải tệp tin vào.", - "item.bitstreams.upload.cancel": "Hủy", - "item.bitstreams.upload.drop-message": "Thả tệp tin để tài lên", - "item.bitstreams.upload.item": "Tài liệu:", - "item.bitstreams.upload.notifications.bundle.created.content": "Tạo thành công gói tệp tin.", - "item.bitstreams.upload.notifications.bundle.created.title": "Đã tạo gói tệp tin", - "item.bitstreams.upload.notifications.upload.failed": "Tải lên thất bại. Vui lòng xác minh nội dung sau trước khi thực hiện lại.", - "item.bitstreams.upload.title": "Tải tệp tin lên", - "item.edit.authorizations.heading": "Với trình chỉnh sửa này bạn có thể xem và chỉnh sửa chính sách phân quyền của một tài liệu (item) cũng như các thành phần của tài liệu đó như: gói tệp tin (bundle) và tệp tin (bitstream). Các tài liệu có thể chứa nhiều gói và mỗi gói có thể chứa nhiều tệp tin. Tài liệu và gói tệp tin thường có các quyền là THÊM\/XÓA\/ĐỌC\/CHỈNH SỬA còn tệp tin chỉ có quyền ĐỌC\/CHỈNH SỬA.", - "item.edit.authorizations.title": "Chỉnh sửa chính sách phân quyền của tài liệu", - "item.edit.bitstreams.bundle.displaying": "Đang hiển thị {{ amount }} trong số {{ total }} tệp tin.", - "item.edit.bitstreams.bundle.edit.buttons.upload": "Tải lên", - "item.edit.bitstreams.bundle.load.all": "Tải tất cả ({{ total }})", - "item.edit.bitstreams.bundle.load.more": "Xem thêm", - "item.edit.bitstreams.bundle.name": "GÓI TỆP TIN: {{ name }}", - "item.edit.bitstreams.discard-button": "Hủy bỏ", - "item.edit.bitstreams.edit.buttons.download": "Tải xuống", - "item.edit.bitstreams.edit.buttons.drag": "Kéo", - "item.edit.bitstreams.edit.buttons.edit": "Chỉnh sửa", - "item.edit.bitstreams.edit.buttons.remove": "Xóa", - "item.edit.bitstreams.edit.buttons.undo": "Hoàn tác", - "item.edit.bitstreams.empty": "Tài liệu này không chứa tệp tin nào. Hãy nhập vào nút tải lên để tải tệp tin.", - "item.edit.bitstreams.headers.actions": "Hành động", - "item.edit.bitstreams.headers.bundle": "Gói tệp tin", - "item.edit.bitstreams.headers.description": "Mô tả", - "item.edit.bitstreams.headers.format": "Định dạng", - "item.edit.bitstreams.headers.name": "Tên", - "item.edit.bitstreams.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục các thay đổi của bạn hãy nhấp vào nút 'Hoàn tác'", - "item.edit.bitstreams.notifications.discarded.title": "Các thay đổi đã bị hủy", - "item.edit.bitstreams.notifications.move.failed.title": "Đã xảy ra lỗi khi di chuyển tệp tin", - "item.edit.bitstreams.notifications.move.saved.content": "Các di chuyển của bạn đối với tệp tin và gói tệp tin của tài liệu này đã được lưu lại.", - "item.edit.bitstreams.notifications.move.saved.title": "Di chuyển đã được lưu lại", - "item.edit.bitstreams.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn đã bị hủy bỏ để tránh xảy ra xung đột.", - "item.edit.bitstreams.notifications.outdated.title": "Các thay đổi không có hiệu lực", - "item.edit.bitstreams.notifications.remove.failed.title": "Đã xảy ra lỗi khi xóa tệp tin", - "item.edit.bitstreams.notifications.remove.saved.content": "Các thay đổi liên quan tới việc xóa tệp tin của tài liệu này đã được lưu lại.", - "item.edit.bitstreams.notifications.remove.saved.title": "Việc xóa tệp tin đã được lưu lại", - "item.edit.bitstreams.reinstate-button": "Hoàn tác", - "item.edit.bitstreams.save-button": "Lưu", - "item.edit.bitstreams.upload-button": "Tải lên", - "item.edit.breadcrumbs": "Chỉnh sửa tài liệu", - "item.edit.delete.cancel": "Hủy", - "item.edit.delete.confirm": "Xóa", - "item.edit.delete.description": "Bạn có chắc chắn muốn xóa tài liệu này? Cẩn trọng: Hành động này sẽ xóa vĩnh viễn tài liệu và không thể khôi phục lại.", - "item.edit.delete.error": "Đã xảy ra lỗi trong khi xóa tài liệu này", - "item.edit.delete.header": "Xóa tài liệu: {{ id }}", - "item.edit.delete.success": "Tài liệu đã được xóa thành công", - "item.edit.head": "Chỉnh sửa tài liệu", - "item.edit.item-mapper.buttons.add": "Liên kết tài liệu tới các bộ sưu tập đã chọn", - "item.edit.item-mapper.buttons.remove": "Xóa liên kết tài liệu với các bộ sưu tập đã chọn", - "item.edit.item-mapper.cancel": "Hủy", - "item.edit.item-mapper.description": "Đây là công cụ liên kết tài liệu cho phép quản trị viên có thể liên kết tài liệu này với các bộ sưu tập khác. Bạn có thể tìm kiếm các bộ sưu tập và thực hiện liên kết hoặc xem danh sách các bộ sưu tập mà tài liệu hiện đang được liên kết tới.", - "item.edit.item-mapper.head": "Liên kết tài liệu - Liên kết tài liệu tới Bộ sưu tập khác", - "item.edit.item-mapper.item": "Tài liệu: \"{{name}}\"", - "item.edit.item-mapper.no-search": "Vui lòng nhập một truy vấn để tìm kiếm", - "item.edit.item-mapper.notifications.add.error.content": "Đã xảy ra lỗi khi liên kết tài liệu này tới {{amount}} bộ sưu tập.", - "item.edit.item-mapper.notifications.add.error.head": "Xảy ra lỗi khi liên kết", - "item.edit.item-mapper.notifications.add.success.content": "Đã liên kết thành công tài liệu này tới {{amount}} bộ sưu tập.", - "item.edit.item-mapper.notifications.add.success.head": "Hoàn thành liên kết tài liệu", - "item.edit.item-mapper.notifications.remove.error.content": "Đã xảy ra lỗi khi xóa liên kết của tài liệu với {{amount}} bộ sưu tập.", - "item.edit.item-mapper.notifications.remove.error.head": "Lỗi khi xóa liên kết tài liệu", - "item.edit.item-mapper.notifications.remove.success.content": "Đã xóa thành công liên kết giữa tài liệu với {{amount}} bộ sưu tập.", - "item.edit.item-mapper.notifications.remove.success.head": "Hoàn thành xóa liên kết tài liệu", - "item.edit.item-mapper.search-form.placeholder": "Tìm kiếm bộ sưu tập", - "item.edit.item-mapper.tabs.browse": "Xem các bộ sưu tập đã liên kết", - "item.edit.item-mapper.tabs.map": "Liên kết với các bộ sưu tập mới", - "item.edit.metadata.add-button": "Thêm", - "item.edit.metadata.discard-button": "Hủy bỏ", - "item.edit.metadata.edit.buttons.edit": "Chỉnh sửa", - "item.edit.metadata.edit.buttons.remove": "Xóa", - "item.edit.metadata.edit.buttons.undo": "Hoàn tác", - "item.edit.metadata.edit.buttons.unedit": "Ngừng chỉnh sửa", - "item.edit.metadata.empty": "Bộ sưu tập này hiện không chứa trường thông tin mặc định nào. Nhập vào nút Thêm để bắt đầu thêm giá trị mặc định cho trường thông tin cho các tài liệu biên mục mới trong bộ sưu tập.", - "item.edit.metadata.headers.edit": "Chỉnh sửa", - "item.edit.metadata.headers.field": "Trường", - "item.edit.metadata.headers.language": "Ngôn ngữ", - "item.edit.metadata.headers.value": "Giá trị", - "item.edit.metadata.metadatafield.invalid": "Vui lòng chọn một trường thông tin mô tả hợp lệ", - "item.edit.metadata.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục lại các thay đổi này hãy nhấp vào nút 'Hoàn tác'", - "item.edit.metadata.notifications.discarded.title": "Đã khôi phục", - "item.edit.metadata.notifications.error.title": "Đã có lỗi xảy ra", - "item.edit.metadata.notifications.invalid.content": "Các thay đổi của bạn không được lưu lại. Vui lòng đảm bảo rằng tất cả các trường là hợp lệ trước khi bạn lưu.", - "item.edit.metadata.notifications.invalid.title": "Siêu dữ liệu không hợp lệ", - "item.edit.metadata.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn với tài liệu sẽ bị hủy bỏ để tránh xung đột xảy ra.", - "item.edit.metadata.notifications.outdated.title": "Thay đổi không có hiệu lực", - "item.edit.metadata.notifications.saved.content": "Các thay đổi của bạn với thông tin mô tả của tài liệu này đã được lưu lại.", - "item.edit.metadata.notifications.saved.title": "Đã lưu thông tin mô tả", - "item.edit.metadata.reinstate-button": "Hoàn tác", - "item.edit.metadata.save-button": "Lưu", - "item.edit.modify.overview.field": "Trường", - "item.edit.modify.overview.language": "Ngôn ngữ", - "item.edit.modify.overview.value": "Giá trị", - "item.edit.move.cancel": "Quay lại", - "item.edit.move.description": "Chọn bộ sưu tập mà bạn muốn chuyển tài liệu này tới. Để giới hạn danh sách bộ sưu tập đang hiển thị bạn có thể nhập từ khóa tìm kiếm trong ô dưới đây.", - "item.edit.move.discard-button": "Hủy bỏ", - "item.edit.move.error": "Đã xảy ra lỗi khi thực hiện di chuyển tài liệu này", - "item.edit.move.head": "Di chuyển tài liệu: {{id}}", - "item.edit.move.inheritpolicies.checkbox": "Kế thừa chính sách", - "item.edit.move.inheritpolicies.description": "Kế thừa chính sách mặc định của bộ sưu tập đích", - "item.edit.move.move": "Di chuyển", - "item.edit.move.processing": "Đang di chuyển...", - "item.edit.move.save-button": "Lưu", - "item.edit.move.search.placeholder": "Nhập một từ khóa để tìm kiếm bộ sưu tập", - "item.edit.move.success": "Tài liệu đã được di chuyển thành công", - "item.edit.move.title": "Di chuyển tài liệu", - "item.edit.private.cancel": "Hủy", - "item.edit.private.confirm": "Chuyển thành tài liệu cá nhân", - "item.edit.private.description": "Bạn có chắc chắn muốn chuyển tài liệu này thành tài liệu cá nhân trong thư viện số?", - "item.edit.private.error": "Đã có lỗi xảy ra trong khi chuyển tài liệu sang chế độ cá nhân", - "item.edit.private.header": "Chuyển tài liệu: {{ id }} thành tài liệu cá nhân", - "item.edit.private.success": "Tài liệu bây giờ đã trở thành tài liệu cá nhân", - "item.edit.public.cancel": "Hủy", - "item.edit.public.confirm": "Chuyển thành tài liệu công cộng", - "item.edit.public.description": "Bạn có chắc chắn muốn chuyển tài liệu này thành tài liệu công cộng trong thư viện số?", - "item.edit.public.error": "Đã có lỗi xảy ra trong khi chuyển tài liệu sang chế độ công cộng", - "item.edit.public.header": "Chuyển tài liệu: {{ id }} thành tài liệu công cộng", - "item.edit.public.success": "Tài liệu bây giờ đã trở thành tài liệu công cộng", - "item.edit.reinstate.cancel": "Hủy", - "item.edit.reinstate.confirm": "Khôi phục", - "item.edit.reinstate.description": "Bạn có chắc chắn tài liệu này nên được khôi phục trong thư viện số?", - "item.edit.reinstate.error": "Đã có lỗi xảy ra trong khi khôi phục tài liệu này", - "item.edit.reinstate.header": "Khôi phục tài liệu: {{ id }}", - "item.edit.reinstate.success": "Tài liệu này đã được khôi phục thành công", - "item.edit.relationships.discard-button": "Hủy bỏ", - "item.edit.relationships.edit.buttons.add": "Thêm", - "item.edit.relationships.edit.buttons.remove": "Xóa", - "item.edit.relationships.edit.buttons.undo": "Hoàn tác", - "item.edit.relationships.no-entity-type": "Thêm trường dữ liệu 'dspace.entity.type' để kích hoạt các mối quan hệ cho tài liệu này", - "item.edit.relationships.no-relationships": "Không có mối quan hệ nào", - "item.edit.relationships.notifications.discarded.content": "các thay đổi của bạn đã bị hủy bỏ. Để khôi phục các thay đổi này hãy nhấp vào nút 'Hoàn tác'", - "item.edit.relationships.notifications.discarded.title": "Các thay đổi đã bị hủy", - "item.edit.relationships.notifications.failed.title": "Lỗi khi chỉnh sửa mối quan hệ", - "item.edit.relationships.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn đã bị hủy bỏ để tránh xảy ra xung đột.", - "item.edit.relationships.notifications.outdated.title": "Các thay đổi không có hiệu lực", - "item.edit.relationships.notifications.saved.content": "Các thay đổi của bạn đối với các mối quan hệ của tài liệu này đã được lưu lại.", - "item.edit.relationships.notifications.saved.title": "Mối quan hệ đã được lưu lại", - "item.edit.relationships.reinstate-button": "Hoàn tác", - "item.edit.relationships.save-button": "Lưu", - "item.edit.return": "Quay lại", - "item.edit.tabs.bitstreams.head": "Tệp tin", - "item.edit.tabs.bitstreams.title": "Chỉnh sửa tài liệu - Tệp tin", - "item.edit.tabs.curate.head": "Kiểm tra dữ liệu", - "item.edit.tabs.curate.title": "Chỉnh sửa tài liệu - Kiểm tra dữ liệu", - "item.edit.tabs.disabled.tooltip": "Bạn không có quyền truy cập vào tab này", - "item.edit.tabs.item-mapper.title": "Chỉnh sửa tài liệu - Liên kết bộ sưu tập", - "item.edit.tabs.mapper.head": "Liên kết bộ sưu tập", - "item.edit.tabs.metadata.head": "Siêu dữ liệu", - "item.edit.tabs.metadata.title": "Chỉnh sửa tài liệu - Siêu dữ liệu", - "item.edit.tabs.relationships.head": "Mối quan hệ", - "item.edit.tabs.relationships.title": "Chỉnh sửa tài liệu - Mối quan hệ", - "item.edit.tabs.status.buttons.authorizations.button": "Phân quyền tài liệu", - "item.edit.tabs.status.buttons.authorizations.label": "Chỉnh sửa chính sách phân quyền của tài liệu", - "item.edit.tabs.status.buttons.delete.button": "Xóa vĩnh viễn", - "item.edit.tabs.status.buttons.delete.label": "Xóa tài liệu", - "item.edit.tabs.status.buttons.mappedCollections.button": "Bộ sưu tập đã liên kết", - "item.edit.tabs.status.buttons.mappedCollections.label": "Kiểm tra bộ sưu tập đã liên kết", - "item.edit.tabs.status.buttons.move.button": "Di chuyển tài liệu", - "item.edit.tabs.status.buttons.move.label": "Di chuyển tài liệu tới bộ sưu tập khác", - "item.edit.tabs.status.buttons.private.button": "Chuyển thành tài liệu cá nhân", - "item.edit.tabs.status.buttons.private.label": "Chuyển thành tài liệu cá nhân", - "item.edit.tabs.status.buttons.public.button": "Chuyển thành tài liệu công cộng", - "item.edit.tabs.status.buttons.public.label": "Chuyển tài liệu thành công cộng", - "item.edit.tabs.status.buttons.reinstate.button": "Khôi phục", - "item.edit.tabs.status.buttons.reinstate.label": "Khôi phục tài liệu vào kho lưu trữ", - "item.edit.tabs.status.buttons.unauthorized": "Bạn không có quyền thực hiện hành động này", - "item.edit.tabs.status.buttons.withdraw.button": "Ẩn", - "item.edit.tabs.status.buttons.withdraw.label": "Ẩn tài liệu khỏi kho lưu trữ", - "item.edit.tabs.status.description": "Chào mừng bạn đến với trang quản lý tài liệu. Từ đây bạn có thể ẩn khôi phục di chuyển hoặc xóa tài liệu. Bạn cũng có thể cập nhật hoặc nhập thêm trường dữ liệu mới tải thêm tệp tin trên những tab khác.", - "item.edit.tabs.status.head": "Trạng thái", - "item.edit.tabs.status.labels.handle": "Handle", - "item.edit.tabs.status.labels.bundleName": "Bundle name", - "item.edit.tabs.status.labels.id": "ID tài liệu", - "item.edit.tabs.status.labels.itemPage": "Trang tài liệu", - "item.edit.tabs.status.labels.lastModified": "Chỉnh sửa lần cuối", - "item.edit.tabs.status.title": "Chỉnh sửa tài liệu - Trạng thái", - "item.edit.tabs.versionhistory.head": "Lịch sử phiên bản", - "item.edit.tabs.versionhistory.title": "Chỉnh sửa tài liệu - Lịch sử phiên bản", - "item.edit.tabs.versionhistory.under-construction": "Chưa thể chỉnh sửa hoặc tạo thêm phiên bản trên giao diện người dùng này.", - "item.edit.tabs.view.head": "Xem tài liệu", - "item.edit.tabs.view.title": "Chỉnh sửa tài liệu - Xem", - "item.edit.withdraw.cancel": "Hủy", - "item.edit.withdraw.confirm": "Ẩn", - "item.edit.withdraw.description": "Bạn có chắc chắn muốn ẩn tài liệu này khỏi kho lưu trữ?", - "item.edit.withdraw.error": "Đã có lỗi xảy ra trong khi thực hiện ẩn tài liệu này", - "item.edit.withdraw.header": "Ẩn tài liệu: {{ id }}", - "item.edit.withdraw.success": "Tài liệu này đã được ẩn thành công", - "item.listelement.badge": "Tài liệu", - "item.orcid.return": "Quay lại", - "item.page.name": "Tên", - "item.page.abstract": "Tóm tắt", - "item.page.author": "Tác giả", - "item.page.bitstreams.collapse": "Thu hẹp", - "item.page.bitstreams.view-more": "Hiển thị thêm", - "item.page.citation": "Trích dẫn", - "item.page.claim.button": "Nhận nhiệm vụ", - "item.page.claim.tooltip": "Nhận nhiệm vụ tài liệu này", - "item.page.collections": "Bộ sưu tập", - "item.page.collections.loading": "Đang tải…", - "item.page.collections.load-more": "Xem thêm", - "item.page.date": "Năm xuất bản", - "item.page.description": "Mô tả", - "item.page.edit": "Chỉnh sửa tài liệu này", - "item.page.files": "Tệp tin", - "item.page.filesection.description": "Mô tả:", - "item.page.filesection.download": "Tải xuống", - "item.page.filesection.view": "Xem trực tuyến", - "item.page.filesection.format": "Định dạng:", - "item.page.filesection.license.bundle": "Tập tin giấy phép", - "item.page.filesection.name": "Tên:", - "item.page.filesection.original.bundle": "Tập tin chính của tài liệu", - "item.page.filesection.size": "Dung lượng:", - "item.page.journal.search.title": "Bài viết trong tạp chí này", - "item.page.journal-issn": "ISSN", - "item.page.journal-title": "Nhan đề tạp chí", - "item.page.link.full": "Hiển thị chi tiết", - "item.page.link.simple": "Hiển thị đơn giản", - "item.page.orcid.title": "ORCID", - "item.page.orcid.tooltip": "Mở trang cài đặt ORCID", - "item.page.person.search.title": "Bài viết của tác giả này", - "item.page.publisher": "Nhà xuất bản", - "item.page.related-items.view-less": "Ẩn {{ amount }} tài liệu cuối", - "item.page.related-items.view-more": "Hiển thị thêm {{ amount }} tài liệu", - "item.page.relationships.isAuthorOfPublication": "Ấn phẩm", - "item.page.relationships.isJournalOfPublication": "Ấn phẩm", - "item.page.relationships.isOrgUnitOfPerson": "Tác giả", - "item.page.relationships.isOrgUnitOfProject": "Dự án nghiên cứu", - "item.page.return": "Quay lại", - "item.page.subject": "Từ khóa chủ đề", - "item.page.titleprefix": "Tài liệu:", - "item.page.uri": "URL", - "item.page.version.create": "Tạo phiên bản mới", - "item.page.version.hasDraft": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", - "item.page.volume-title": "Nhan đề tập", - "item.preview.dc.contributor.author": "Tác giả:", - "item.preview.dc.coverage.spatial": "Quyền hạn:", - "item.preview.dc.date.issued": "Năm xuất bản:", - "item.preview.dc.description.abstract": "Tóm tắt:", - "item.preview.dc.identifier": "Định danh:", - "item.preview.dc.identifier.doi": "DOI", - "item.preview.dc.identifier.isbn": "ISBN", - "item.preview.dc.identifier.other": "Định danh khác:", - "item.preview.dc.identifier.uri": "Định danh:", - "item.preview.dc.language.iso": "Ngôn ngữ:", - "item.preview.dc.relation.ispartof": "Tạp chí hoặc Ấn phẩm định kỳ", - "item.preview.dc.relation.issn": "ISSN", - "item.preview.dc.subject": "Chủ đề:", - "item.preview.dc.title": "Nhan đề:", - "item.preview.dc.title.alternative": "Viết tắt:", - "item.preview.dc.type": "Loại hình tài liệu:", - "item.preview.oaire.awardNumber": "ID quỹ:", - "item.preview.oaire.citation.issue": "Kỳ ấn phẩm", - "item.preview.oaire.citation.volume": "Tập", - "item.preview.oaire.fundingStream": "Dòng quỹ:", - "item.preview.person.familyName": "Họ:", - "item.preview.person.givenName": "Tên:", - "item.preview.person.identifier.orcid": "ORCID:", - "item.preview.project.funder.identifier": "Định danh nhà tài trợ:", - "item.preview.project.funder.name": "Nhà tài trợ:", - "item.search.results.head": "Kết quả tìm kiếm tài liệu", - "item.search.title": "Tìm kiếm tài liệu", - "item.select.confirm": "Xác nhận cái đã chọn", - "item.select.empty": "Không có tài liệu để hiển thị", - "item.select.table.author": "Tác giả", - "item.select.table.collection": "Bộ sưu tập", - "item.select.table.title": "Nhan đề", - "item.truncatable-part.show-less": "Thu hẹp", - "item.truncatable-part.show-more": "Xem thêm", - "item.version.create.modal.button.cancel": "Hủy", - "item.version.create.modal.button.cancel.tooltip": "Không thể tạo phiên bản mới", - "item.version.create.modal.button.confirm": "Tạo", - "item.version.create.modal.button.confirm.tooltip": "Tạo phiên bản mới", - "item.version.create.modal.form.summary.label": "Thông tin tổng quan", - "item.version.create.modal.form.summary.placeholder": "Thêm thông tin mô tả cho phiên bản mới", - "item.version.create.modal.header": "Phiên bản mới", - "item.version.create.modal.submitted.header": "Tạp phiên bản mới…", - "item.version.create.modal.submitted.text": "Phiên bản mới đang được tạo. Có thể mất một chút thời gian để hoàn tất nếu tài liệu có nhiều mối quan hệ.", - "item.version.create.modal.text": "Tạo phiên bản mới cho tài liệu này", - "item.version.create.modal.text.startingFrom": "bắt đầu từ phiên bản {{version}}", - "item.version.create.notification.failure": "Phiên bản mới chưa được tạo", - "item.version.create.notification.inProgress": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", - "item.version.create.notification.success": "Phiên bản mới đã được tạo với mã số phiên bản là {{version}}", - "item.version.delete.modal.button.cancel": "Hủy", - "item.version.delete.modal.button.cancel.tooltip": "Không xóa phiên bản này", - "item.version.delete.modal.button.confirm": "Xóa", - "item.version.delete.modal.button.confirm.tooltip": "Xóa phiên bản này", - "item.version.delete.modal.header": "Xóa phiên bản", - "item.version.delete.modal.text": "Bạn có muốn xóa phiên bản {{version}}?", - "item.version.delete.notification.failure": "Phiên bản {{version}} chưa bị xóa", - "item.version.delete.notification.success": "Phiên bản {{version}} đã được xóa", - "item.version.edit.notification.failure": "Thông tin tổng quan của phiên bản {{version}} chưa được thay đổi", - "item.version.edit.notification.success": "Thông tin tổng quan của phiên bản {{version}} đã được thay đổi", - "item.version.history.empty": "Chưa có phiên bản nào khác của tài liệu này.", - "item.version.history.head": "Lịch sử phiên bản", - "item.version.history.return": "Quay lại", - "item.version.history.selected": "Phiên bản đã chọn", - "item.version.history.selected.alert": "Hiện tại bạn đang xem phiên bản {{version}} của tài liệu này.", - "item.version.history.table.action.deleteVersion": "Xóa phiên bản", - "item.version.history.table.action.discardSummary": "Hủy chỉnh sửa", - "item.version.history.table.action.editSummary": "Chỉnh sửa thông tin tổng quan", - "item.version.history.table.action.editWorkspaceItem": "Chỉnh sửa biểu ghi đang biên mục", - "item.version.history.table.action.hasDraft": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", - "item.version.history.table.action.newVersion": "Tạo phiên bản mới từ tài liệu này", - "item.version.history.table.action.saveSummary": "Lưu", - "item.version.history.table.actions": "Hành động", - "item.version.history.table.date": "Thời gian xuất bản", - "item.version.history.table.editor": "Người biên tập", - "item.version.history.table.item": "Tài liệu", - "item.version.history.table.summary": "Tóm tắt", - "item.version.history.table.version": "Phiên bản", - "item.version.history.table.workflowItem": "Đang kiểm duyệt", - "item.version.history.table.workspaceItem": "Đang biên mục", - "item.version.notice": "Đây không phải là phiên bản mới nhất của tài liệu này. Phiên bản mới nhất có thể xem tại đây.", - - "itemtemplate.edit.metadata.add-button": "Add", + "401.help": "Bạn không có quyền truy cập trang này. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", + "401.link.home-page": "Đi tới trang chủ", + "401.unauthorized": "không có quyền truy cập", + "403.forbidden": "không được phép truy cập", + "403.help": "Bạn không có quyền truy cập trang này. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", + "403.link.home-page": "Đi tới trang chủ", + "404.help": "Chúng tôi không tìm thấy trang mà bạn đang tìm kiếm. Trang này có thể đã được chuyển tới một địa chỉ khác hoặc đã bị xóa. Bạn có thể sử dụng nút chức năng phía dưới để quay lại trang chủ.", + "404.link.home-page": "Đi tới trang chủ", + "404.page-not-found": "không tìm thấy trang", + "500.help": "Máy chủ tạm thời không thể phục vụ yêu cầu của bạn do đang trong giai đoạn bảo trì hoặc vấn đề về dung lượng. Vui lòng thử lại sau.", + "500.link.home-page": "Đi tới trang chủ", + "500.page-internal-server-error": "Dịch vụ không sẵn sàng", + + "access-status.embargo.listelement.badge": "Ngăn chặn", + "access-status.metadata.only.listelement.badge": "Chỉ siêu dữ liệu", + "access-status.open.access.listelement.badge": "Truy cập mở", + "access-status.restricted.listelement.badge": "Hạn chế", + "access-status.unknown.listelement.badge": "Không xác định", + + "admin.curation-tasks.breadcrumbs": "Thu thập các tác vụ hệ thống", + "admin.curation-tasks.header": "Thu thập các tác vụ hệ thống", + "admin.curation-tasks.title": "Thu thập các tác vụ hệ thống", + + "admin.registries.bitstream-formats.breadcrumbs": "Tạo định dạng", + "admin.registries.bitstream-formats.create.breadcrumbs": "Định dạng tệp tin", + "admin.registries.bitstream-formats.create.failure.content": "Đã xảy ra lỗi khi tạo định dạng tệp tin mới.", + "admin.registries.bitstream-formats.create.failure.head": "Không thành công", + "admin.registries.bitstream-formats.create.head": "Tạo định dạng tệp tin", + "admin.registries.bitstream-formats.create.new": "Thêm một định dạng tệp tin mới", + "admin.registries.bitstream-formats.create.success.content": "Định dạng tệp tin mới đã được tạo thành công.", + "admin.registries.bitstream-formats.create.success.head": "Thành công", + "admin.registries.bitstream-formats.delete.failure.amount": "Loại bỏ không thành công {{ amount }} định dạng", + "admin.registries.bitstream-formats.delete.failure.head": "Không thành công", + "admin.registries.bitstream-formats.delete.success.amount": "Loại bỏ thành công {{ amount }} định dạng", + "admin.registries.bitstream-formats.delete.success.head": "Thành công", + "admin.registries.bitstream-formats.description": "Danh sách các định dạng tệp tin này cung cấp thông tin về các định dạng đã biết và mức hỗ trợ của chúng.", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Định dạng tệp tin", + "admin.registries.bitstream-formats.edit.description.label": "Mô tả", + "admin.registries.bitstream-formats.edit.extensions.hint": "Tiện ích mở rộng là phần mở rộng tệp được sử dụng để tự động xác định định dạng của tệp được tải lên. Bạn có thể nhập một vài phần mở rộng cho mỗi định dạng.", + "admin.registries.bitstream-formats.edit.extensions.label": "Mở rộng tệp", + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Nhập một phần mở rộng tệp không có dấu chấm", + "admin.registries.bitstream-formats.edit.failure.content": "Đã xảy ra lỗi khi chỉnh sửa định dạng tệp tin.", + "admin.registries.bitstream-formats.edit.failure.head": "Không thành công", + "admin.registries.bitstream-formats.edit.head": "Định dạng tệp tin: {{ format }}", + "admin.registries.bitstream-formats.edit.internal.hint": "Các định dạng được đánh dấu là nội bộ sẽ được ẩn đối với người dùng và được sử dụng cho các mục đích quản trị.", + "admin.registries.bitstream-formats.edit.internal.label": "Nội bộ", + "admin.registries.bitstream-formats.edit.mimetype.hint": "Kiểu MIME được liên kết với định dạng này không nhất thiết phải là duy nhất.", + "admin.registries.bitstream-formats.edit.mimetype.label": "Kiểu MIME", + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Một tên duy nhất cho định dạng này (ví dụ: Microsoft Word XP hoặc Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.label": "Tên", + "admin.registries.bitstream-formats.edit.success.content": "Định dạng tệp tin đã được chỉnh sửa thành công.", + "admin.registries.bitstream-formats.edit.success.head": "Thành công", + "admin.registries.bitstream-formats.edit.supportLevel.hint": "Mức độ hỗ trợ mà đơn vị của bạn cam kết cho định dạng này.", + "admin.registries.bitstream-formats.edit.supportLevel.label": "Mức độ hỗ trợ", + "admin.registries.bitstream-formats.head": "Tạo định dạng tệp tin số", + "admin.registries.bitstream-formats.no-items": "Không có định dạng tệp tin nào để hiển thị.", + "admin.registries.bitstream-formats.table.delete": "Xóa các mục được chọn", + "admin.registries.bitstream-formats.table.deselect-all": "Bỏ chọn tất cả", + "admin.registries.bitstream-formats.table.id": "ID", + "admin.registries.bitstream-formats.table.internal": "nội bộ", + "admin.registries.bitstream-formats.table.mimetype": "Kiểu MIME", + "admin.registries.bitstream-formats.table.name": "Tên", + "admin.registries.bitstream-formats.table.return": "Quay lại", + "admin.registries.bitstream-formats.table.supportLevel.head": "Mức độ hỗ trợ", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Đã xác định", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Được hỗ trợ", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Không xác định", + "admin.registries.bitstream-formats.title": "Tạo định dạng tệp tin số", + "admin.registries.metadata.breadcrumbs": "Mẫu nhập liệu", + "admin.registries.metadata.description": "Tạo mẫu nhập liệu cho phép duy trì danh sách tất cả các trường thông tin mô tả có sẵn trong hệ thống. Các trường này có thể được phân ra cho nhiều lược đồ. Tuy nhiên DSpace yêu cầu đủ điều kiện cho lược đồ Dublin Core.", + "admin.registries.metadata.form.create": "Tạo lược đồ thông tin mô tả", + "admin.registries.metadata.form.edit": "Chỉnh sửa lược đồ thông tin mô tả", + "admin.registries.metadata.form.name": "Tên", + "admin.registries.metadata.form.namespace": "Tên miền", + "admin.registries.metadata.head": "Tạo mẫu nhập liệu", + "admin.registries.metadata.schemas.no-items": "Không có lược đồ thông tin mô tả nào để hiển thị.", + "admin.registries.metadata.schemas.table.delete": "Xóa các mục đã chọn", + "admin.registries.metadata.schemas.table.id": "ID", + "admin.registries.metadata.schemas.table.name": "Tên", + "admin.registries.metadata.schemas.table.namespace": "Tên miền", + "admin.registries.metadata.title": "Tạo mẫu nhập liệu", + "admin.registries.schema.breadcrumbs": "Lược đồ thông tin mô tả", + "admin.registries.schema.description": "Đây là lược đồ thông tin mô tả cho \"{{namespace}}\".", + "admin.registries.schema.fields.head": "Lược đồ các trường thông tin mô tả", + "admin.registries.schema.fields.no-items": "Không có trường thông tin mô tả nào để hiển thị.", + "admin.registries.schema.fields.table.delete": "Xóa các mục đã lựa chọn", + "admin.registries.schema.fields.table.field": "Trường", + "admin.registries.schema.fields.table.id": "ID", + "admin.registries.schema.fields.table.scopenote": "Ghi chú phạm vi", + "admin.registries.schema.form.create": "Tạo trường thông tin mô tả", + "admin.registries.schema.form.edit": "Chỉnh sửa trường thông tin mô tả", + "admin.registries.schema.form.element": "Yếu tố", + "admin.registries.schema.form.qualifier": "Đối tượng bổ trợ", + "admin.registries.schema.form.scopenote": "Ghi chú phạm vi", + "admin.registries.schema.head": "Lược đồ thông tin mô tả", + "admin.registries.schema.notification.created": "Tạo thành công lược đồ thông tin mô tả \"{{prefix}}\"", + "admin.registries.schema.notification.deleted.failure": "Xóa không thành công {{amount}} lược đồ thông tin mô tả", + "admin.registries.schema.notification.deleted.success": "Đã xóa thành công {{amount}} lược đồ thông tin mô tả", + "admin.registries.schema.notification.edited": "Chỉnh sửa thành công lược đồ thông tin mô tả \"{{prefix}}\"", + "admin.registries.schema.notification.failure": "Lỗi", + "admin.registries.schema.notification.field.created": "Tạo thành công trường thông tin mô tả \"{{field}}\"", + "admin.registries.schema.notification.field.deleted.failure": "Xóa không thành công {{amount}} trường thông tin mô tả", + "admin.registries.schema.notification.field.deleted.success": "Đã xóa thành công {{amount}} trường thông tin mô tả", + "admin.registries.schema.notification.field.edited": "Chỉnh sửa thành công trường thông tin mô tả \"{{field}}\"", + "admin.registries.schema.notification.success": "Thành công", + "admin.registries.schema.return": "Quay lại", + "admin.registries.schema.title": "Tạo lược đồ thông tin mô tả", + + "admin.access-control.epeople.actions.delete": "Xóa người dùng", + "admin.access-control.epeople.actions.impersonate": "Mạo danh người dùng", + "admin.access-control.epeople.actions.reset": "Cài lại mật khẩu", + "admin.access-control.epeople.actions.stop-impersonating": "Dừng mạo danh người dùng", + "admin.access-control.epeople.breadcrumbs": "Người dùng", + "admin.access-control.epeople.button.add": "Thêm người dùng", + "admin.access-control.epeople.button.see-all": "Duyệt toàn bộ", + "admin.access-control.epeople.form.canLogIn": "Có thể đăng nhập", + "admin.access-control.epeople.form.create": "Tạo người dùng", + "admin.access-control.epeople.form.edit": "Chỉnh sửa người dùng", + "admin.access-control.epeople.form.email": "E-mail", + "admin.access-control.epeople.form.emailHint": "Phải là địa chỉ e-mail hợp lệ", + "admin.access-control.epeople.form.firstName": "Tên", + "admin.access-control.epeople.form.goToGroups": "Thêm vào nhóm", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Thành viên của các nhóm:", + "admin.access-control.epeople.form.lastName": "Họ", + "admin.access-control.epeople.form.memberOfNoGroups": "Người dùng không là thành viên của bất kỳ nhóm nào", + "admin.access-control.epeople.form.notification.created.failure": "Tạo không thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Tạo không thành công người dùng \"{{name}}\" email \"{{email}}\" đã được sử dụng.", + "admin.access-control.epeople.form.notification.created.success": "Tạo thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Xóa không thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "Xóa thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure": "Chỉnh sửa không thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Chỉnh sửa không thành công người dùng \"{{name}}\" email \"{{email}}\" đã được sử dụng.", + "admin.access-control.epeople.form.notification.edited.success": "Chỉnh sửa thành công người dùng \"{{name}}\"", + "admin.access-control.epeople.form.requireCertificate": "Khóa tài khoản", + "admin.access-control.epeople.form.return": "Quay lại", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.epeople.form.table.id": "ID", + "admin.access-control.epeople.form.table.name": "Tên", + "admin.access-control.epeople.head": "Người dùng", + "admin.access-control.epeople.no-items": "Không có người dùng nào để hiển thị.", + "admin.access-control.epeople.notification.deleted.failure": "Xóa không thành công người dùng: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "Xóa thành công người dùng: \"{{name}}\"", + "admin.access-control.epeople.notification.resetpassword.success": "Thiết lập lại mật khẩu thành công cho người dùng: \"{{name}}\"", + "admin.access-control.epeople.search.button": "Tìm kiếm", + "admin.access-control.epeople.search.head": "Tìm kiếm", + "admin.access-control.epeople.search.placeholder": "Tìm kiếm người dùng...", + "admin.access-control.epeople.search.scope.email": "E-mail (chính xác)", + "admin.access-control.epeople.search.scope.metadata": "Siêu dữ liệu", + "admin.access-control.epeople.table.edit": "Chỉnh sửa", + "admin.access-control.epeople.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Bạn không có quyền chỉnh sửa nhóm này", + "admin.access-control.epeople.table.edit.buttons.remove": "Xóa \"{{name}}\"", + "admin.access-control.epeople.table.email": "E-mail (chính xác)", + "admin.access-control.epeople.table.id": "ID", + "admin.access-control.epeople.table.name": "Tên", + "admin.access-control.epeople.title": "Người dùng", + "admin.access-control.groups.addGroup.breadcrumbs": "Tạo nhóm người dùng", + "admin.access-control.groups.breadcrumbs": "Nhóm người dùng", + "admin.access-control.groups.button.add": "Thêm nhóm người dùng", + "admin.access-control.groups.button.see-all": "Duyệt toàn bộ", + "admin.access-control.groups.form.actions.delete": "Xóa nhóm người dùng", + "admin.access-control.groups.form.alert.permanent": "Nhóm này là cố định vì vậy nó không thể bị chỉnh sửa hoặc xóa. Bạn vẫn có thể thêm và loại bỏ thành viên trong nhóm tại trang này.", + "admin.access-control.groups.form.alert.workflowGroup": "Không thể chỉnh sửa hoặc xóa nhóm này vì nó tương ứng với một vai trò trong quá trình gửi và quy trình xử lý trong \"{{name}}\" {{comcol}}. Bạn có thể xóa nó từ thẻ assign roles<\/a> trên trang chỉnh sửa {{comcol}}. Bạn vẫn có thể thêm và loại bỏ thành viên nhóm bằng trang này.\"", + "admin.access-control.groups.form.delete-group.modal.cancel": "Hủy", + "admin.access-control.groups.form.delete-group.modal.confirm": "Xóa", + "admin.access-control.groups.form.delete-group.modal.header": "Xóa nhóm người dùng \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info": "Bạn có chắc chắn rằng bạn muốn xóa nhóm người dùng \"{{ dsoName }}\"", + "admin.access-control.groups.form.groupCommunity": "Đơn vị hoặc Bộ sưu tập", + "admin.access-control.groups.form.groupDescription": "Mô tả", + "admin.access-control.groups.form.groupName": "Tên nhóm người dùng", + "admin.access-control.groups.form.head.create": "Tạo nhóm người dùng", + "admin.access-control.groups.form.head.edit": "Chỉnh sửa nhóm người dùng", + "admin.access-control.groups.form.members-list.button.see-all": "Duyệt toàn bộ", + "admin.access-control.groups.form.members-list.head": "Người dùng", + "admin.access-control.groups.form.members-list.headMembers": "Các thành viên hiện tại", + "admin.access-control.groups.form.members-list.no-items": "Không người dùng nào được tìm thấy trong tìm kiếm", + "admin.access-control.groups.form.members-list.no-members-yet": "Chưa có thành viên trong nhóm tìm kiếm và thêm thành viên vào nhóm.", + "admin.access-control.groups.form.members-list.notification.failure.addMember": "Thêm không thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Xóa không thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Hiện tại không có nhóm hoạt động gửi một tên trước.", + "admin.access-control.groups.form.members-list.notification.success.addMember": "Thêm thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Xóa thành công thành viên: \"{{name}}\"", + "admin.access-control.groups.form.members-list.search.button": "Tìm kiếm", + "admin.access-control.groups.form.members-list.search.head": "Thêm người dùng", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (chính xác)", + "admin.access-control.groups.form.members-list.search.scope.metadata": "Siêu dữ liệu", + "admin.access-control.groups.form.members-list.table.edit": "Loại bỏ \/ Thêm", + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Thêm thành viên với tên \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Loại bỏ thành viên với tên \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.id": "ID", + "admin.access-control.groups.form.members-list.table.identity": "Định danh", + "admin.access-control.groups.form.members-list.table.name": "Tên", + "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.notification.created.failure": "Tạo không thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Tạo không thành công nhóm người dùng với tên: \"{{name}}\" đảm bảo tên này chưa được sử dụng\"", + "admin.access-control.groups.form.notification.created.success": "Tạo thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.notification.deleted.failure.content": "Nguyên nhân: \"{{ cause }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title": "Xóa không thành công nhóm người dùng \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.success": "Xóa thành công nhóm người dùng \"{{ name }}\"", + "admin.access-control.groups.form.notification.edited.failure": "Chỉnh sửa không thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Tên \"{{name}}\" đã được sử dụng!\"", + "admin.access-control.groups.form.notification.edited.success": "Chỉnh sửa thành công nhóm người dùng \"{{name}}\"", + "admin.access-control.groups.form.return": "Quay lại", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Duyệt toàn bộ", + "admin.access-control.groups.form.subgroups-list.head": "Nhóm người dùng", + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Nhóm người dùng con hiện tại", + "admin.access-control.groups.form.subgroups-list.no-items": "Không tìm thấy nhóm nào có tên hoặc UUID như vậy", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Chưa có nhóm người dùng con nào trong nhóm.", + "admin.access-control.groups.form.subgroups-list.notification.failure": "Đã xảy ra sự cố: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Thêm không thành công nhóm người dùng con: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Xóa không thành công nhóm người dùng con: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Hiện tại không có nhóm hoạt động gửi một tên trước.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Đây là nhóm hiện tại không thể thêm được.", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Thêm thành công nhóm người dùng con: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Loại bỏ thành công nhóm người dùng: \"{{name}}\" ra khỏi nhóm", + "admin.access-control.groups.form.subgroups-list.search.button": "Tìm kiếm", + "admin.access-control.groups.form.subgroups-list.search.head": "Thêm nhóm người dùng con", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.groups.form.subgroups-list.table.edit": "Loại bỏ \/ Thêm", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Thêm nhóm người dùng con với tên \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Loại bỏ nhóm người dùng con với tên \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Nhóm người dùng hiện tại", + "admin.access-control.groups.form.subgroups-list.table.id": "ID", + "admin.access-control.groups.form.subgroups-list.table.name": "Tên", + "admin.access-control.groups.head": "Nhóm người dùng", + "admin.access-control.groups.no-items": "Không tìm thấy nhóm nào có tên hoặc UUID như vậy", + "admin.access-control.groups.notification.deleted.failure.content": "Nguyên nhân: \"{{cause}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Xóa không thành công nhóm \"{{name}}\"", + "admin.access-control.groups.notification.deleted.success": "Xóa thành công nhóm \"{{name}}\"", + "admin.access-control.groups.search.button": "Tìm kiếm", + "admin.access-control.groups.search.head": "Tìm kiếm nhóm người dùng", + "admin.access-control.groups.search.placeholder": "Tìm kiếm nhóm người dùng...", + "admin.access-control.groups.singleGroup.breadcrumbs": "Chỉnh sửa nhóm người dùng", + "admin.access-control.groups.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.groups.table.edit": "Chỉnh sửa", + "admin.access-control.groups.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", + "admin.access-control.groups.table.edit.buttons.remove": "Xóa \"{{name}}\"", + "admin.access-control.groups.table.id": "ID", + "admin.access-control.groups.table.members": "Thành viên", + "admin.access-control.groups.table.name": "Tên", + "admin.access-control.groups.title": "Nhóm người dùng", + "admin.access-control.groups.title.addGroup": "Tạo nhóm người dùng", + "admin.access-control.groups.title.singleGroup": "Chỉnh sửa nhóm người dùng", + + "admin.search.breadcrumbs": "Tìm kiếm quản trị", + "admin.search.collection.edit": "Chỉnh sửa", + "admin.search.community.edit": "Chỉnh sửa", + "admin.search.item.delete": "Xóa", + "admin.search.item.edit": "Chỉnh sửa", + "admin.search.item.make-private": "Đặt làm tài liệu cá nhân", + "admin.search.item.make-public": "Đặt làm tài liệu công cộng", + "admin.search.item.move": "Di chuyển", + "admin.search.item.reinstate": "Khôi phục", + "admin.search.item.withdraw": "Ẩn", + "admin.search.title": "Tìm kiếm quản trị", + + "administrativeView.search.results.head": "Tìm kiếm quản trị", + + "admin.workflow.breadcrumbs": "Quản trị luồng công việc", + "admin.workflow.title": "Quản trị luồng công việc", + "admin.workflow.item.workflow": "Luồng công việc", + "admin.workflow.item.workspace": "Workspace", + "admin.workflow.item.delete": "Xóa", + "admin.workflow.item.send-back": "Gửi trở lại", + "admin.workflow.item.policies": "Policies", + "admin.workflow.item.supervision": "Supervision", + + "admin.batch-import.breadcrumbs": "Nhập dữ liệu theo lô", + "admin.batch-import.page.dropMsg": "Kéo thả file ZIP để nhập vào", + "admin.batch-import.page.dropMsgReplace": "Kéo thả để thay thế file ZIP cần nhập vào", + "admin.batch-import.page.error.addFile": "Chọn file Zip đầu tiên!", + "admin.batch-import.page.header": "Nhập dữ liệu theo lô", + "admin.batch-import.page.help": "Chọn Bộ sưu tập để nhập dữ liệu. Sau đó kéo thả hoặc duyệt tới tệp tin định dạng zip có chứa các tài liệu cần nhập vào.", + "admin.batch-import.page.remove": "xóa", + "admin.batch-import.title": "Nhập dữ liệu theo lô", + "admin.batch-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra file ZIP tải lên\", hệ thống sẽ chạy một tiến trình kiểm tra việc nhập dữ liệu theo lô thay vì đổ trực tiếp dữ liệu lên hệ thống. Việc này giúp cán bộ xác nhận lại kết quả của quy trình nhập trước khi nhập dữ liệu chính thức. Bỏ chọn tùy chọn này để đổ lô tài liệu lên hệ thống.", + + "admin.metadata-import.breadcrumbs": "Nhập thông tin mô tả", + "admin.metadata-import.page.button.proceed": "Tiếp tục", + "admin.metadata-import.page.button.return": "Quay lại", + "admin.metadata-import.page.button.select-collection": "Chọn Bộ sưu tập", + "admin.metadata-import.page.dropMsg": "Thả một tệp CSV để nhập thông tin mô tả", + "admin.metadata-import.page.dropMsgReplace": "Thả một tệp CSV để nhập thông tin mô tả thay thế", + "admin.metadata-import.page.error.addFile": "Lựa chọn tệp trước!", + "admin.metadata-import.page.header": "Nhập thông tin mô tả", + "admin.metadata-import.page.help": "Bạn có thể thả hoặc duyệt tới tệp CSV chứa hàng loạt các thông tin mô tả tại đây", + "admin.metadata-import.page.validateOnly": "Kiểm tra nhập lô siêu dữ liệu", + "admin.metadata-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra nhập lô siêu dữ liệu\", hệ thống sẽ chạy một tiến trình kiểm tra nhập lô siêu dữ liệu thay vì đổ trực tiếp dữ liệu lên hệ thống. Bỏ chọn tùy chọn này để tiến hành nhập dữ liệu chính thức.", + "admin.metadata-import.title": "Nhập thông tin mô tả", + + "advanced-workflow-action.rating.form.rating.label": "Xếp hạng", + "advanced-workflow-action.rating.form.rating.error": "Bạn phải đánh giá tài liệu/ thực thế này", + "advanced-workflow-action.rating.form.review.label": "Kiểm duyệt", + "advanced-workflow-action.rating.form.review.error": "Bạn phải nhập nội dung đánh giá để gửi bản xếp hạng này", + "advanced-workflow-action.rating.description": "Vui lòng chọn một xếp hạng bên dưới", + "advanced-workflow-action.rating.description-requiredDescription": "Vui lòng chọn xếp hạng bên dưới và thêm đánh giá", + "advanced-workflow-action.select-reviewer.description-single": "Vui lòng chọn một người kiểm duyệt dưới đây trước khi tải tài liệu lên", + "advanced-workflow-action.select-reviewer.description-multiple": "Vui lòng chọn một hoặc nhiều người kiểm duyệt dưới đây trước khi tải tài liệu lên", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "Người dùng", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Thêm người dùng", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Duyệt tất cả", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Các thành viên hiện tại", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Siêu dữ liệu", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Tìm kiếm", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Loại bỏ / Thêm", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Loại bỏ người dùng \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Thêm thành công thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Không thể thêm thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Xóa thành công thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Không thể xóa thành viên: \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Thêm thành viên \"{{name}}\"", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Không có nhóm hoạt động, gửi tên trước.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Chưa có thành viên nào trong nhóm, tìm kiếm để thêm.", + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Không tìm thấy người dùng", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", + + "auth.errors.invalid-user": "Địa chỉ email hoặc mật khẩu không hợp lệ.", + + "auth.messages.expired": "Phiên của bạn đã hết hạn. Xin vui lòng đăng nhập lại.", + "auth.messages.token-refresh-failed": "Làm mới mã token phiên làm việc của bạn không thành công. Vui lòng đăng nhập lại.", + + "bitstream.download.page": "Đang tải xuống {{bitstream}}... ", + "bitstream.download.page.back": "Quay lại", + + "bitstream.edit.authorizations.link": "Chỉnh sửa chính sách của tệp tin", + "bitstream.edit.authorizations.title": "Chỉnh sửa chính sách của tệp tin", + "bitstream.edit.bitstream": "Tệp tin:", + "bitstream.edit.form.description.hint": "Tùy chọn cung cấp mô tả ngắn gọn về tệp ví dụ \"Bài báo chính\" or \"Dữ liệu đọc thử nghiệm\".", + "bitstream.edit.form.description.label": "Mô tả", + "bitstream.edit.form.embargo.hint": "Ngày đầu tiên được phép truy cập. Ngày này không thể được chỉnh sửa trên biểu mẫu này. Để thiết lập một ngày ngừng phục vụ tệp tin này đi tới thẻ Trạng thái tài liệu nhấp Phân quyền... tạo hoặc chỉnh sửa quyền ĐỌC của tệp tin và thiết lập Ngày bắt đầu như mong muốn.", + "bitstream.edit.form.embargo.label": "Ngừng phục vụ cho tới ngày", + "bitstream.edit.form.fileName.hint": "Thay đổi tên tệp cho tệp tin. Lưu ý rằng điều này sẽ thay đổi hiển thị URL tệp tin nhưng các liên kết cũ sẽ vẫn phân giải miễn là ID trình tự không thay đổi.", + "bitstream.edit.form.fileName.label": "Tên tệp", + "bitstream.edit.form.iiifHeight.hint": "Chiều cao của khung thường phải khớp với chiều cao của hình ảnh", + "bitstream.edit.form.iiifHeight.label": "Chiều cao ảnh", + "bitstream.edit.form.iiifLabel.hint": "Tên cho hình ảnh này. Nếu không được cung cấp tên mặc định sẽ được sử dụng.", + "bitstream.edit.form.iiifLabel.label": "Tên", + "bitstream.edit.form.iiifToc.hint": "Thêm mục lục mới", + "bitstream.edit.form.iiifToc.label": "Mục lục", + "bitstream.edit.form.iiifWidth.hint": "Chiều rộng của khung thường phải khớp với chiều rộng của hình", + "bitstream.edit.form.iiifWidth.label": "Chiều rộng khung", + "bitstream.edit.form.newFormat.hint": "Ứng dụng bạn đã sử dụng để tạo tệp và thông tin phiên bản (ví dụ \"ACMESoft SuperApp phiên bản 1.5\").", + "bitstream.edit.form.newFormat.label": "Mô tả định dạng mới", + "bitstream.edit.form.primaryBitstream.label": "Tệp tin chính", + "bitstream.edit.form.selectedFormat.hint": "Nếu định dạng không có trong danh sách trên chọn \"định dạng không có trong danh sách\" trên và mô tả nó dưới mục\"Mô tả định dạng mới\".", + "bitstream.edit.form.selectedFormat.label": "Định dạng đã chọn", + "bitstream.edit.form.selectedFormat.unknown": "Định dạng không có trong danh sách", + "bitstream.edit.notifications.error.format.title": "Đã xảy ra lỗi khi lưu định dạng của tệp tin", + "bitstream.edit.notifications.saved.content": "Thay đổi của bạn đối với tệp tin đã được lưu.", + "bitstream.edit.notifications.saved.title": "Đã lưu tệp tin", + "bitstream.edit.return": "Quay lại", + "bitstream.edit.title": "Chỉnh sửa tệp tin", + + "bitstream-request-a-copy.alert.canDownload1": "Bạn đã có quyền truy cập tệp tin này. Nếu muốn tải tệp tin click ", + "bitstream-request-a-copy.alert.canDownload2": "vào đây", + "bitstream-request-a-copy.allfiles.label": "Các tệp tin", + "bitstream-request-a-copy.email.error": "Vui lòng nhập một địa chỉ email hợp lệ.", + "bitstream-request-a-copy.email.hint": "Địa chỉ email này đã được sử dụng để gửi tệp tin.", + "bitstream-request-a-copy.email.label": "Địa chỉ email của bạn *", + "bitstream-request-a-copy.files-all-false.label": "Chỉ tệp tin được yêu cầu", + "bitstream-request-a-copy.files-all-true.label": "Tất cả tệp tin của tài liệu này đều bị hạn chế quyền truy cập", + "bitstream-request-a-copy.header": "Yêu cầu bản sao", + "bitstream-request-a-copy.intro": "Nhập các thông tin dưới đây để yêu cầu bản sao của tài liệu:", + "bitstream-request-a-copy.intro.bitstream.all": "Yêu cầu tất cả các tệp tin.", + "bitstream-request-a-copy.intro.bitstream.one": "Yêu cầu các tệp tin sau:", + "bitstream-request-a-copy.message.label": "Tin nhắn", + "bitstream-request-a-copy.name.error": "Tên là bắt buộc", + "bitstream-request-a-copy.name.label": "Tên*", + "bitstream-request-a-copy.return": "Quay lại", + "bitstream-request-a-copy.submit": "Yêu cầu bản sao", + "bitstream-request-a-copy.submit.error": "Đã xảy ra lỗi trong quá trình gửi yêu cầu tài liệu.", + "bitstream-request-a-copy.submit.success": "Yêu cầu tài liệu đã được gửi thành công.", + + "browse.back.all-results": "Tất cả kết quả", + + "browse.comcol.by.author": "Tác giả", + "browse.comcol.by.dateissued": "Năm xuất bản", + "browse.comcol.by.subject": "Chủ đề", + "browse.comcol.by.title": "Nhan đề", + "browse.comcol.head": "Duyệt", + + "browse.empty": "Không có tài liệu nào để hiển thị.", + + "browse.metadata.author": "Tác giả", + "browse.metadata.author.breadcrumbs": "Duyệt theo tác giả", + "browse.metadata.dateissued": "Năm xuất bản", + "browse.metadata.dateissued.breadcrumbs": "Duyệt theo năm xuất bản", + "browse.metadata.subject": "Chủ đề", + "browse.metadata.subject.breadcrumbs": "Duyệt theo chủ đề", + "browse.metadata.title": "Nhan đề", + "browse.metadata.title.breadcrumbs": "Duyệt theo nhan đề", + "browse.metadata.topic": "Topic", + "browse.metadata.type": "Kiểu tài liệu", + + "pagination.next.button": "Tiếp theo", + "pagination.previous.button": "Quay lại", + "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", + + "browse.startsWith.choose_year.label": "Chọn năm xuất bản", + "browse.startsWith.choose_year": "(Năm)", + "browse.startsWith.jump": "Chuyển tới một điểm trong chỉ mục:", + "browse.startsWith.months.april": "Tháng Tư", + "browse.startsWith.months.august": "Tháng Tám", + "browse.startsWith.months.december": "Tháng Mười hai", + "browse.startsWith.months.february": "Tháng Hai", + "browse.startsWith.months.january": "Tháng Một", + "browse.startsWith.months.july": "Tháng Bảy", + "browse.startsWith.months.june": "Tháng Sáu", + "browse.startsWith.months.march": "Tháng Ba", + "browse.startsWith.months.may": "Tháng Năm", + "browse.startsWith.months.none.label": "Chọn tháng xuất bản", + "browse.startsWith.months.none": "(Tháng)", + "browse.startsWith.months.november": "Tháng Mười một", + "browse.startsWith.months.october": "Tháng Mười", + "browse.startsWith.months.september": "Tháng Chín", + "browse.startsWith.submit": "Duyệt", + "browse.startsWith.type_date": "Hoặc nhập một ngày (năm-tháng) và nhấp \"Duyệt\"", + "browse.startsWith.type_date.label": "Hoặc nhập một ngày (năm-tháng) à nhấp Duyệt", + "browse.startsWith.type_text": "Nhập một vài ký tự đầu tiên và nhấp vào nút Duyệt", + + "browse.title": "Duyệt {{ collection }} theo {{ field }}{{ startsWith }} {{ value }}", + "browse.title.page": "Duyệt {{ collection }} theo {{ field }} {{ value }}", + + "search.browse.item-back": "Quay lại kết quả tìm kiếm", + + "chips.remove": "Loại bỏ chip", + + "claimed-approved-search-result-list-element.title": "Chấp nhận", + "claimed-declined-search-result-list-element.title": "Đã bị từ chối, đã gửi lại cho người nhập liệu", + "claimed-declined-task-search-result-list-element.title": "Bị từ chối, đã gửi lại tới người quản lý kiểm duyệt", + + "collection.create.head": "Tạo một Bộ sưu tập", + "collection.create.notifications.success": "Tạo bộ sưu tập thành công", + "collection.create.sub-head": "Tạo một bộ sưu tập cho đơnn vị {{ parent }}", + "collection.curate.header": "Kiểm tra bộ sưu tập: {{collection}}", + "collection.delete.cancel": "Hủy", + "collection.delete.confirm": "Xác nhận", + "collection.delete.head": "Xóa bộ sưu tập", + "collection.delete.notification.fail": "Không thể xóa bộ sưu tập", + "collection.delete.notification.success": "Xóa bộ sưu tập thành công", + "collection.delete.processing": "Đang xóa", + "collection.delete.text": "Bạn có chắc chắn rằng bạn muốn xóa bộ sưu tập \"{{ dso }}\"", + "collection.edit.breadcrumbs": "Chỉnh sửa bộ sưu tập", + "collection.edit.delete": "Xóa bộ sưu tập này", + "collection.edit.head": "Chỉnh sửa bộ sưu tập", + "collection.edit.item.authorizations.load-bundle-button": "Hiển thị thêm các nhóm khác", + "collection.edit.item.authorizations.load-more-button": "Hiển thị thêm", + "collection.edit.item.authorizations.show-bitstreams-button": "Hiển thị chính sách phân quyền tệp tin đối với nhóm", + "collection.edit.item-mapper.cancel": "Hủy", + "collection.edit.item-mapper.collection": "Bộ sưu tập: \"{{name}}\"", + "collection.edit.item-mapper.confirm": "Ánh xạ những tài liệu đã chọn", + "collection.edit.item-mapper.description": "Đây là công cụ liên kết tài liệu cho phép người quản trị bộ sưu tập liên kết các tài liệu từ các bộ sưu tập khác vào bộ sưu tập này. Bạn có thể tìm kiếm các tài liệu từ các bộ sưu tập khác và liên kết chúng hoặc duyệt qua danh sách các tài liệu hiện đã được liên kết.", + "collection.edit.item-mapper.head": "Liên kết tài liệu - Liên kết tài liệu tới bộ sưu tập khác", + "collection.edit.item-mapper.no-search": "Vui lòng nhập truy vấn để tìm kiếm", + "collection.edit.item-mapper.notifications.map.error.content": "Đã xảy ra lỗi khi liên kết{{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.map.error.head": "Lỗi liên kết", + "collection.edit.item-mapper.notifications.map.success.content": "Ánh xạ thành công {{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.map.success.head": "Ánh xạ được hoàn thành", + "collection.edit.item-mapper.notifications.unmap.error.content": "Đã xảy ra lỗi khi loại bỏ các liên kết của {{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.unmap.error.head": "Lỗi loại bỏ liên kết", + "collection.edit.item-mapper.notifications.unmap.success.content": "Loại bỏ thành công các liên kết của {{amount}} tài liệu.", + "collection.edit.item-mapper.notifications.unmap.success.head": "Hoàn thành loại bỏ liên kết", + "collection.edit.item-mapper.remove": "Loại bỏ các liên kết của tài liệu được chọn", + "collection.edit.item-mapper.search-form.placeholder": "Tìm kiếm tài liệu...", + "collection.edit.item-mapper.tabs.browse": "Duyệt các tài liệu được liên kết", + "collection.edit.item-mapper.tabs.map": "Liên kết tài liệu mới", + "collection.edit.logo.delete.title": "Xóa logo", + "collection.edit.logo.delete-undo.title": "Hoàn tác xóa", + "collection.edit.logo.label": "Logo bộ sưu tập", + "collection.edit.logo.notifications.add.error": "Tải lên không thành công logo bộ sưu tập. Vui lòng kiểm tra nội dung trước khi thử lại.", + "collection.edit.logo.notifications.add.success": "Tài thành công logo bộ sưu tập.", + "collection.edit.logo.notifications.delete.error.title": "Lỗi khi xóa logo", + "collection.edit.logo.notifications.delete.success.content": "Xóa thành công logo của bộ sưu tập", + "collection.edit.logo.notifications.delete.success.title": "Logo đã được xóa", + "collection.edit.logo.upload": "Thả một logo bộ sưu tập để tải lên", + "collection.edit.notifications.success": "Chỉnh sửa thành công bộ sưu tập", + "collection.edit.return": "Quay lại", + "collection.edit.tabs.authorizations.head": "Phân quyền", + "collection.edit.tabs.authorizations.title": "Chỉnh sửa bộ sưu tập - Phân quyền", + "collection.edit.tabs.curate.head": "Kiểm tra", + "collection.edit.tabs.curate.title": "Chỉnh sửa bộ sưu tập - Kiểm tra", + "collection.edit.tabs.item-mapper.title": "Chỉnh sửa bộ sưu tập - Liên kết tài liệu", + "collection.edit.tabs.mapper.head": "Liên kết tài liệu", + "collection.edit.tabs.metadata.head": "Chỉnh sửa thông tin mô tả", + "collection.edit.tabs.metadata.title": "Chỉnh sửa bộ sưu tập - Siêu dữ liệu", + "collection.edit.tabs.roles.head": "Gán quyền", + "collection.edit.tabs.roles.title": "Chỉnh sửa bộ sưu tập - Vai trò", + "collection.edit.tabs.source.external": "Bộ sưu tập này thu thập nội dung từ một nguồn bên ngoài", + "collection.edit.tabs.source.form.errors.oaiSource.required": "Bạn phải cung cấp một bộ id của bộ sưu tập đích.", + "collection.edit.tabs.source.form.harvestType": "Nội dung đang được thu thập", + "collection.edit.tabs.source.form.head": "Cấu hình nguồn bên ngoài", + "collection.edit.tabs.source.form.metadataConfigId": "Định dạng thông tin mô tả", + "collection.edit.tabs.source.form.oaiSetId": "ID của bộ OAI", + "collection.edit.tabs.source.form.oaiSource": "Nhà cung cấp OAI", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Thu thập thông tin mô tả và tệp tin (yêu cầu hỗ trợ ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Thu thập thông tin mô tả và tham chiếu đến tệp tin (yêu cầu hỗ trợ ORE)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Chỉ thu thập thông tin mô tả", + "collection.edit.tabs.source.head": "Nguồn nội dung", + "collection.edit.tabs.source.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục các thay đổi hãy nhấp vào nút 'Hoàn tác'", + "collection.edit.tabs.source.notifications.discarded.title": "Các thay đổi đã bị hủy", + "collection.edit.tabs.source.notifications.invalid.content": "Các thay đổi chưa được lưu. Hãy đảm bảo rằng tất cả các trường đều hợp lệ trước khi lưu.", + "collection.edit.tabs.source.notifications.invalid.title": "Siêu dữ liệu không hợp lệ", + "collection.edit.tabs.source.notifications.saved.content": "Các thay đổi của bạn đối với nguồn nội dung của bộ sưu tập này đã được lưu.", + "collection.edit.tabs.source.notifications.saved.title": "Nguồn nội dung đã được lưu", + "collection.edit.tabs.source.title": "Chỉnh sửa bộ sưu tập - Nguồn nội dung", + "collection.edit.template.add-button": "Thêm", + "collection.edit.template.breadcrumbs": "Khung mẫu tài liệu", + "collection.edit.template.cancel": "Hủy", + "collection.edit.template.delete-button": "Xóa", + "collection.edit.template.edit-button": "Chỉnh sửa", + "collection.edit.template.error": "Đã xảy ra lỗi khi truy xuất khung mẫu tài liệu", + "collection.edit.template.head": "Chỉnh sửa khung mẫu tài liệu cho bộ sưu tập \"{{ collection }}\"", + "collection.edit.template.label": "Khung mẫu tài liệu", + "collection.edit.template.loading": "Đang tải khung mẫu tài liệu...", + "collection.edit.template.notifications.delete.error": "Xóa khung mẫu tài liệu không thành công", + "collection.edit.template.notifications.delete.success": "Xóa khung mẫu tài liệu thành công", + "collection.edit.template.title": "Chỉnh sửa khung mẫu tài liệu", + "collection.form.abstract": "Mô tả ngắn", + "collection.form.description": "Văn bản giới thiệu (HTML)", + "collection.form.entityType": "Loại thực thể", + "collection.form.errors.title.required": "Vui lòng nhập tên bộ sưu tập", + "collection.form.license": "Giấy phép", + "collection.form.provenance": "Nguồn gốc", + "collection.form.rights": "Bản quyền (HTML)", + "collection.form.tableofcontents": "Tin tức (HTML)", + "collection.form.title": "Tên", + "collection.listelement.badge": "Bộ sưu tập", + "collection.page.browse.recent.empty": "Không có biểu ghi nào để hiển thị", + "collection.page.browse.recent.head": "Những tài liệu tải lên gần đây", + "collection.page.edit": "Chỉnh sửa bộ sưu tập", + "collection.page.handle": "URL", + "collection.page.description.abstract": "Mô tả", + "collection.page.license": "Giấy phép", + "collection.page.news": "Tin tức", + "collection.select.confirm": "Xác nhận các mục đã chọn", + "collection.select.empty": "Không có bộ sưu tập nào để hiển thị", + "collection.select.table.title": "Nhan đề", + "collection.source.controls.harvest.last": "Lần thu thập trước:", + "collection.source.controls.harvest.message": "Thông tin thu thập:", + "collection.source.controls.harvest.no-information": "N\/A", + "collection.source.controls.harvest.start": "Thời gian bắt đầu thu thập:", + "collection.source.controls.harvest.status": "Trạng thái thu thập:", + "collection.source.controls.head": "Quản lý thu thập:", + "collection.source.controls.import.completed": "Quá trình nhập liệu đã hoàn thành", + "collection.source.controls.import.failed": "Xảy ra lỗi trong quá trình nhập dữ liệu", + "collection.source.controls.import.running": "Đang nhập dữ liệu…", + "collection.source.controls.import.submit": "Nhập ngay", + "collection.source.controls.import.submit.error": "Xảy ra sự cố khi bắt đầu quá trình nhập dữ liệu", + "collection.source.controls.import.submit.success": "Quá trình nhập liệu đã được bắt đầu thành công", + "collection.source.controls.reset.completed": "Quá trình thiết lập và nhập lại dữ liệu đã hoàn tất", + "collection.source.controls.reset.failed": "Xảy ra sự cố trong quá trình thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.running": "Đang thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.submit": "Thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.submit.error": "Đã xảy ra lỗi khi bắt đầu thiết lập và nhập lại dữ liệu", + "collection.source.controls.reset.submit.success": "Quá trình thiết lập và nhập lại dữ liệu đã được bắt đầu thành công", + "collection.source.controls.test.completed": "Tập lệnh để kiểm tra cài đặt đã kết thúc thành công", + "collection.source.controls.test.failed": "Tập lệnh để kiểm tra cài đặt không thành công", + "collection.source.controls.test.running": "Cấu hình thử nghiệm…", + "collection.source.controls.test.submit": "Cấu hình thử nghiệm", + "collection.source.controls.test.submit.error": "Đã xảy ra lỗi khi bắt đầu cài đặt thử nghiệm", + "collection.source.update.notifications.error.content": "Các cài đặt đã được kiểm tra và không hoạt động.", + "collection.source.update.notifications.error.title": "Lỗi máy chủ", + + "community.create.head": "Tạo đơn vị", + "community.create.notifications.success": "Tạo đơn vị thành công", + "community.create.sub-head": "Tạo một đơn vị con cho đơn vị {{ parent }}", + "community.curate.header": "Kiểm tra đơn vị: {{community}}", + "community.delete.cancel": "Hủy", + "community.delete.confirm": "Xác nhận", + "community.delete.head": "Xóa đơn vị", + "community.delete.notification.fail": "Không thể xóa đơn vị", + "community.delete.notification.success": "Xóa đơn vị thành công", + "community.delete.processing": "Đang xóa…", + "community.delete.text": "Bạn có chắc chắn muốn xóa đơn vị \"{{ dso }}\"", + "community.edit.breadcrumbs": "Chỉnh sửa đơn vị", + "community.edit.delete": "Xóa đơn vị này", + "community.edit.head": "Chỉnh sửa đơn vị", + "community.edit.logo.delete.title": "Xóa logo", + "community.edit.logo.delete-undo.title": "Hoàn tác xóa", + "community.edit.logo.label": "Logo đơn vị", + "community.edit.logo.notifications.add.error": "Tải lên không thành công thành công logo đơn vị. Vui lòng kiểm tra lại nội dung trước khi tải lại.", + "community.edit.logo.notifications.add.success": "Tài lên thành công logo đơn vị.", + "community.edit.logo.notifications.delete.error.title": "Lỗi khi xóa logo", + "community.edit.logo.notifications.delete.success.content": "Xóa thành công logo của đơn vị", + "community.edit.logo.notifications.delete.success.title": "Đã xóa logo", + "community.edit.logo.upload": "Thả một logo đơn vị để tải lên", + "community.edit.notifications.error": "Đã xảy ra lỗi khi chỉnh sửa đơn vị", + "community.edit.notifications.success": "Chỉnh sửa đơn vị thành công", + "community.edit.notifications.unauthorized": "Bạn không có quyền để thực hiện thay đổi này", + "community.edit.return": "Quay lại", + "community.edit.tabs.authorizations.head": "Phân quyền", + "community.edit.tabs.authorizations.title": "Chỉnh sửa đơn vị - Phân quyền", + "community.edit.tabs.curate.head": "Kiểm tra", + "community.edit.tabs.curate.title": "Chỉnh sửa đơn vị - Kiểm tra", + "community.edit.tabs.metadata.head": "Chỉnh sửa thông tin mô tả", + "community.edit.tabs.metadata.title": "Chỉnh sửa đơn vị - Siêu dữ liệu", + "community.edit.tabs.roles.head": "Gán quyền", + "community.edit.tabs.roles.title": "Chỉnh sửa đơn vị - Quyền", + "community.form.abstract": "Mô tả ngắn", + "community.form.description": "Văn bản giới thiệu (HTML)", + "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", + "community.form.rights": "Thông tin bản quyền (HTML)", + "community.form.tableofcontents": "Tin tức (HTML)", + "community.form.title": "Tên", + "community.listelement.badge": "Đơn vị", + "community.page.edit": "Chỉnh sửa đơn vị", + "community.page.handle": "URL", + "community.page.license": "Giấy phép", + "community.page.news": "Tin tức", + "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", + "community.sub-community-list.head": "Các đơn vị con của đơn vị này", + "communityList.breadcrumbs": "Danh sách đơn vị", + "communityList.showMore": "Hiển thị thêm", + "communityList.tabTitle": "Danh sách đơn vị", + "communityList.title": "Danh sách các đơn vị", + + "comcol-role.edit.bitstream_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", + "comcol-role.edit.bitstream_read.description": "Người có quyền đọc tệp tin có khả năng tải các tệp tin về máy tính cá nhân để sử dụng", + "comcol-role.edit.bitstream_read.name": "Quyền đọc tệp tin mặc định", + "comcol-role.edit.collection-admin.description": "Quản trị viên bộ sưu tập quyết định người có thể tải tài liệu vào bộ sưu tập sửa thông tin mô tả của tài liệu (sau khi tải lên) và thêm (liên kết) tài liệu đã tồn tại từ bộ sưu tập khác (phụ thuộc phân quyền vào bộ sưu tập đó)", + "comcol-role.edit.collection-admin.name": "Quản trị", + "comcol-role.edit.community-admin.description": "Quản trị viên đơn vị có thể tạo đơn vị con hoặc bộ sưu tập và quản lý hoặc gán quyền quản lý cho những đơn vị con hoặc bộ sưu tập đó. Ngoài ra họ quyết định ai có thể tải các tài liệu vào bất kì bộ sưu tập nào chỉnh sửa thông tin thông tin mô tả của tài liệu (sau khi tải lên) và thêm (liên kết) các tài liệu đã tồn tại ở bộ sưu tập khác (phụ thuộc vào phân quyền)", + "comcol-role.edit.community-admin.name": "Quản trị", + "comcol-role.edit.create": "Tạo", + "comcol-role.edit.create.error.title": "Không tạo được nhóm có quyền '{{role }}'", + "comcol-role.edit.delete": "Xóa", + "comcol-role.edit.delete.error.title": "Không thể xóa nhóm có quyền '{{ role }}'", + "comcol-role.edit.editor.description": "Người biên tập có thể chỉnh sửa thông tin mô tả của tài liệu được tải lên, có thể chấp nhận hoặc từ chối tài liệu được tải lên.", + "comcol-role.edit.editor.name": "Người biên tập", + "comcol-role.edit.finaleditor.description": "Người biên tập cuối có thể chỉnh sửa thông tin mô tả của tài liệu được tải lên nhưng không thể từ chối tài liệu được tải lên.", + "comcol-role.edit.finaleditor.name": "Người biên tập cuối", + "comcol-role.edit.item_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", + "comcol-role.edit.item_read.description": "Tài khoản người dùng và nhóm người dùng có thể đọc những tài liệu mới được tải lên bộ sưu tập này. Các thay đổi quyền này không có hiêu lực với những tài liệu đã được tải lên từ trước. Những tài liệu đã tồn tại trong hệ thống sẽ vẫn được xem bởi những người có quyền xem vào thời điểm chúng được bổ sung", + "comcol-role.edit.item_read.name": "Quyền đọc thông tin mô tả của tài liệu", + "comcol-role.edit.no-group": "Trống", + "comcol-role.edit.restrict": "Hạn chế", + "comcol-role.edit.reviewer.description": "Người kiểm duyệt có thể chấp nhận hoặc từ chối các tài liệu được tải lên. Tuy nhiên sẽ không thể chỉnh sửa thông tin mô tả của tài liệu.", + "comcol-role.edit.reviewer.name": "Người kiểm duyệt", + "comcol-role.edit.submitters.description": "Tài khoản người dùng và nhóm người dùng có quyền tải tài liệu mới vào bộ sưu tập này", + "comcol-role.edit.submitters.name": "Người tải lên", + + "community.form.abstract": "Mô tả ngắn", + "community.form.description": "Văn bản giới thiệu (HTML)", + "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", + "community.form.rights": "Thông tin bản quyền (HTML)", + "community.form.tableofcontents": "Tin tức (HTML)", + "community.form.title": "Tên", + + "community.page.edit": "Chỉnh sửa đơn vị", + "community.page.handle": "URL", + "community.page.license": "Giấy phép", + "community.page.news": "Tin tức", + + "community.all-lists.head": "Đơn vị con và bộ sưu tập", + + "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", + "community.sub-community-list.head": "Các đơn vị con của đơn vị này", + + "cookies.consent.accept-all": "Chấp thuận tất cả", + "cookies.consent.accept-selected": "Chấp nhận các mục đã chọn", + "cookies.consent.app.description.acknowledgement": "Bắt buộc để lưu sự xác nhận và đồng ý của bạn", + "cookies.consent.app.description.authentication": "Bắt buộc để đăng nhập", + "cookies.consent.app.description.google-analytics": "Cho phép chúng tôi theo dõi dữ liệu thống kê", + "cookies.consent.app.description.google-recaptcha": "Chúng tôi sử dụng dịch vụ google reCAPTCHA trong quá trình đăng ký và khôi phục mật khẩu", + "cookies.consent.app.description.preferences": "Bắt buộc để lưu tùy chọn của bạn", + "cookies.consent.app.disable-all.description": "Sử dụng nút chuyển này để bật hoặc tắt tất cả dịch vụ.", + "cookies.consent.app.disable-all.title": "Bật hoặc tắt tất cả dịch vụ", + "cookies.consent.app.opt-out.description": "Ứng dụng này đã được tải theo mặc định (nhưng bạn có thể chọn không tham gia)", + "cookies.consent.app.purpose": "mục đích", + "cookies.consent.app.required.description": "Ứng dụng này luôn được yêu cầu", + "cookies.consent.app.title.acknowledgement": "Sự xác nhận", + "cookies.consent.app.title.authentication": "Xác thực", + "cookies.consent.app.title.google-analytics": "Google Analytics", + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + "cookies.consent.app.title.preferences": "Cài đặt cá nhân", + "cookies.consent.close": "Đóng", + "cookies.consent.content-modal.description": "Tại đây bạn có thể xem và tùy chỉnh thông tin mà chúng tôi thu thập được về bạn.", + "cookies.consent.content-modal.privacy-policy.name": "chính sách bảo mật", + "cookies.consent.content-modal.privacy-policy.text": "Để biết thêm vui lòng đọc {privacyPolicy} của chúng tôi.", + "cookies.consent.content-modal.service": "dịch vụ", + "cookies.consent.content-modal.services": "các dịch vụ", + "cookies.consent.content-modal.title": "Thông tin mà chúng tôi thu thập", + "cookies.consent.content-notice.description": "Chúng tôi thu thập và xử lý thông tin các nhân của bạn cho các mục đích sau: Xác thực các ưa thích xác nhận và thống kê.
    Để biết thêm vui lòng đọc {privacyPolicy} của chúng tôi.", + "cookies.consent.content-notice.description.no-privacy": "Chúng tôi thu thập và xử lý thông tin cá nhân của bạn cho các mục đích sau: Xác thực Cài đặt cá nhân Xác nhận và Thống kê.", + "cookies.consent.content-notice.learnMore": "Tùy chỉnh", + "cookies.consent.content-notice.title": "Đồng ý sử dụng cookie", + "cookies.consent.decline": "Từ chối", + "cookies.consent.ok": "OK", + "cookies.consent.purpose.functional": "Chức năng", + "cookies.consent.purpose.registration-password-recovery": "Đăng ký và khôi phục mật khẩu", + "cookies.consent.purpose.sharing": "Chia sẻ", + "cookies.consent.purpose.statistical": "Thống kê", + "cookies.consent.save": "Lưu", + "cookies.consent.update": "Có 1 vài thay đổi từ lần ghé thăm cuối cùng của bạn vui lòng cập nhập sự đồng ý của bạn.", + + "curation-task.task.checklinks.label": "\"Kiểm tra các link trong thông tin mô tả\"", + "curation-task.task.citationpage.label": "Tạo trang trích dẫn", + "curation-task.task.noop.label": "NOOP", + "curation-task.task.profileformats.label": "Định dạng tệp tin", + "curation-task.task.register-doi.label": "Đăng ký DOI", + "curation-task.task.requiredmetadata.label": "Kiểm tra các trường dữ liệu bắt buộc", + "curation-task.task.translate.label": "Bộ dịch của Microsoft", + "curation-task.task.vscan.label": "Quét Virus", + + "curation.form.handle.hint": "Gợi ý: Nhập [your-handle-prefix]\/0 để chạy một tác vụ trên toàn bộ trang (chú ý rằng không phải tất cả tác vụ đều hỗ trợ khả năng này)", + "curation.form.handle.label": "Handle:", + "curation.form.submit": "Bắt đầu", + "curation.form.submit.error.content": "Đã có lỗi xảy ra khi cố gắng khởi động tác vụ kiểm tra.", + "curation.form.submit.error.head": "Việc chạy tác vụ kiểm tra đã thất bại", + "curation.form.submit.error.invalid-handle": "Không thể xác định định danh của đối tượng này", + "curation.form.submit.success.content": "Bạn sẽ được điều hướng đến trang phản hồi quy trình.", + "curation.form.submit.success.head": "Tác vụ kiểm tra đã khởi động thành công", + "curation.form.task-select.label": "Tác vụ:", + + "deny-request-copy.email.message": "Kính gửi {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện rất tiếc phải thông báo với bạn rằng chúng tôi không thể gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\nTrân trọng\n,{{ authorName}}<{{ authorEmail }}>", + "deny-request-copy.email.subject": "Yêu cầu bản sao tài liệu", + "deny-request-copy.error": "Đã xảy ra lỗi", + "deny-request-copy.header": "Từ chối yêu cầu bản sao tài liệu", + "deny-request-copy.intro": "Tin nhắn này sẽ được gửi đến người yêu cầu", + "deny-request-copy.success": "Từ chối thành công yêu cầu tài liệu", + + "dso.name.untitled": "Không có nhan đề", + + "dso-selector.claim.item.body": "Đây là những hồ sơ hiện có có thể liên quan đến bạn. Nếu bạn nhận ra mình ở một trong những hồ sơ này hãy chọn hồ sơ đó và trên trang chi tiết hãy chọn xác nhận hồ sơ. Nếu không bạn có thể tạo một hồ sơ mới từ đầu bằng cách sử dụng nút bên dưới.", + "dso-selector.claim.item.create-from-scratch": "Tạo hồ sơ mới", + "dso-selector.claim.item.head": "Mẹo quản lý hồ sơ", + "dso-selector.claim.item.not-mine-label": "Không có mục nào trong số này là của tôi", + "dso-selector.create.collection.head": "Bộ sưu tập mới", + "dso-selector.create.collection.sub-level": "Tạo một bộ sưu tập mới trong", + "dso-selector.create.community.head": "Đơn vị mới", + "dso-selector.create.community.or-divider": "hoặc", + "dso-selector.create.community.sub-level": "Tạo một đơn vị mới trong", + "dso-selector.create.community.top-level": "Tạo một đơn vị lớn", + "dso-selector.create.item.head": "Tài liệu mới", + "dso-selector.create.item.sub-level": "Tạo một tài liệu mới trong", + "dso-selector.create.submission.head": "Biên mục mới", + "dso-selector.create.topic.sub-level": "Tạo topic mới trong", + "dso-selector.create.topic.top-level": "Tạo topic lớn", + "dso-selector.edit.collection.head": "Chỉnh sửa bộ sưu tập", + "dso-selector.edit.community.head": "Chỉnh sửa đơn vị", + "dso-selector.edit.item.head": "Chỉnh sửa tài liệu", + "dso-selector.error.title": "Đã có lỗi xảy ra khi tìm kiếm kiểu tài liệu {{ type }}", + "dso-selector.export-batch.dspaceobject.head": "Xuất lô dữ liệu (định dạng file ZIP) từ", + "dso-selector.export-metadata.dspaceobject.head": "Xuất siêu dữ liệu từ", + "dso-selector.import-batch.dspaceobject.head": "Nhập lô dữ liệu từ", + "dso-selector.no-results": "Không tìm thấy kiểu {{ type }} nào", + "dso-selector.placeholder": "Tìm kiếm {{ type }}", + "dso-selector.results-could-not-be-retrieved": "Đã xảy ra lỗi vui lòng làm mới lại ↻", + "dso-selector.select.collection.head": "Chọn một bộ sưu tập", + "dso-selector.set-scope.community.button": "Tìm kiếm trên toàn hệ thống", + "dso-selector.set-scope.community.head": "Chọn một phạm vi tìm kiếm", + "dso-selector.set-scope.community.input-header": "Tìm kiếm một đơn vị hoặc bộ sưu tập", + "dso-selector.set-scope.community.or-divider": "hoặc", + + "supervision-group-selector.header": "Supervision Group Selector", + "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + "supervision-group-selector.select.type-of-order.option.none": "NONE", + "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + "supervision-group-selector.select.group.label": "Select a Group", + "supervision-group-selector.button.cancel": "Cancel", + "supervision-group-selector.button.save": "Save", + "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + "supervision-group-selector.select.group.error": "Please select a group", + "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + "supervision-group-selector.notification.create.failure.title": "Error", + "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + + "confirmation-modal.delete-eperson.cancel": "Hủy", + "confirmation-modal.delete-eperson.confirm": "Xóa", + "confirmation-modal.delete-eperson.header": "Xóa người dùng \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Bạn có chắc muốn xóa người dùng \"{{ dsoName }}\"", + "confirmation-modal.delete-profile.cancel": "Hủy", + "confirmation-modal.delete-profile.confirm": "Xóa", + "confirmation-modal.delete-profile.header": "Xóa hồ sơ", + "confirmation-modal.delete-profile.info": "Bạn có chắc chắn muốn xóa hồ sơ", + "confirmation-modal.export-batch.cancel": "Hủy", + "confirmation-modal.export-batch.confirm": "Xuất dữ liệu", + "confirmation-modal.export-batch.header": "Xuất lô dữ liệu (định dạng file ZIP) của tác giả {{ dsoName }}", + "confirmation-modal.export-batch.info": "Bạn có chắc chắn muốn xuất lô dữ liệu (định dạng file ZIP) của tác giả {{ dsoName }}", + "confirmation-modal.export-metadata.cancel": "Hủy", + "confirmation-modal.export-metadata.confirm": "Xuất dữ liệu", + "confirmation-modal.export-metadata.header": "Xuất thông tin mô tả tài liệu của đơn vị, bộ sưu tập {{ dsoName }}", + "confirmation-modal.export-metadata.info": "Bạn có chắc muốn xuất thông tin mô tả tài liệu của đơn vị, bộ sưu tập {{ dsoName }}", + "confirmation-modal.policies.cancel": "Hủy", + "confirmation-modal.policies.confirm": "Xác nhận", + "confirmation-modal.policies.header": "Chọn hướng phân quyền cho đối tượng đã di chuyển", + "confirmation-modal.policies.info": "Bạn muốn chọn hướng phân quyền cho đối tượng đã di chuyển", + "confirmation-modal.reset-password-eperson.cancel": "Hủy", + "confirmation-modal.reset-password-eperson.confirm": "Thiết lập lại mật khẩu", + "confirmation-modal.reset-password-eperson.info": "Bạn có chắc chắn muốn thiết lập lại mật khẩu cho người dùng \"{{ dsoName }}\"", + + "error.bitstream": "Lỗi tìm kiếm tệp tin", + "error.browse-by": "Lỗi tìm kiếm tài liệu", + "error.collection": "Lỗi tìm kiếm bộ sưu tập", + "error.collections": "Lỗi tìm kiếm bộ sưu tập", + "error.community": "Lỗi tìm kiếm đơn vị", + "error.default": "Lỗi", + "error.identifier": "Không tìm thấy tài liệu nào cho định danh này", + "error.invalid-search-query": "Truy vấn tìm kiếm không hợp lệ. Vui lòng kiểm tra
    Cú pháp truy vấn Solr các phương pháp tốt nhất để biết thêm thông tin về lỗi này.", + "error.item": "Lỗi tìm kiếm tài liệu", + "error.items": "Lỗi tìm kiếm tài liệu", + "error.objects": "Lỗi tìm kiếm đối tượng", + "error.recent-submissions": "Lỗi tìm kiếm các tài liệu biên mục gần đây", + "error.search-results": "Lỗi tìm kiếm các kết quả tìm", + "error.sub-collections": "Lỗi tìm kiếm bộ sưu tập con", + "error.sub-communities": "Lỗi tìm kiếm đơn vị con", + "error.submission.sections.init-form-error": "Đã xảy ra lỗi khi khởi chạy các phần vui lòng kiểm tra cấu hình biểu mẫu đầu vào của bạn. Thông tin chi tiết ở bên dưới:

    ", + "error.top-level-communities": "Lỗi tìm kiếm đơn vị lớn", + "error.validation.emailTaken": "Email này đã được sử dụng", + "error.validation.filerequired": "Bắt buộc phải tải tệp tin lên", + "error.validation.groupExists": "Nhóm này đã tồn tại", + "error.validation.license.notgranted": "Bạn phải đồng ý với giấy phép này để hoàn thành tài liệu biên mục của mình. Nếu hiện tại bạn không thể đồng ý giấy phép này bạn có thể lưu tài liệu biên mục của mình và quay lại sau hoặc xóa nội dung đã biên mục.", + "error.validation.NotValidEmail": "Email này không hợp lệ", + "error.validation.pattern": "Đầu vào này bị giới hạn bởi mẫu hiện tại: {{ pattern }}.", + "error.validation.required": "Đây là trường bắt buộc", + "error-page.description.401": "không có quyền truy cập", + "error-page.description.403": "không được phép truy cập", + "error-page.description.404": "không tìm thấy trang", + "error-page.description.500": "Dịch vụ không sẵn sàng", + "error-page.orcid.generic-error": "Đã xảy ra lỗi khi đăng nhập qua ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists contact the administrator", + + "feed.description": "Nguồn cấp dữ liệu tổng hợp", + + "file-section.error.header": "Lỗi khi lấy tệp cho tài liệu này", + + "footer.copyright": "bản quyền © 2002-{{ year }}", + "footer.link.cookies": "Cài đặt Cookie", + "footer.link.dspace": "Phần mềm thư viện số", + "footer.link.end-user-agreement": "Thỏa thuận bạn đọc", + "footer.link.feedback": "Gửi phản hồi", + "footer.link.lyrasis": "LYRASIS", + "footer.link.privacy-policy": "Chính sách riêng tư", + + "forgot-email.form.email": "Địa chỉ Email *", + "forgot-email.form.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", + "forgot-email.form.email.error.required": "Vui lòng nhập địa chỉ email", + "forgot-email.form.email.hint": "Địa chỉ email này sẽ được xác nhận và sử dụng như là tên đăng nhập.", + "forgot-email.form.error.content": "Đã xảy ra lỗi khi đăng kí địa chỉ email sau: {{ email }}", + "forgot-email.form.error.head": "Đã xảy ra lỗi khi đăng kí email", + "forgot-email.form.header": "Quên mật khẩu", + "forgot-email.form.info": "Nhập địa chỉ email mà để đăng kí cập nhật thông tin tài liệu mới trong các bộ sưu tập qua email và biên mục tài liệu mới vào thư viện số.", + "forgot-email.form.submit": "Lưu", + "forgot-email.form.success.content": "Một email đã được gửi tới địa chỉ {{ email }} trong đó có chứa URL và các hướng dẫn chi tiết hơn.", + "forgot-email.form.success.head": "Email xác nhận đã được gửi tới bạn", + + "forgot-password.form.card.security": "Bảo mật", + "forgot-password.form.error.empty-password": "Vui lòng nhập mật khẩu mới trong ô dưới đây.", + "forgot-password.form.error.matching-passwords": "Hai mật khẩu không trùng khớp.", + "forgot-password.form.head": "Quên mật khẩu", + "forgot-password.form.identification.email": "Địa chỉ email:", + "forgot-password.form.identification.header": "Định danh", + "forgot-password.form.info": "Nhập mật khẩu mới trong ô dưới đây và xác nhận bằng cách nhập lại vào ô thứ hai. Mật khẩu nên chứa ít nhất 6 kí tự.", + "forgot-password.form.label.password": "Mật khẩu", + "forgot-password.form.label.passwordrepeat": "Nhập lại mật khẩu mới", + "forgot-password.form.notification.error.title": "Đã xảy ra lỗi khi gửi mật khẩu mới", + "forgot-password.form.notification.success.content": "Đã đặt lại mật khẩu thành công. Bạn đã được đăng nhập với tư cách là người dùng được tạo.", + "forgot-password.form.notification.success.title": "Hoàn thành đặt lại mật khẩu", + "forgot-password.form.submit": "Gửi mật khẩu", + "forgot-password.title": "Quên mật khẩu", + + "form.add": "Thêm", + "form.add-help": "Nhấp vào đây để thêm mục hiện tại và một mục khác", + "form.cancel": "Hủy", + "form.clear": "Xóa", + "form.clear-help": "Nhấp vào đây để xóa giá trị đã chọn", + "form.discard": "Hủy bỏ", + "form.drag": "Kéo", + "form.edit": "Chỉnh sửa", + "form.edit-help": "Nhấp vào đây để chỉnh sửa giá trị đã chọn", + "form.first-name": "Tên", + "form.group-collapse": "Thu hẹp", + "form.group-collapse-help": "Nhấp vào đây để thu hẹp", + "form.group-expand": "Mở rộng", + "form.group-expand-help": "Nhấp vào đây để mở rộng và thêm các yếu tố khác", + "form.last-name": "Họ", + "form.loading": "Đang tải...", + "form.lookup": "Tìm kiếm", + "form.lookup-help": "Nhấp vào đây để tìm kiếm mối liên hệ đang tồn tại", + "form.no-results": "Không tìm thấy kết quả phù hợp", + "form.no-value": "Không có giá trị nào được nhập vào", + "form.remove": "Xóa", + "form.repeatable.sort.tip": "Thả tài liệu vào vị trí mới", + "form.save": "Lưu", + "form.save-help": "Lưu thay đổi", + "form.search": "Tìm kiếm", + "form.search-help": "Nhấp vào đây để tìm kiếm thư từ đang tồn tại", + "form.submit": "Lưu", + + "grant-deny-request-copy.deny": "Không gửi bản sao", + "grant-deny-request-copy.email.back": "Quay lại", + "grant-deny-request-copy.email.message": "Tin nhắn", + "grant-deny-request-copy.email.message.empty": "Vui lòng nhập một tin nhắn", + "grant-deny-request-copy.email.permissions.info": "Bạn có thể nhân tiện dịp này để xem xét lại các hạn chế truy cập vào tài liệu để tránh phải trả lời các yêu cầu tương tự. Nếu bạn muốn yêu cầu quản trị hệ thống loại bỏ những hạn chế này vui lòng đánh dấu vào hộp bên dưới.", + "grant-deny-request-copy.email.permissions.label": "Chuyển thành truy cập mở", + "grant-deny-request-copy.email.send": "Gửi", + "grant-deny-request-copy.email.subject": "Chủ đề", + "grant-deny-request-copy.email.subject.empty": "Vui lòng nhập một chủ đề", + "grant-deny-request-copy.grant": "Gửi bản sao", + "grant-deny-request-copy.header": "Yêu cầu bản sao tài liệu", + "grant-deny-request-copy.home-page": "Đi tới trang chủ", + "grant-deny-request-copy.intro1": "Nếu bạn là một trong các tác giả của tài liệu {{ name }} vui lòng sử dụng một trong các tùy chọn dưới đây để phản hồi yêu cầu của bạn đọc.", + "grant-deny-request-copy.intro2": "Sau khi chọn một tùy chọn bạn sẽ thấy một email gợi ý trả lời mà bạn có thể chỉnh sửa.", + "grant-deny-request-copy.processed": "Yêu cầu này đã được xử lý. Bạn có thể sử dụng nút bên dưới để quay lại trang chủ.", + "grant-request-copy.email.message": "Dear {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện đồng ý gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\n\nTrân trọng\n\n{{ authorName }} <{{ authorEmail }}>\n", + "grant-request-copy.email.subject": "Yêu cầu bản sao tài liệu", + "grant-request-copy.error": "Đã xảy ra lỗi", + "grant-request-copy.header": "Chấp nhận yêu cầu bản sao tài liệu", + "grant-request-copy.intro": "Tin nhắn này sẽ được gửi đến người gửi yêu cầu. (Các) tài liệu được yêu cầu sẽ được gửi kèm tin nhắn.", + "grant-request-copy.success": "Yêu cầu tài liệu đã được xử lý thành công", + + "health.breadcrumbs": "Kiểm tra hệ thống", + "health-page.error.msg": "Dịch vụ kiểm tra hệ thống tạm thời không khả dụng", + "health-page.heading": "Kiểm tra hệ thống", + "health-page.info-tab": "Thông tin hệ thống", + "health-page.property.status": "Mã trạng thái", + "health-page.section.db.title": "Cơ sở dữ liệu", + "health-page.section.geoIp.title": "GeoIp", + "health-page.section.no-issues": "Không có vấn đề được phát hiện", + "health-page.section.solrAuthorityCore.title": "Solr: authority core", + "health-page.section.solrOaiCore.title": "Solr: oai core", + "health-page.section.solrSearchCore.title": "Solr: search core", + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", + "health-page.section-info.app.title": "Ứng dụng Backend", + "health-page.section-info.java.title": "Java", + "health-page.status": "Trạng thái", + "health-page.status.error.info": "Các vấn đề được tìm thấy", + "health-page.status.ok.info": "Vận hành", + "health-page.status.warning.info": "Phát hiện các vấn đề có thể xảy ra", + "health-page.status-tab": "Trạng thái", + "health-page.title": "Kiểm tra hệ thống", + + "home.description": "", + "home.breadcrumbs": "Trang chủ", + "home.search-form.placeholder": "Tìm kiếm kho lưu trữ", + "home.title": "Trang chủ", + "home.top-level-communities.head": "Danh sách đơn vị trong DSpace", + "home.top-level-communities.help": "Chọn một đơn vị để xem các bộ sưu tập của nó.", + + "info.contact.breadcrumbs": "Thông tin liên hệ", + "info.contact.head": "Thông tin liên hệ", + "info.contact.title": "Thông tin liên hệ", + "info.end-user-agreement.accept": "Tôi đã đọc và đồng ý với Thỏa thuận bạn đọc", + "info.end-user-agreement.accept.error": "Đã xảy ra lỗi khi chấp nhận Thỏa thuận bạn đọc", + "info.end-user-agreement.accept.success": "Đã cập nhật thành công Thỏa thuận bạn đọc", + "info.end-user-agreement.breadcrumbs": "Thỏa thuận bạn đọc", + "info.end-user-agreement.buttons.cancel": "Hủy", + "info.end-user-agreement.buttons.save": "Lưu", + "info.end-user-agreement.head": "Thỏa thuận người dùng", + "info.end-user-agreement.title": "Thỏa thuận người dùng", + "info.feedback.breadcrumbs": "Phản hồi", + "info.feedback.comments": "Bình luận", + "info.feedback.create.success": "Gửi phản hồi thành công!", + "info.feedback.email_help": "Địa chỉ này sẽ được sử dụng để theo dõi phản hồi của bạn.", + "info.feedback.email-label": "Email", + "info.feedback.error.email.required": "Yêu cầu địa chỉ email hợp lệ", + "info.feedback.error.message.required": "Yêu cầu phải có nội dung bình luận", + "info.feedback.head": "Phản hồi", + "info.feedback.info": "Cảm ơn bạn đã chia sẽ phản hồi của mình tới Thư viện. Chúng tôi luôn trân trọng mọi ý kiến đóng góp của bạn!", + "info.feedback.page_help": "Trang liên kết với các phản hồi của bạn", + "info.feedback.page-label": "Trang", + "info.feedback.send": "Gửi phản hồi", + "info.feedback.title": "Phản hồi", + "info.help.head": "Trợ giúp", + "info.help.title": "Trợ giúp", + "info.privacy.breadcrumbs": "Cam kết bảo mật", + "info.privacy.head": "Cam kết bảo mật", + "info.privacy.title": "Cam kết bảo mật", + + "item.alerts.private": "Đây là tài liệu cá nhân", + "item.alerts.withdrawn": "Tài liệu này đã được chuyển sang chế độ ẩn", + "item.badge.private": "Cá nhân", + "item.badge.withdrawn": "Ẩn", + "item.bitstreams.upload.bundle": "Gói tệp tin", + "item.bitstreams.upload.bundle.new": "Tạo gói tệp tin", + "item.bitstreams.upload.bundle.placeholder": "Chọn một gói tệp tin", + "item.bitstreams.upload.bundles.empty": "Tài liệu này không có gói tệp tin nào để tải tệp tin vào.", + "item.bitstreams.upload.cancel": "Hủy", + "item.bitstreams.upload.drop-message": "Thả tệp tin để tài lên", + "item.bitstreams.upload.item": "Tài liệu:", + "item.bitstreams.upload.notifications.bundle.created.content": "Tạo thành công gói tệp tin.", + "item.bitstreams.upload.notifications.bundle.created.title": "Đã tạo gói tệp tin", + "item.bitstreams.upload.notifications.upload.failed": "Tải lên thất bại. Vui lòng xác minh nội dung sau trước khi thực hiện lại.", + "item.bitstreams.upload.title": "Tải tệp tin lên", + "item.edit.authorizations.heading": "Với trình chỉnh sửa này bạn có thể xem và chỉnh sửa chính sách phân quyền của một tài liệu (item) cũng như các thành phần của tài liệu đó như: gói tệp tin (bundle) và tệp tin (bitstream). Các tài liệu có thể chứa nhiều gói và mỗi gói có thể chứa nhiều tệp tin. Tài liệu và gói tệp tin thường có các quyền là THÊM\/XÓA\/ĐỌC\/CHỈNH SỬA còn tệp tin chỉ có quyền ĐỌC\/CHỈNH SỬA.", + "item.edit.authorizations.title": "Chỉnh sửa chính sách phân quyền của tài liệu", + "item.edit.bitstreams.bundle.displaying": "Đang hiển thị {{ amount }} trong số {{ total }} tệp tin.", + "item.edit.bitstreams.bundle.edit.buttons.upload": "Tải lên", + "item.edit.bitstreams.bundle.load.all": "Tải tất cả ({{ total }})", + "item.edit.bitstreams.bundle.load.more": "Xem thêm", + "item.edit.bitstreams.bundle.name": "GÓI TỆP TIN: {{ name }}", + "item.edit.bitstreams.discard-button": "Hủy bỏ", + "item.edit.bitstreams.edit.buttons.download": "Tải xuống", + "item.edit.bitstreams.edit.buttons.drag": "Kéo", + "item.edit.bitstreams.edit.buttons.edit": "Chỉnh sửa", + "item.edit.bitstreams.edit.buttons.remove": "Xóa", + "item.edit.bitstreams.edit.buttons.undo": "Hoàn tác", + "item.edit.bitstreams.empty": "Tài liệu này không chứa tệp tin nào. Hãy nhập vào nút tải lên để tải tệp tin.", + "item.edit.bitstreams.headers.actions": "Hành động", + "item.edit.bitstreams.headers.bundle": "Gói tệp tin", + "item.edit.bitstreams.headers.description": "Mô tả", + "item.edit.bitstreams.headers.format": "Định dạng", + "item.edit.bitstreams.headers.name": "Tên", + "item.edit.bitstreams.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục các thay đổi của bạn hãy nhấp vào nút 'Hoàn tác'", + "item.edit.bitstreams.notifications.discarded.title": "Các thay đổi đã bị hủy", + "item.edit.bitstreams.notifications.move.failed.title": "Đã xảy ra lỗi khi di chuyển tệp tin", + "item.edit.bitstreams.notifications.move.saved.content": "Các di chuyển của bạn đối với tệp tin và gói tệp tin của tài liệu này đã được lưu lại.", + "item.edit.bitstreams.notifications.move.saved.title": "Di chuyển đã được lưu lại", + "item.edit.bitstreams.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn đã bị hủy bỏ để tránh xảy ra xung đột.", + "item.edit.bitstreams.notifications.outdated.title": "Các thay đổi không có hiệu lực", + "item.edit.bitstreams.notifications.remove.failed.title": "Đã xảy ra lỗi khi xóa tệp tin", + "item.edit.bitstreams.notifications.remove.saved.content": "Các thay đổi liên quan tới việc xóa tệp tin của tài liệu này đã được lưu lại.", + "item.edit.bitstreams.notifications.remove.saved.title": "Việc xóa tệp tin đã được lưu lại", + "item.edit.bitstreams.reinstate-button": "Hoàn tác", + "item.edit.bitstreams.save-button": "Lưu", + "item.edit.bitstreams.upload-button": "Tải lên", + "item.edit.breadcrumbs": "Chỉnh sửa tài liệu", + "item.edit.delete.cancel": "Hủy", + "item.edit.delete.confirm": "Xóa", + "item.edit.delete.description": "Bạn có chắc chắn muốn xóa tài liệu này? Cẩn trọng: Hành động này sẽ xóa vĩnh viễn tài liệu và không thể khôi phục lại.", + "item.edit.delete.error": "Đã xảy ra lỗi trong khi xóa tài liệu này", + "item.edit.delete.header": "Xóa tài liệu: {{ id }}", + "item.edit.delete.success": "Tài liệu đã được xóa thành công", + "item.edit.head": "Chỉnh sửa tài liệu", + "item.edit.item-mapper.buttons.add": "Liên kết tài liệu tới các bộ sưu tập đã chọn", + "item.edit.item-mapper.buttons.remove": "Xóa liên kết tài liệu với các bộ sưu tập đã chọn", + "item.edit.item-mapper.cancel": "Hủy", + "item.edit.item-mapper.description": "Đây là công cụ liên kết tài liệu cho phép quản trị viên có thể liên kết tài liệu này với các bộ sưu tập khác. Bạn có thể tìm kiếm các bộ sưu tập và thực hiện liên kết hoặc xem danh sách các bộ sưu tập mà tài liệu hiện đang được liên kết tới.", + "item.edit.item-mapper.head": "Liên kết tài liệu - Liên kết tài liệu tới Bộ sưu tập khác", + "item.edit.item-mapper.item": "Tài liệu: \"{{name}}\"", + "item.edit.item-mapper.no-search": "Vui lòng nhập một truy vấn để tìm kiếm", + "item.edit.item-mapper.notifications.add.error.content": "Đã xảy ra lỗi khi liên kết tài liệu này tới {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.add.error.head": "Xảy ra lỗi khi liên kết", + "item.edit.item-mapper.notifications.add.success.content": "Đã liên kết thành công tài liệu này tới {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.add.success.head": "Hoàn thành liên kết tài liệu", + "item.edit.item-mapper.notifications.remove.error.content": "Đã xảy ra lỗi khi xóa liên kết của tài liệu với {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.remove.error.head": "Lỗi khi xóa liên kết tài liệu", + "item.edit.item-mapper.notifications.remove.success.content": "Đã xóa thành công liên kết giữa tài liệu với {{amount}} bộ sưu tập.", + "item.edit.item-mapper.notifications.remove.success.head": "Hoàn thành xóa liên kết tài liệu", + "item.edit.item-mapper.search-form.placeholder": "Tìm kiếm bộ sưu tập", + "item.edit.item-mapper.tabs.browse": "Xem các bộ sưu tập đã liên kết", + "item.edit.item-mapper.tabs.map": "Liên kết với các bộ sưu tập mới", + "item.edit.metadata.add-button": "Thêm", + "item.edit.metadata.discard-button": "Hủy bỏ", + "item.edit.metadata.edit.buttons.edit": "Chỉnh sửa", + "item.edit.metadata.edit.buttons.remove": "Xóa", + "item.edit.metadata.edit.buttons.undo": "Hoàn tác", + "item.edit.metadata.edit.buttons.unedit": "Ngừng chỉnh sửa", + "item.edit.metadata.empty": "Bộ sưu tập này hiện không chứa trường thông tin mặc định nào. Nhập vào nút Thêm để bắt đầu thêm giá trị mặc định cho trường thông tin cho các tài liệu biên mục mới trong bộ sưu tập.", + "item.edit.metadata.headers.edit": "Chỉnh sửa", + "item.edit.metadata.headers.field": "Trường", + "item.edit.metadata.headers.language": "Ngôn ngữ", + "item.edit.metadata.headers.value": "Giá trị", + "item.edit.metadata.metadatafield.invalid": "Vui lòng chọn một trường thông tin mô tả hợp lệ", + "item.edit.metadata.notifications.discarded.content": "Các thay đổi của bạn đã bị hủy. Để khôi phục lại các thay đổi này hãy nhấp vào nút 'Hoàn tác'", + "item.edit.metadata.notifications.discarded.title": "Đã khôi phục", + "item.edit.metadata.notifications.error.title": "Đã có lỗi xảy ra", + "item.edit.metadata.notifications.invalid.content": "Các thay đổi của bạn không được lưu lại. Vui lòng đảm bảo rằng tất cả các trường là hợp lệ trước khi bạn lưu.", + "item.edit.metadata.notifications.invalid.title": "Siêu dữ liệu không hợp lệ", + "item.edit.metadata.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn với tài liệu sẽ bị hủy bỏ để tránh xung đột xảy ra.", + "item.edit.metadata.notifications.outdated.title": "Thay đổi không có hiệu lực", + "item.edit.metadata.notifications.saved.content": "Các thay đổi của bạn với thông tin mô tả của tài liệu này đã được lưu lại.", + "item.edit.metadata.notifications.saved.title": "Đã lưu thông tin mô tả", + "item.edit.metadata.reinstate-button": "Hoàn tác", + "item.edit.metadata.save-button": "Lưu", + "item.edit.modify.overview.field": "Trường", + "item.edit.modify.overview.language": "Ngôn ngữ", + "item.edit.modify.overview.value": "Giá trị", + "item.edit.move.cancel": "Quay lại", + "item.edit.move.description": "Chọn bộ sưu tập mà bạn muốn chuyển tài liệu này tới. Để giới hạn danh sách bộ sưu tập đang hiển thị bạn có thể nhập từ khóa tìm kiếm trong ô dưới đây.", + "item.edit.move.discard-button": "Hủy bỏ", + "item.edit.move.error": "Đã xảy ra lỗi khi thực hiện di chuyển tài liệu này", + "item.edit.move.head": "Di chuyển tài liệu: {{id}}", + "item.edit.move.inheritpolicies.checkbox": "Kế thừa chính sách", + "item.edit.move.inheritpolicies.description": "Kế thừa chính sách mặc định của bộ sưu tập đích", + "item.edit.move.move": "Di chuyển", + "item.edit.move.processing": "Đang di chuyển...", + "item.edit.move.save-button": "Lưu", + "item.edit.move.search.placeholder": "Nhập một từ khóa để tìm kiếm bộ sưu tập", + "item.edit.move.success": "Tài liệu đã được di chuyển thành công", + "item.edit.move.title": "Di chuyển tài liệu", + "item.edit.private.cancel": "Hủy", + "item.edit.private.confirm": "Chuyển thành tài liệu cá nhân", + "item.edit.private.description": "Bạn có chắc chắn muốn chuyển tài liệu này thành tài liệu cá nhân trong thư viện số?", + "item.edit.private.error": "Đã có lỗi xảy ra trong khi chuyển tài liệu sang chế độ cá nhân", + "item.edit.private.header": "Chuyển tài liệu: {{ id }} thành tài liệu cá nhân", + "item.edit.private.success": "Tài liệu bây giờ đã trở thành tài liệu cá nhân", + "item.edit.public.cancel": "Hủy", + "item.edit.public.confirm": "Chuyển thành tài liệu công cộng", + "item.edit.public.description": "Bạn có chắc chắn muốn chuyển tài liệu này thành tài liệu công cộng trong thư viện số?", + "item.edit.public.error": "Đã có lỗi xảy ra trong khi chuyển tài liệu sang chế độ công cộng", + "item.edit.public.header": "Chuyển tài liệu: {{ id }} thành tài liệu công cộng", + "item.edit.public.success": "Tài liệu bây giờ đã trở thành tài liệu công cộng", + "item.edit.reinstate.cancel": "Hủy", + "item.edit.reinstate.confirm": "Khôi phục", + "item.edit.reinstate.description": "Bạn có chắc chắn tài liệu này nên được khôi phục trong thư viện số?", + "item.edit.reinstate.error": "Đã có lỗi xảy ra trong khi khôi phục tài liệu này", + "item.edit.reinstate.header": "Khôi phục tài liệu: {{ id }}", + "item.edit.reinstate.success": "Tài liệu này đã được khôi phục thành công", + "item.edit.relationships.discard-button": "Hủy bỏ", + "item.edit.relationships.edit.buttons.add": "Thêm", + "item.edit.relationships.edit.buttons.remove": "Xóa", + "item.edit.relationships.edit.buttons.undo": "Hoàn tác", + "item.edit.relationships.no-entity-type": "Thêm trường dữ liệu 'dspace.entity.type' để kích hoạt các mối quan hệ cho tài liệu này", + "item.edit.relationships.no-relationships": "Không có mối quan hệ nào", + "item.edit.relationships.notifications.discarded.content": "các thay đổi của bạn đã bị hủy bỏ. Để khôi phục các thay đổi này hãy nhấp vào nút 'Hoàn tác'", + "item.edit.relationships.notifications.discarded.title": "Các thay đổi đã bị hủy", + "item.edit.relationships.notifications.failed.title": "Lỗi khi chỉnh sửa mối quan hệ", + "item.edit.relationships.notifications.outdated.content": "Tài liệu bạn đang mở cũng đang được chỉnh sửa bởi một người dùng khác. Vì vậy các thay đổi của bạn đã bị hủy bỏ để tránh xảy ra xung đột.", + "item.edit.relationships.notifications.outdated.title": "Các thay đổi không có hiệu lực", + "item.edit.relationships.notifications.saved.content": "Các thay đổi của bạn đối với các mối quan hệ của tài liệu này đã được lưu lại.", + "item.edit.relationships.notifications.saved.title": "Mối quan hệ đã được lưu lại", + "item.edit.relationships.reinstate-button": "Hoàn tác", + "item.edit.relationships.save-button": "Lưu", + "item.edit.return": "Quay lại", + "item.edit.tabs.bitstreams.head": "Tệp tin", + "item.edit.tabs.bitstreams.title": "Chỉnh sửa tài liệu - Tệp tin", + "item.edit.tabs.curate.head": "Kiểm tra dữ liệu", + "item.edit.tabs.curate.title": "Chỉnh sửa tài liệu - Kiểm tra dữ liệu", + "item.edit.tabs.disabled.tooltip": "Bạn không có quyền truy cập vào tab này", + "item.edit.tabs.item-mapper.title": "Chỉnh sửa tài liệu - Liên kết bộ sưu tập", + "item.edit.tabs.mapper.head": "Liên kết bộ sưu tập", + "item.edit.tabs.metadata.head": "Siêu dữ liệu", + "item.edit.tabs.metadata.title": "Chỉnh sửa tài liệu - Siêu dữ liệu", + "item.edit.tabs.relationships.head": "Mối quan hệ", + "item.edit.tabs.relationships.title": "Chỉnh sửa tài liệu - Mối quan hệ", + "item.edit.tabs.status.buttons.authorizations.button": "Phân quyền tài liệu", + "item.edit.tabs.status.buttons.authorizations.label": "Chỉnh sửa chính sách phân quyền của tài liệu", + "item.edit.tabs.status.buttons.delete.button": "Xóa vĩnh viễn", + "item.edit.tabs.status.buttons.delete.label": "Xóa tài liệu", + "item.edit.tabs.status.buttons.mappedCollections.button": "Bộ sưu tập đã liên kết", + "item.edit.tabs.status.buttons.mappedCollections.label": "Kiểm tra bộ sưu tập đã liên kết", + "item.edit.tabs.status.buttons.move.button": "Di chuyển tài liệu", + "item.edit.tabs.status.buttons.move.label": "Di chuyển tài liệu tới bộ sưu tập khác", + "item.edit.tabs.status.buttons.private.button": "Chuyển thành tài liệu cá nhân", + "item.edit.tabs.status.buttons.private.label": "Chuyển thành tài liệu cá nhân", + "item.edit.tabs.status.buttons.public.button": "Chuyển thành tài liệu công cộng", + "item.edit.tabs.status.buttons.public.label": "Chuyển tài liệu thành công cộng", + "item.edit.tabs.status.buttons.reinstate.button": "Khôi phục", + "item.edit.tabs.status.buttons.reinstate.label": "Khôi phục tài liệu vào kho lưu trữ", + "item.edit.tabs.status.buttons.unauthorized": "Bạn không có quyền thực hiện hành động này", + "item.edit.tabs.status.buttons.withdraw.button": "Ẩn", + "item.edit.tabs.status.buttons.withdraw.label": "Ẩn tài liệu khỏi kho lưu trữ", + "item.edit.tabs.status.description": "Chào mừng bạn đến với trang quản lý tài liệu. Từ đây bạn có thể ẩn khôi phục di chuyển hoặc xóa tài liệu. Bạn cũng có thể cập nhật hoặc nhập thêm trường dữ liệu mới tải thêm tệp tin trên những tab khác.", + "item.edit.tabs.status.head": "Trạng thái", + "item.edit.tabs.status.labels.handle": "Handle", + "item.edit.tabs.status.labels.bundleName": "Bundle name", + "item.edit.tabs.status.labels.id": "ID tài liệu", + "item.edit.tabs.status.labels.itemPage": "Trang tài liệu", + "item.edit.tabs.status.labels.lastModified": "Chỉnh sửa lần cuối", + "item.edit.tabs.status.title": "Chỉnh sửa tài liệu - Trạng thái", + "item.edit.tabs.versionhistory.head": "Lịch sử phiên bản", + "item.edit.tabs.versionhistory.title": "Chỉnh sửa tài liệu - Lịch sử phiên bản", + "item.edit.tabs.versionhistory.under-construction": "Chưa thể chỉnh sửa hoặc tạo thêm phiên bản trên giao diện người dùng này.", + "item.edit.tabs.view.head": "Xem tài liệu", + "item.edit.tabs.view.title": "Chỉnh sửa tài liệu - Xem", + "item.edit.withdraw.cancel": "Hủy", + "item.edit.withdraw.confirm": "Ẩn", + "item.edit.withdraw.description": "Bạn có chắc chắn muốn ẩn tài liệu này khỏi kho lưu trữ?", + "item.edit.withdraw.error": "Đã có lỗi xảy ra trong khi thực hiện ẩn tài liệu này", + "item.edit.withdraw.header": "Ẩn tài liệu: {{ id }}", + "item.edit.withdraw.success": "Tài liệu này đã được ẩn thành công", + "item.listelement.badge": "Tài liệu", + "item.orcid.return": "Quay lại", + "item.page.name": "Tên", + "item.page.abstract": "Tóm tắt", + "item.page.author": "Tác giả", + "item.page.bitstreams.collapse": "Thu hẹp", + "item.page.bitstreams.view-more": "Hiển thị thêm", + "item.page.citation": "Trích dẫn", + "item.page.claim.button": "Nhận nhiệm vụ", + "item.page.claim.tooltip": "Nhận nhiệm vụ tài liệu này", + "item.page.collections": "Bộ sưu tập", + "item.page.collections.loading": "Đang tải…", + "item.page.collections.load-more": "Xem thêm", + "item.page.date": "Năm xuất bản", + "item.page.description": "Mô tả", + "item.page.edit": "Chỉnh sửa tài liệu này", + "item.page.files": "Tệp tin", + "item.page.filesection.description": "Mô tả:", + "item.page.filesection.download": "Tải xuống", + "item.page.filesection.view": "Xem trực tuyến", + "item.page.filesection.format": "Định dạng:", + "item.page.filesection.license.bundle": "Tập tin giấy phép", + "item.page.filesection.name": "Tên:", + "item.page.filesection.original.bundle": "Tập tin chính của tài liệu", + "item.page.filesection.size": "Dung lượng:", + "item.page.journal.search.title": "Bài viết trong tạp chí này", + "item.page.journal-issn": "ISSN", + "item.page.journal-title": "Nhan đề tạp chí", + "item.page.link.full": "Hiển thị chi tiết", + "item.page.link.simple": "Hiển thị đơn giản", + "item.page.orcid.title": "ORCID", + "item.page.orcid.tooltip": "Mở trang cài đặt ORCID", + "item.page.person.search.title": "Bài viết của tác giả này", + "item.page.publisher": "Nhà xuất bản", + "item.page.related-items.view-less": "Ẩn {{ amount }} tài liệu cuối", + "item.page.related-items.view-more": "Hiển thị thêm {{ amount }} tài liệu", + "item.page.relationships.isAuthorOfPublication": "Ấn phẩm", + "item.page.relationships.isJournalOfPublication": "Ấn phẩm", + "item.page.relationships.isOrgUnitOfPerson": "Tác giả", + "item.page.relationships.isOrgUnitOfProject": "Dự án nghiên cứu", + "item.page.return": "Quay lại", + "item.page.subject": "Từ khóa chủ đề", + "item.page.titleprefix": "Tài liệu:", + "item.page.uri": "URL", + "item.page.version.create": "Tạo phiên bản mới", + "item.page.version.hasDraft": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", + "item.page.volume-title": "Nhan đề tập", + "item.preview.dc.contributor.author": "Tác giả:", + "item.preview.dc.coverage.spatial": "Quyền hạn:", + "item.preview.dc.date.issued": "Năm xuất bản:", + "item.preview.dc.description.abstract": "Tóm tắt:", + "item.preview.dc.identifier": "Định danh:", + "item.preview.dc.identifier.doi": "DOI", + "item.preview.dc.identifier.isbn": "ISBN", + "item.preview.dc.identifier.other": "Định danh khác:", + "item.preview.dc.identifier.uri": "Định danh:", + "item.preview.dc.language.iso": "Ngôn ngữ:", + "item.preview.dc.relation.ispartof": "Tạp chí hoặc Ấn phẩm định kỳ", + "item.preview.dc.relation.issn": "ISSN", + "item.preview.dc.subject": "Chủ đề:", + "item.preview.dc.title": "Nhan đề:", + "item.preview.dc.title.alternative": "Viết tắt:", + "item.preview.dc.type": "Loại hình tài liệu:", + "item.preview.oaire.awardNumber": "ID quỹ:", + "item.preview.oaire.citation.issue": "Kỳ ấn phẩm", + "item.preview.oaire.citation.volume": "Tập", + "item.preview.oaire.fundingStream": "Dòng quỹ:", + "item.preview.person.familyName": "Họ:", + "item.preview.person.givenName": "Tên:", + "item.preview.person.identifier.orcid": "ORCID:", + "item.preview.project.funder.identifier": "Định danh nhà tài trợ:", + "item.preview.project.funder.name": "Nhà tài trợ:", + "item.search.results.head": "Kết quả tìm kiếm tài liệu", + "item.search.title": "Tìm kiếm tài liệu", + "item.select.confirm": "Xác nhận cái đã chọn", + "item.select.empty": "Không có tài liệu để hiển thị", + "item.select.table.author": "Tác giả", + "item.select.table.collection": "Bộ sưu tập", + "item.select.table.title": "Nhan đề", + "item.truncatable-part.show-less": "Thu hẹp", + "item.truncatable-part.show-more": "Xem thêm", + "item.version.create.modal.button.cancel": "Hủy", + "item.version.create.modal.button.cancel.tooltip": "Không thể tạo phiên bản mới", + "item.version.create.modal.button.confirm": "Tạo", + "item.version.create.modal.button.confirm.tooltip": "Tạo phiên bản mới", + "item.version.create.modal.form.summary.label": "Thông tin tổng quan", + "item.version.create.modal.form.summary.placeholder": "Thêm thông tin mô tả cho phiên bản mới", + "item.version.create.modal.header": "Phiên bản mới", + "item.version.create.modal.submitted.header": "Tạp phiên bản mới…", + "item.version.create.modal.submitted.text": "Phiên bản mới đang được tạo. Có thể mất một chút thời gian để hoàn tất nếu tài liệu có nhiều mối quan hệ.", + "item.version.create.modal.text": "Tạo phiên bản mới cho tài liệu này", + "item.version.create.modal.text.startingFrom": "bắt đầu từ phiên bản {{version}}", + "item.version.create.notification.failure": "Phiên bản mới chưa được tạo", + "item.version.create.notification.inProgress": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", + "item.version.create.notification.success": "Phiên bản mới đã được tạo với mã số phiên bản là {{version}}", + "item.version.delete.modal.button.cancel": "Hủy", + "item.version.delete.modal.button.cancel.tooltip": "Không xóa phiên bản này", + "item.version.delete.modal.button.confirm": "Xóa", + "item.version.delete.modal.button.confirm.tooltip": "Xóa phiên bản này", + "item.version.delete.modal.header": "Xóa phiên bản", + "item.version.delete.modal.text": "Bạn có muốn xóa phiên bản {{version}}?", + "item.version.delete.notification.failure": "Phiên bản {{version}} chưa bị xóa", + "item.version.delete.notification.success": "Phiên bản {{version}} đã được xóa", + "item.version.edit.notification.failure": "Thông tin tổng quan của phiên bản {{version}} chưa được thay đổi", + "item.version.edit.notification.success": "Thông tin tổng quan của phiên bản {{version}} đã được thay đổi", + "item.version.history.empty": "Chưa có phiên bản nào khác của tài liệu này.", + "item.version.history.head": "Lịch sử phiên bản", + "item.version.history.return": "Quay lại", + "item.version.history.selected": "Phiên bản đã chọn", + "item.version.history.selected.alert": "Hiện tại bạn đang xem phiên bản {{version}} của tài liệu này.", + "item.version.history.table.action.deleteVersion": "Xóa phiên bản", + "item.version.history.table.action.discardSummary": "Hủy chỉnh sửa", + "item.version.history.table.action.editSummary": "Chỉnh sửa thông tin tổng quan", + "item.version.history.table.action.editWorkspaceItem": "Chỉnh sửa biểu ghi đang biên mục", + "item.version.history.table.action.hasDraft": "Không thể tạo phiên bản mới vì có một phiên bản đang trong tiến trình tải lên", + "item.version.history.table.action.newVersion": "Tạo phiên bản mới từ tài liệu này", + "item.version.history.table.action.saveSummary": "Lưu", + "item.version.history.table.actions": "Hành động", + "item.version.history.table.date": "Thời gian xuất bản", + "item.version.history.table.editor": "Người biên tập", + "item.version.history.table.item": "Tài liệu", + "item.version.history.table.summary": "Tóm tắt", + "item.version.history.table.version": "Phiên bản", + "item.version.history.table.workflowItem": "Đang kiểm duyệt", + "item.version.history.table.workspaceItem": "Đang biên mục", + "item.version.notice": "Đây không phải là phiên bản mới nhất của tài liệu này. Phiên bản mới nhất có thể xem tại đây.", + + "itemtemplate.edit.metadata.add-button": "Add", "itemtemplate.edit.metadata.discard-button": "Discard", @@ -1351,1317 +1351,1317 @@ "journal.listelement.badge": "Tạp chí", - "journal.page.description": "Mô tả", - "journal.page.edit": "Chỉnh sửa tài liệu này", - "journal.page.editor": "Tổng biên tập", - "journal.page.issn": "ISSN", - "journal.page.publisher": "Nhà xuất bản", - "journal.page.titleprefix": "Tạp chí:", - "journal.search.results.head": "Kết quả tìm kiếm tạp chí", - "journal.search.title": "Tìm kiếm tạp chí", - "journalissue.listelement.badge": "Kỳ của tạp chí", - "journalissue.page.description": "Mô tả", - "journalissue.page.abstract": "Tóm tắt", - "journalissue.page.edit": "Chỉnh sửa tài liệu này", - "journalissue.page.issuedate": "Ngày xuất bản", - "journalissue.page.journal-issn": "ISSN", - "journalissue.page.journal-title": "Nhan đề tạp chí", - "journalissue.page.keyword": "Từ khóa chủ đề", - "journalissue.page.number": "Số lượng", - "journalissue.page.titleprefix": "Kỳ của tạp chí:", - "journal-relationships.search.results.head": "Kết quả tìm kiếm tạp chí", - "journalvolume.listelement.badge": "Tập của tạp chí", - "journalvolume.page.description": "Mô tả", - "journalvolume.page.edit": "Chỉnh sửa tài liệu này", - "journalvolume.page.issuedate": "Ngày xuất bản", - "journalvolume.page.titleprefix": "Tập của tạp chí:", - "journalvolume.page.volume": "Tập", - - - "iiif.listelement.badge": "Phương tiện hình ảnh", - "iiif.page.description": "Mô tả:", - "iiif.page.doi": "Đường dẫn cố định:", - "iiif.page.issue": "Vấn đề:", - "iiif.page.titleprefix": "Hình ảnh:", - "iiifsearchable.listelement.badge": "Phương tiện biểu ghi", - "iiifsearchable.page.description": "Mô tả:", - "iiifsearchable.page.doi": "Đường dẫn cố định:", - "iiifsearchable.page.issue": "Vấn đề:", - "iiifsearchable.page.titleprefix": "Tài liệu:", - "iiifviewer.fullscreen.notice": "Sử dụng chế độ toàn màn hình để xem tốt hơn.", - - "loading.bitstream": "Đang tải tệp tin...", - "loading.bitstreams": "Đang tải tệp tin...", - "loading.browse-by": "Đang tải tài liệu...", - "loading.browse-by-page": "Đang tải trang...", - "loading.collection": "Đang tải bộ sưu tập...", - "loading.collections": "Đang tải bộ sưu tập...", - "loading.community": "Đang tải đơn vị...", - "loading.content-source": "Đang tải nguồn nội dung...", - "loading.default": "Đang tải...", - "loading.item": "Đang tải tài liệu...", - "loading.items": "Đang tải tài liệu...", - "loading.mydspace-results": "Đang tải tài liệu...", - "loading.objects": "Đang tải...", - "loading.recent-submissions": "Đang tải các tài liệu mới gần đây...", - "loading.search-results": "Đanh tải kết quả tìm kiếm...", - "loading.sub-collections": "Đang tải bộ sưu tập con...", - "loading.sub-communities": "Đang tải đơn vị con...", - "loading.top-level-communities": "Đang tải các đơn vị lớn...", - - "login.breadcrumbs": "Đăng nhập", - "login.form.email": "Địa chỉ email", - "login.form.forgot-password": "Có phải bạn quên mật khẩu?", - "login.form.header": "Vui lòng đăng nhập vào DSpace", - "login.form.new-user": "Bạn là người dùng mới? \n Vui lòng nhấp vào đây để đăng kí.", - "login.form.oidc": "Đăng nhập với OIDC", - "login.form.orcid": "Đăng nhập với ORCID", - "login.form.or-divider": "hoặc", - "login.form.password": "Mật khẩu", - "login.form.shibboleth": "Đăng nhập bằng Shibboleth", - "login.form.submit": "Đăng nhập", - "login.title": "Đăng nhập", - - "logout.form.header": "Đăng xuất khỏi DSpace", - "logout.form.submit": "Đăng xuất", - "logout.title": "Đăng xuất", - - "menu.header.admin": "Quản trị", - "menu.header.admin.description": "Menu quản trị", - "menu.header.image.logo": "Logo của kho lưu trữ", - - "menu.section.access_control": "Người dùng và nhóm người dùng", - "menu.section.access_control_authorizations": "Chính sách phân quyền", - "menu.section.access_control_groups": "Nhóm người dùng", - "menu.section.access_control_people": "Người dùng", - "menu.section.admin_search": "Tìm kiếm quản trị", - "menu.section.browse_community": "Đơn vị này", - "menu.section.browse_community_by_author": "Tác giả", - "menu.section.browse_community_by_issue_date": "Năm xuất bản", - "menu.section.browse_community_by_title": "Nhan đề", - "menu.section.browse_global": "Duyệt tìm", - "menu.section.browse_global_by_author": "Tác giả", - "menu.section.browse_global_by_dateissued": "Năm xuất bản", - "menu.section.browse_global_by_subject": "Chủ đề", - "menu.section.browse_global_by_title": "Nhan đề", - "menu.section.browse_global_communities_and_collections": "Đơn vị & Bộ sưu tập", - "menu.section.control_panel": "Bảng điều khiển", - "menu.section.curation_task": "Kiểm tra dữ liệu", - "menu.section.edit": "Chỉnh sửa", - "menu.section.edit_collection": "Bộ sưu tập", - "menu.section.edit_community": "Đơn vị", - "menu.section.edit_item": "Tài liệu", - "menu.section.export": "Trích xuất", - "menu.section.export_batch": "Xuất dữ liệu (ZIP)", - "menu.section.export_collection": "Bộ sưu tập", - "menu.section.export_community": "Đơn vị", - "menu.section.export_item": "Tài liệu", - "menu.section.export_metadata": "Siêu dữ liệu", - "menu.section.health": "Kiểm tra hệ thống", - "menu.section.icon.access_control": "Phần menu của mục Người dùng và Nhóm người dùng", - "menu.section.icon.admin_search": "Phần menu của mục Tìm kiếm quản trị", - "menu.section.icon.control_panel": "Phần menu của mục Bảng điều khiển", - "menu.section.icon.curation_tasks": "Phần menu của Nhiệm vụ kiểm tra", - "menu.section.icon.edit": "Phần menu của mục Chỉnh sửa", - "menu.section.icon.export": "Phần menu của mục Trích xuất dữ liệu", - "menu.section.icon.find": "Phần menu của mục Tìm kiếm", - "menu.section.icon.health": "Phần menu của mục Kiểm tra hệ thống", - "menu.section.icon.import": "Phần menu của mục Nhập dữ liệu", - "menu.section.icon.new": "Phần menu của mục Tạo mới", - "menu.section.icon.pin": "Ghim thanh quản trị", - "menu.section.icon.processes": "Phần menu của mục Tiến trình", - "menu.section.icon.registries": "Phần menu của mục Thống số chung", - "menu.section.icon.statistics_task": "Phần menu của mục Nhiệm vụ báo cáo thống kê", - "menu.section.icon.unpin": "Bỏ ghim thanh quản trị", - "menu.section.icon.workflow": "Phần menu của mục Quản trị luồng công việc", - "menu.section.import": "Nhập dữ liệu", - "menu.section.import_batch": "Nhập liệu theo lô (ZIP)", - "menu.section.import_metadata": "Siêu dữ liệu", - "menu.section.new": "Tạo mới", - "menu.section.new_collection": "Bộ sưu tập", - "menu.section.new_community": "Đơn vị", - "menu.section.new_item": "Tài liệu", - "menu.section.new_item_version": "Phiên bản tài liệu", - "menu.section.new_process": "Tiến trình", - "menu.section.pin": "Ghim thanh quản trị", - "menu.section.policies_metadata": "Chính sách phân quyền", - "menu.section.processes": "Tiến trình", - "menu.section.registries": "Thông số chung", - "menu.section.registries_format": "Định dạng tệp tin số", - "menu.section.registries_metadata": "Trường dữ liệu", - "menu.section.statistics": "Báo cáo thống kê", - "menu.section.statistics_admin": "Báo cáo thống kê", - "menu.section.statistics_admin_metadata": "Báo cáo thống kê", - "menu.section.statistics_task": "Nhiệm vụ báo cáo thống kê", - "menu.section.toggle.access_control": "Phần chuyển đổi Người dùng và Nhóm người dùng", - "menu.section.toggle.control_panel": "Phần chuyển đổi Bảng điều khiển", - "menu.section.toggle.curation_task": "Phần chuyển đổi Kiểm tra dữ liệu", - "menu.section.toggle.edit": "Phần chuyển đổi Chỉnh sửa", - "menu.section.toggle.export": "Phần chuyển đổi Trích xuất dữ liệu", - "menu.section.toggle.find": "Phần chuyển đổi Tìm kiếm", - "menu.section.toggle.import": "Phần chuyển đổi Nhập dữ liệu", - "menu.section.toggle.new": "Phần chuyển đổi Tạo mới", - "menu.section.toggle.registries": "Phần chuyển đổi thông số chung", - "menu.section.toggle.statistics_task": "Phần chuyển đổi Nhiệm vụ Báo cáo thống kê", - "menu.section.unpin": "Bỏ ghim thanh quản trị", - "menu.section.workflow": "Quản trị dòng công việc", - - "metadata-export-search.submit.error": "Xảy ra lỗi trong quá trình xuất dữ liệu", - "metadata-export-search.submit.success": "Quá trình xuất dữ liệu đã được khởi chạy thành công", - "metadata-export-search.tooltip": "Xuất kết quả tìm kiếm ra CSV", - - "mydspace.breadcrumbs": "Trang cá nhân", - "mydspace.messages.controller-help": "Chọn tùy chọn này để gửi tin nhắn tới người biên mục tài liệu.", - "mydspace.messages.description-placeholder": "Thêm tin nhắn của bạn tại đây...", - "mydspace.messages.hide-msg": "Ẩn tin nhắn", - "mydspace.messages.mark-as-read": "Đánh dấu đã đọc", - "mydspace.messages.mark-as-unread": "Đánh dấu chưa đọc", - "mydspace.messages.no-content": "Không có nội dung.", - "mydspace.messages.no-messages": "Không có tin nhắn nào.", - "mydspace.messages.send-btn": "Gửi", - "mydspace.messages.show-msg": "Hiển thị tin nhắn", - "mydspace.messages.subject-placeholder": "Chủ đề...", - "mydspace.messages.submitter-help": "Chọn tùy chọn này để gửi tin nhắn tới người quản trị.", - "mydspace.messages.title": "Tin nhắn", - "mydspace.messages.to": "Tới", - "mydspace.new-submission": "Tạo tài liệu mới", - "mydspace.new-submission-external": "Nhập thông tin mô tả từ nguồn bên ngoài", - "mydspace.new-submission-external-short": "Nhập thông tin mô tả", - "mydspace.results.head": "Tài liệu của tôi", - "mydspace.results.no-abstract": "Không có tóm tắt", - "mydspace.results.no-authors": "Không có tác giả", - "mydspace.results.no-collections": "Không có bộ sưu tập", - "mydspace.results.no-date": "Không có thời gian xuất bản", - "mydspace.results.no-files": "Không có tệp đính kèm", - "mydspace.results.no-results": "Không có tài liệu để hiển thị", - "mydspace.results.no-title": "Không có nhan đề", - "mydspace.results.no-uri": "Không có URL", - "mydspace.search-form.placeholder": "Tìm kiếm trong trang cá nhân của tôi...", - "mydspace.show.workflow": "Tất cả nhiệm vụ", - "mydspace.show.workspace": "Tài liệu của tôi", - "mydspace.status.archived": "Đã lưu trữ", - "mydspace.status.validation": "Đang kiểm tra", - "mydspace.status.waiting-for-controller": "Đợi nhận nhiệm vụ", - "mydspace.status.workflow": "Đang kiểm duyệt", - "mydspace.status.workspace": "Đang biên mục", - "mydspace.title": "Trang cá nhân", - "mydspace.upload.upload-failed": "Có lỗi xảy ra khi tạo tài liệu mới. Vui lòng xác minh nội dung đã tải lên trước khi thử lại.", - "mydspace.upload.upload-failed-manyentries": "Không thể xử lý tệp tin. Có quá nhiều mục trong khi hệ thống chỉ cho phép một mục trong tệp tin.", - "mydspace.upload.upload-failed-moreonefile": "Không thể xử lý yêu cầu. Chỉ cho phép một tệp tin duy nhất.", - "mydspace.upload.upload-multiple-successful": "Đã tạo {{qty}} mục không gian làm việc mới.", - "mydspace.view-btn": "Xem chi tiết", - - "nav.browse.header": "Tất cả DSpace", - "nav.community-browse.header": "Theo Đơn vị", - "nav.language": "Chuyển ngôn ngữ", - "nav.login": "Đăng nhập", - "nav.logout": "Menu Hồ sơ cá nhân và Đăng xuất", - "nav.main.description": "Thanh điều hướng chính", - "nav.mydspace": "Trang cá nhân", - "nav.profile": "Hồ sơ cá nhân", - "nav.search": "Tìm kiếm", - "nav.statistics.header": "Báo cáo thống kê", - "nav.stop-impersonating": "Ngừng giả danh Người dùng", - "nav.toggle": "Điều hướng chuyển", - "nav.user.description": "Thanh hồ sơ người dùng", - "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", - - "none.listelement.badge": "Tài liệu", - - "orgunit.listelement.badge": "Đơn vị\/Tổ chức", - "orgunit.listelement.no-title": "Không có nhan đề", - "orgunit.page.city": "Thành phố", - "orgunit.page.country": "Quốc gia", - "orgunit.page.dateestablished": "Ngày thành lập", - "orgunit.page.description": "Mô tả", - "orgunit.page.edit": "Chỉnh sửa tài liệu", - "orgunit.page.id": "ID", - "orgunit.page.titleprefix": "Đơn vị\/Tổ chức", - - "pagination.next.button": "Tiếp theo", - "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", - "pagination.options.description": "Tùy chọn Phân trang", - "pagination.previous.button": "Quay lại", - "pagination.results-per-page": "Số kết quả\/trang", - "pagination.showing.detail": "{{ range }} của tổng số {{ total }} kết quả", - "pagination.showing.label": "Đang hiển thị ", - "pagination.sort-direction": "Tùy chọn sắp xếp", - - "person.listelement.badge": "Nhà nghiên cứu", - "person.listelement.no-title": "Không tìm thấy tên", - "person.orcid.registry.auth": "Được phép qua ORCID ", - "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", - "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", - "person.page.birthdate": "Ngày sinh", - "person.page.edit": "Chỉnh sửa tài liệu", - "person.page.email": "Email", - "person.page.firstname": "Tên", - "person.page.jobtitle": "Chức vụ", - "person.page.abtract": "Tiểu sử", - "person.page.description": "Mô tả", - "person.page.lastname": "Họ", - "person.page.link.full": "Hiển thị chi tiết", - "person.page.name": "Tên", - "person.page.orcid": "ORCID", - "person.page.orcid.create": "Tạo một ID trên ORCID", - "person.page.orcid.funding-preferences": "Quỹ ưa thích", - "person.page.orcid.grant-authorizations": "Cấp quyền", - "person.page.orcid.granted-authorizations": "Quyền đã cấp", - "person.page.orcid.link": "Liên kết với ID ORCID", - "person.page.orcid.link.error.message": "Đã xảy ra lỗi khi kết nối hồ sơ với ORCID. Nếu sự cố vẫn tiếp tục xảy ra vui lòng liên hệ với quản trị viên.", - "person.page.orcid.link.processing": "Đang kết nối hồ sơ tới ORCID…", - "person.page.orcid.missing-authorizations": "Thiếu quyền", - "person.page.orcid.missing-authorizations-message": "Những quyền sau đang bị thiếu:", - "person.page.orcid.no-missing-authorizations-message": "Tuyệt! Ô này đang trống vì vậy bạn đã được cấp tất cả các quyền truy cập để sử dụng tất cả các chức năng do tổ chức của bạn cung cấp.", - "person.page.orcid.no-orcid-message": "Chưa có ID ORCID nào được liên kết. Bạn có thể click vào nút dưới đây để liên kết hồ sơ này với một tài khoản ORCID.", - "person.page.orcid.orcid-not-linked-message": "ID ORCID của hồ sơ này ({{ orcid }}) chưa được kết nối với tài khoản trên trang ORCID hoặc kết nối đã hết hạn.", - "person.page.orcid.profile-preferences": "Tham số của hồ sơ", - "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", - "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", - "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", - "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", - "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", - "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", - "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", - "person.page.orcid.sync-fundings.all": "Tất cả quỹ", - "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", - "person.page.orcid.sync-fundings.mine": "Quỹ của tôi", - "person.page.orcid.sync-fundings.my_selected": "Quỹ đã chọn", - "person.page.orcid.synchronization-mode": "Chế độ đồng bộ", - "person.page.orcid.synchronization-mode.batch": "Theo lô", - "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", - "person.page.orcid.synchronization-mode.manual": "Thủ công", - "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", - "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", - "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", - "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", - "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", - "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", - "person.page.orcid.sync-profile.affiliation": "Tổ chức", - "person.page.orcid.sync-profile.biographical": "Dữ liệu sinh trắc học", - "person.page.orcid.sync-profile.education": "Giáo dục", - "person.page.orcid.sync-profile.identifiers": "Định danh", - "person.page.orcid.sync-publications.all": "Tất cả ấn phẩm", - "person.page.orcid.sync-publications.disabled": "Đã ngừng kích hoạt", - "person.page.orcid.sync-publications.mine": "Ấn phẩm của tôi", - "person.page.orcid.sync-publications.my_selected": "Ấn phẩm đã chọn", - "person.page.orcid.sync-queue.description.affiliation": "Tổ chức", - "person.page.orcid.sync-queue.description.country": "Quốc gia", - "person.page.orcid.sync-queue.description.education": "Giáo dục", - "person.page.orcid.sync-queue.description.external_ids": "ID ngoài", - "person.page.orcid.sync-queue.description.keywords": "Từ khóa", - "person.page.orcid.sync-queue.description.other_names": "Tên khác", - "person.page.orcid.sync-queue.description.qualification": "Trình độ chuyên môn", - "person.page.orcid.sync-queue.description.researcher_urls": "URL nhà nghiên cứu", - "person.page.orcid.sync-queue.discard": "Hủy thay đổi và không đồng bộ với trang ORCID", - "person.page.orcid.sync-queue.discard.error": "Việc loại bỏ biểu ghi trong danh sách chờ của ORCID đã thất bại", - "person.page.orcid.sync-queue.discard.success": "Biểu ghi trong danh sách chờ của ORCID đã được hủy bỏ thành công", - "person.page.orcid.sync-queue.empty-message": "Danh sách chờ ORCID trống", - "person.page.orcid.sync-queue.send": "Đồng bộ với trang ORCID", - "person.page.orcid.sync-queue.send.bad-request-error": "Đẩy dữ liệu lên ORCID không thành công vì tài nguyên này không hợp lệ", - "person.page.orcid.sync-queue.send.conflict-error": "Đẩy dữ liệu lên ORCID không thành công bởi vì tài nguyên này đã có trên trang ORCID", - "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", - "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", - "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", - "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", - "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", - "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", - "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.country.invalid": "2 ký tự mã quốc gia theo ISO 3166 là không hợp lệ", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Cần có số định danh (ID) để phân biệt giữa các tổ chức. ID được hỗ trợ là GRID Ringgold LEI và số định dang Cơ quan đăng ký Crossref Funder", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Định danh của tổ chức yêu cầu phải có một giá trị", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Nguồn của một trong các số định danh của tổ chức không hợp lệ. Các nguồn được hỗ trợ là RINGGOLD GRID LEI và FUNDREF", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Phải có một nguồn cho định danh của tổ chức", - "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Tài nguyên được gửi yêu cầu phải có ít nhất một định danh", - "person.page.orcid.sync-queue.send.validation-error.funder.required": "Nhà tài trợ là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Tổ chức này yêu cầu phải có địa chỉ", - "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Địa chỉ của tổ chức này phải là một thành phố", - "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Địa chỉ của tổ chức này phải là một mã quốc gia bao gồm 2 ký tự theo ISO 3166", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Tên của tổ chức là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.organization.required": "Yêu cầu phải có tổ chức", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Năm xuất bản phải là năm sau năm 1900", - "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Ngày bắt đầu là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.title.required": "Nhan đề là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.type.required": "Trường dc.type là bắt buộc", - "person.page.orcid.sync-queue.table.header.action": "Hành động", - "person.page.orcid.sync-queue.table.header.description": "Mô tả", - "person.page.orcid.sync-queue.table.header.type": "Loại hình tài liệu", - "person.page.orcid.sync-queue.tooltip.affiliation": "Tổ chức", - "person.page.orcid.sync-queue.tooltip.country": "Quốc gia", - "person.page.orcid.sync-queue.tooltip.delete": "Loại bỏ mục này khỏi trang ORCID", - "person.page.orcid.sync-queue.tooltip.education": "Giáo dục", - "person.page.orcid.sync-queue.tooltip.external_ids": "Định danh ", - "person.page.orcid.sync-queue.tooltip.insert": "Thêm mục mới trong ORCID", - "person.page.orcid.sync-queue.tooltip.keywords": "Từ khóa", - "person.page.orcid.sync-queue.tooltip.other_names": "Tên khác", - "person.page.orcid.sync-queue.tooltip.project": "Dự án", - "person.page.orcid.sync-queue.tooltip.publication": "Ấn phẩm", - "person.page.orcid.sync-queue.tooltip.qualification": "Trình độ chuyên môn", - "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL nhà nghiên cứu", - "person.page.orcid.sync-queue.tooltip.update": "Cập nhật mục này trên trang ORCID", - "person.page.orcid.unlink": "Ngắt kết nối khỏi ORCID", - "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", - "person.page.orcid.unlink.processing": "Đang xử lý…", - "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", - "person.page.staffid": "ID nhân viên", - "person.page.titleprefix": "Nhà nghiên cứu", - "person.search.results.head": "Kết quả tìm kiếm Nhà nghiên cứu", - "person.search.title": "Tìm kiếm Nhà nghiên cứu", - "person-relationships.search.results.head": "Kết quả tìm kiếm Tác giả\/Nhà nghiên cứu", - - "process.bulk.delete.error.body": "Không thể xóa tiến trình có ID {{ processId}}. Các tiến trình còn lại sẽ tiếp tục bị xóa.", - "process.bulk.delete.error.head": "Đã xảy ra lỗi khi xóa tiến trình", - "process.detail.actions": "Hành động", - "process.detail.arguments": "Tham số", - "process.detail.arguments.empty": "Tiến trình này không chứa bất kì tham số nào", - "process.detail.back": "Quay lại", - "process.detail.create": "Tạo tiến trình tương tự", - "process.detail.delete.body": "Bạn có chắc chắn muốn xóa tiến trình hiện tại?", - "process.detail.delete.button": "Xóa tiến trình", - "process.detail.delete.cancel": "Hủy", - "process.detail.delete.confirm": "Xóa tiến trình", - "process.detail.delete.error": "Đã xảy ra sự cố trong khi xóa tiến trình", - "process.detail.delete.header": "Xóa tiến trình", - "process.detail.delete.success": "Tiến trình đã được xóa thành công.", - "process.detail.end-time": "Thời gian kết thúc", - "process.detail.logs.button": "Tìm kiếm đầu ra của tiến trình", - "process.detail.logs.loading": "Đang tìm kiếm", - "process.detail.logs.none": "Tiến trình này không có đầu ra nào", - "process.detail.output": "Đầu ra của tiến trình", - "process.detail.output-files": "Tệp tin đầu ra", - "process.detail.output-files.empty": "Tiến trình này không chứa tệp tin đầu ra nào", - "process.detail.script": "Tập lệnh", - "process.detail.start-time": "Thời gian bắt đầu", - "process.detail.status": "Trạng thái", - "process.detail.title": "Tiến trình: {{ id }} - {{ name }}", - "process.new.breadcrumbs": "Tạo tiến trình mới", - "process.new.cancel": "Hủy", - "process.new.header": "Tạo tiến trình mới", - "process.new.notification.error.content": "Đã có lỗi xảy ra trong khi tạo tiến trình", - "process.new.notification.error.title": "Lỗi", - "process.new.notification.success.content": "Tiến trình đã được thực hiện thành công", - "process.new.notification.success.title": "Thành công", - "process.new.parameter.file.required": "Vui lòng chọn một tệp tin", - "process.new.parameter.file.upload-button": "Chọn tệp tin...", - "process.new.parameter.required.missing": "Các tham số bắt buộc sau đang bị thiếu:", - "process.new.parameter.string.required": "Giá trị tham số là bắt buộc", - "process.new.parameter.type.file": "tệp tin", - "process.new.parameter.type.value": "giá trị", - "process.new.select-parameters": "Tham số", - "process.new.select-script": "Tập lệnh", - "process.new.select-script.placeholder": "Chọn một tập lệnh...", - "process.new.select-script.required": "Tập lệnh là bắt buộc", - "process.new.submit": "Lưu", - "process.new.title": "Tạo tiến trình mới", - "process.overview.breadcrumbs": "Tiến trình tổng quan", - "process.overview.delete": "Xóa {{count}} tiến trình", - "process.overview.delete.body": "Bạn có chắc chắn muốn xóa {{count}} tiến trình?", - "process.overview.delete.clear": "Xóa các tiến trình đã chọn", - "process.overview.delete.header": "Xóa", - "process.overview.new": "Tạo mới", - "process.overview.table.actions": "Hành động", - "process.overview.table.finish": "Thời gian kết thúc", - "process.overview.table.id": "ID tiến trình", - "process.overview.table.name": "Tên", - "process.overview.table.start": "Thời gian bắt đầu", - "process.overview.table.status": "Trạng thái", - "process.overview.table.user": "Người dùng", - "process.overview.title": "Tổng quan tiến trình", - - "profile.breadcrumbs": "Cập nhật hồ sơ", - "profile.card.identify": "Hồ sơ định danh", - "profile.card.researcher": "Định danh", - "profile.card.security": "Bảo mật", - "profile.form.submit": "Lưu", - "profile.groups.head": "Nhóm quyền của bạn", - "profile.head": "Cập nhật hồ sơ", - "profile.metadata.form.error.firstname.required": "Yêu cầu nhập Tên của người dùng", - "profile.metadata.form.error.lastname.required": "Yêu cầu nhập Họ của người dùng", - "profile.metadata.form.label.email": "Địa chỉ email", - "profile.metadata.form.label.firstname": "Tên", - "profile.metadata.form.label.language": "Ngôn ngữ", - "profile.metadata.form.label.lastname": "Họ", - "profile.metadata.form.label.phone": "Số điện thoại liên hệ", - "profile.metadata.form.notifications.success.content": "Cập nhật hồ sơ thành công .", - "profile.metadata.form.notifications.success.title": "Lưu hồ sơ", - "profile.notifications.warning.no-changes.content": "Không có thay đổi nào trên hồ sơ của bạn.", - "profile.notifications.warning.no-changes.title": "Không thay đổi", - "profile.security.form.error.matching-passwords": "Mật khẩu không khớp.", - "profile.security.form.info": "Nhập vào mật khẩu mới và xác nhận mật khẩu vào ô phía dưới. Độ dài tối thiểu của mật khẩu là 6 ký tự.", - "profile.security.form.label.current-password": "Mật khẩu hiện tại", - "profile.security.form.label.password": "Mật khẩu", - "profile.security.form.label.passwordrepeat": "Nhập lại mật khẩu để xác nhận", - "profile.security.form.notifications.error.change-failed": "Đã xảy ra lỗi khi thay đổi mật khẩu. Vui lòng kiểm tra lại tính chính xác của mật khẩu hiện tại.", - "profile.security.form.notifications.error.general": "Vui lòng điền vào các trường bắt buộc của biểu mẫu bảo mật.", - "profile.security.form.notifications.error.not-same": "Mật khẩu được cung cấp không giống nhau.", - "profile.security.form.notifications.error.title": "Thay đổi mật khẩu không thành công", - "profile.security.form.notifications.success.content": "Thay đổi mật khẩu thành công.", - "profile.security.form.notifications.success.title": "Đã lưu mật khẩu", - "profile.special.groups.head": "Phân quyền cho các nhóm đặc biệt mà bạn thuộc về", - "profile.title": "Cập nhật hồ sơ", - - "project.listelement.badge": "Dự án nghiên cứu", - "project.page.contributor": "Người tham gia", - "project.page.description": "Mô tả", - "project.page.edit": "Chỉnh sửa tài liệu", - "project.page.expectedcompletion": "Dự kiến hoàn thành", - "project.page.funder": "Nhà tài trợ", - "project.page.id": "ID", - "project.page.keyword": "Từ khóa", - "project.page.status": "Trạng thái", - "project.page.titleprefix": "Dự án nghiên cứu:", - "project.search.results.head": "Kết quả tìm kiếm dự án", - "project-relationships.search.results.head": "Kết quả tìm kiếm dự án", - - "publication.listelement.badge": "Ấn phẩm", - "publication.page.description": "Mô tả", - "publication.page.edit": "Chỉnh sửa tài liệu", - "publication.page.journal-issn": "ISSN tạp chí", - "publication.page.journal-title": "Nhan đề tạp chí", - "publication.page.publisher": "Nhà xuất bản", - "publication.page.titleprefix": "Ấn phẩm: ", - "publication.page.volume-title": "Nhan đề tập", - "publication.search.results.head": "Kết quả tìm kiếm ấn phẩm", - "publication.search.title": "Tìm kiếm ấn phẩm", - "publication-relationships.search.results.head": "Kết quả tìm kiếm ấn phẩm", - - "media-viewer.next": "Tiếp theot", - "media-viewer.playlist": "Danh sách phát", - "media-viewer.previous": "Quay lại", - - "register-email.title": "Đăng ký tài khoản mới", - "register-page.create-profile.header": "Tạo hồ sơ", - "register-page.create-profile.identification.contact": "Điện thoại liên hệ", - "register-page.create-profile.identification.email": "Địa chỉ email", - "register-page.create-profile.identification.first-name": "Tên *", - "register-page.create-profile.identification.first-name.error": "Nhập vào tên của người dùng", - "register-page.create-profile.identification.header": "Hồ sơ định danh", - "register-page.create-profile.identification.language": "Ngôn ngữ", - "register-page.create-profile.identification.last-name": "Họ *", - "register-page.create-profile.identification.last-name.error": "Nhập vào họ của người dùng", - "register-page.create-profile.security.error.empty-password": "Nhập mật khẩu vào ô phía dưới.", - "register-page.create-profile.security.error.matching-passwords": "Mật khẩu không khớp.", - "register-page.create-profile.security.header": "Bảo mật", - "register-page.create-profile.security.info": "Nhập vào mật khẩu mới và xác nhận mật khẩu vào ô phía dưới. Độ dài tối thiểu của mật khẩu là 6 ký tự.", - "register-page.create-profile.security.label.password": "Mật khẩu *", - "register-page.create-profile.security.label.passwordrepeat": "Nhập lại để xác nhận *", - "register-page.create-profile.submit": "Đăng ký thành công", - "register-page.create-profile.submit.error.content": "Đã có sự cố xảy ra khi đăng ký người dùng mới.", - "register-page.create-profile.submit.error.head": "Đăng ký lỗi", - "register-page.create-profile.submit.success.content": "Đăng ký thành công. Bạn đã đăng nhập với tư cách người dùng mới", - "register-page.create-profile.submit.success.head": "Đăng ký thành công", - "register-page.registration.email": "Địa chỉ email *", - "register-page.registration.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", - "register-page.registration.email.error.required": "Vui lòng nhập vào địa chỉ email", - "register-page.registration.email.hint": "Địa chỉ này sẽ được xác minh và dùng làm tên đăng nhập của bạn.", - "register-page.registration.error.content": "Đã xảy ra lỗi khi đăng ký địa chỉ email sau: {{ email }}", - "register-page.registration.error.head": "Lỗi khi đăng ký email", - "register-page.registration.error.recaptcha": "Lỗi khi thực hiện xác minh bằng recaptcha", - "register-page.registration.google-recaptcha.must-accept-cookies": "Để đăng ký bạn phải chấp nhận cookie Đăng ký và khôi phục mật khẩu<\/b> (Google reCaptcha).", - "register-page.registration.google-recaptcha.notification.message.error": "Xác minh đã hết hạn. Vui lòng xác minh lại.", - "register-page.registration.google-recaptcha.notification.message.expired": "Đã xảy ra lỗi trong quá trình xác minh reCaptcha", - "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", - "register-page.registration.google-recaptcha.open-cookie-settings": "Mở phần cài đặt cookie", - "register-page.registration.header": "Đăng ký người dùng mới", - "register-page.registration.info": "Đăng ký tài khoản để nhận cập nhật mới về bộ sưu tập qua email và theo dõi tài liệu mới trên DSpace.", - "register-page.registration.submit": "Đăng ký", - "register-page.registration.success.content": "Một email sẽ được gửi đến địa chỉ email {{ email }} chứa liên kết xác nhận và các hướng dẫn khác.", - "register-page.registration.success.head": "Gửi email xác nhận", - - "relationships.add.error.relationship-type.content": "Không có kết quả nào phù hợp cho kiểu quan hệ {{ type }} giữa hai tài liệu", - "relationships.add.error.server.content": "Máy chủ trả về lỗi", - "relationships.add.error.title": "Không thể thêm mối quan hệ", - "relationships.isAuthorOf": "Tác giả", - "relationships.isAuthorOf.OrgUnit": "Tác giả (tổ chức)", - "relationships.isAuthorOf.Person": "Tác giả (người)", - "relationships.isContributorOf": "Người tham gia", - "relationships.isContributorOf.OrgUnit": "Người tham gia (Tổ chức)", - "relationships.isContributorOf.Person": "Người tham gia", - "relationships.isFundingAgencyOf.OrgUnit": "Nhà tài trợ", - "relationships.isIssueOf": "Số kỳ của tạp chí", - "relationships.isJournalIssueOf": "Số kỳ của tạp chí", - "relationships.isJournalOf": "Tạp chí", - "relationships.isOrgUnitOf": "Đơn vị tổ chức", - "relationships.isPersonOf": "Tác giả", - "relationships.isProjectOf": "Dự án nghiên cứu", - "relationships.isPublicationOf": "Ấn phẩm", - "relationships.isPublicationOfJournalIssue": "Bài báo", - "relationships.isSingleJournalOf": "Tạp chí", - "relationships.isSingleVolumeOf": "Số tập của tạp chí", - "relationships.isVolumeOf": "Số tập của tạp chí", - - "repository.image.logo": "Logo lưu trữ", - "repository.title.prefix": "Digital Library ::", - "repository.title.prefixDSpace": "Digital Library ::", - - "resource-policies.add.button": "Thêm", - "resource-policies.add.for.bitstream": "Thêm chính sách dữ liệu số mới", - "resource-policies.add.for.bundle": "Thêm chính sách gói dữ liệu mới", - "resource-policies.add.for.collection": "Thêm chính sách bộ sưu tập mới", - "resource-policies.add.for.community": "Thêm chính sách đơn vị mới", - "resource-policies.add.for.item": "Thêm chính sách tài liệu mới", - "resource-policies.create.page.failure.content": "Đã có lỗi xảy ra khi tạo chính sách tài nguyên.", - "resource-policies.create.page.heading": "Tạo chính sách tài nguyên mới cho", - "resource-policies.create.page.success.content": "Hành động thành công", - "resource-policies.create.page.title": "Tạp chính sách tài nguyên mới", - "resource-policies.delete.btn": "Xóa lựa chọn", - "resource-policies.delete.btn.title": "Xóa chính sách tài nguyên đã chọn", - "resource-policies.delete.failure.content": "Đã có lỗi xảy ra khi xóa chính sách tài nguyên đã lựa chọn.", - "resource-policies.delete.success.content": "Hành động thành công", - "resource-policies.edit.page.failure.content": "Đã có lỗi xảy ra khi chỉnh sửa chính sách tài nguyên.", - "resource-policies.edit.page.heading": "Chỉnh sửa chính sách tài nguyên", - "resource-policies.edit.page.other-failure.content": "Đã xảy ra lỗi khi chỉnh sửa chính sách phân quyền. Người dùng\/ nhóm người dùng đã được cập nhật thành công.", - "resource-policies.edit.page.success.content": "Hành động thành công", - "resource-policies.edit.page.target-failure.content": "Đã xảy ra lỗi khi chỉnh sửa người dùng\/ nhóm người dùng trong chính sách phân quyền.", - "resource-policies.edit.page.title": "Chỉnh sửa chính sách phân quyền", - "resource-policies.form.action-type.label": "Lựa chọn kiểu hành động", - "resource-policies.form.action-type.required": "Bạn cần phải lựa chọn hành động chính sách phân quyền.", - "resource-policies.form.date.end.label": "Ngày kết thúc", - "resource-policies.form.date.start.label": "Ngày bắt đầu", - "resource-policies.form.description.label": "Mô tả", - "resource-policies.form.eperson-group-list.label": "Người hoặc nhóm người dùng được cấp quyền", - "resource-policies.form.eperson-group-list.modal.close": "Ok", - "resource-policies.form.eperson-group-list.modal.header": "Không thể thay đổi kiểu", - "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Không thể thay thế nhóm người dùng bằng người dùng.", - "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Không thể thay thế người dùng bằng nhóm người dùng.", - "resource-policies.form.eperson-group-list.modal.text2": "Xóa chính sách phân quyền hiện tại và tạo chính sách mới với kiểu mong muốn.", - "resource-policies.form.eperson-group-list.select.btn": "Lựa chọn", - "resource-policies.form.eperson-group-list.tab.eperson": "Tìm kiếm người dùng", - "resource-policies.form.eperson-group-list.tab.group": "Tìm kiếm một nhóm người dùng", - "resource-policies.form.eperson-group-list.table.headers.action": "Hành động", - "resource-policies.form.eperson-group-list.table.headers.id": "ID", - "resource-policies.form.eperson-group-list.table.headers.name": "Tên", - "resource-policies.form.name.label": "Tên", - "resource-policies.form.policy-type.label": "Lựa chọn kiểu chính sách", - "resource-policies.form.policy-type.required": "Bạn cần lựa chọn kiểu chính sách tài nguyên.", - "resource-policies.table.headers.action": "Quyền", - "resource-policies.table.headers.date.end": "Ngày kết thúc", - "resource-policies.table.headers.date.start": "Ngày bắt đầu", - "resource-policies.table.headers.edit": "Chỉnh sửa", - "resource-policies.table.headers.edit.group": "Chỉnh sửa nhóm", - "resource-policies.table.headers.edit.policy": "Chỉnh sửa chính sách", - "resource-policies.table.headers.eperson": "Người dùng", - "resource-policies.table.headers.group": "Nhóm", - "resource-policies.table.headers.id": "ID", - "resource-policies.table.headers.name": "Tên", - "resource-policies.table.headers.policyType": "kiểu", - "resource-policies.table.headers.title.for.bitstream": "Chính sách tệp dữ liệu số", - "resource-policies.table.headers.title.for.bundle": "Chính sách gói dữ liệu số", - "resource-policies.table.headers.title.for.collection": "Chính sách bộ sưu tập", - "resource-policies.table.headers.title.for.community": "Chính sách đơn vị", - "resource-policies.table.headers.title.for.item": "Chính sách tài liệu", - "resource-policies.table.headers.title.for.topic": "Chính sách topic", - - "search.breadcrumbs": "Tìm kiếm", - "search.browse.item-back": "Quay lại kết quả tìm kiếm", - "search.filters.applied.f.author": "Tác giả", - "search.filters.applied.f.birthDate.max": "Ngày sinh kết thúc", - "search.filters.applied.f.birthDate.min": "Ngày sinh bắt đầu", - "search.filters.applied.f.dateIssued.max": "Ngày kết thúc", - "search.filters.applied.f.dateIssued.min": "Ngày bắt đầu", - "search.filters.applied.f.dateSubmitted": "Ngày đăng", - "search.filters.applied.f.discoverable": "Tài liệu cá nhân", - "search.filters.applied.f.entityType": "Kiểu tài liệu", - "search.filters.applied.f.has_content_in_original_bundle": "Có tệp", - "search.filters.applied.f.itemtype": "Kiểu", - "search.filters.applied.f.jobTitle": "Chức danh", - "search.filters.applied.f.namedresourcetype": "Trạng thái", - "search.filters.applied.f.subject": "Chủ đề", - "search.filters.applied.f.submitter": "Người gửi", - "search.filters.applied.f.withdrawn": "Tài liệu ẩn", - "search.filters.discoverable.false": "Có", - "search.filters.discoverable.true": "Không", - "search.filters.entityType.JournalIssue": "Kỳ của tạp chí", - "search.filters.entityType.JournalVolume": "Số tập cảu tạp chí", - "search.filters.entityType.OrgUnit": "Đơn vị tổ chức", - "search.filters.filter.author.head": "Tác giả", - "search.filters.filter.author.label": "Tìm kiếm tên tác giả", - "search.filters.filter.author.placeholder": "Tên tác giả", - "search.filters.filter.birthDate.head": "Ngày sinh", - "search.filters.filter.birthDate.label": "Tìm kiếm ngày sinh", - "search.filters.filter.birthDate.placeholder": "Ngày sinh", - "search.filters.filter.collapse": "Thu hẹp bộ lọc", - "search.filters.filter.creativeDatePublished.head": "Ngày xuất bản", - "search.filters.filter.creativeDatePublished.label": "Tìm kiếm ngày xuất bản", - "search.filters.filter.creativeDatePublished.placeholder": "Ngày xuất bản", - "search.filters.filter.creativeWorkEditor.head": "Người biên tập", - "search.filters.filter.creativeWorkEditor.label": "Tìm kiếm người biên tập", - "search.filters.filter.creativeWorkEditor.placeholder": "Người biên tập", - "search.filters.filter.creativeWorkKeywords.head": "Chủ đề", - "search.filters.filter.creativeWorkKeywords.label": "Tìm kiếm chủ đề", - "search.filters.filter.creativeWorkKeywords.placeholder": "Chủ đề", - "search.filters.filter.creativeWorkPublisher.head": "Nhà xuất bản", - "search.filters.filter.creativeWorkPublisher.label": "Tìm kiếm nhà xuất bản", - "search.filters.filter.creativeWorkPublisher.placeholder": "Nhà xuất bản", - "search.filters.filter.dateIssued.head": "Thời gian xuất bản", - "search.filters.filter.dateIssued.max.label": "Kết thúc", - "search.filters.filter.dateIssued.max.placeholder": "Thời gian tối đa", - "search.filters.filter.dateIssued.min.label": "Bắt đầu", - "search.filters.filter.dateIssued.min.placeholder": "Thời gian tối thiểu", - "search.filters.filter.dateSubmitted.head": "Ngày gửi", - "search.filters.filter.dateSubmitted.label": "Tìm kiếm ngày gửi", - "search.filters.filter.dateSubmitted.placeholder": "Ngày gửi", - "search.filters.filter.discoverable.head": "Tài liệu cá nhân", - "search.filters.filter.entityType.head": "Kiểu thực thể", - "search.filters.filter.entityType.label": "Tìm kiếm kiểu thực thể", - "search.filters.filter.entityType.placeholder": "Kiểu thực thể", - "search.filters.filter.expand": "Mở rộng bộ lọc", - "search.filters.filter.has_content_in_original_bundle.head": "Có tệp", - "search.filters.filter.itemtype.head": "Kiểu tài liệu", - "search.filters.filter.itemtype.label": "Tìm kiếm kiểu tài liệu", - "search.filters.filter.itemtype.placeholder": "Kiểu tài liệu", - "search.filters.filter.jobTitle.head": "Chức danh", - "search.filters.filter.jobTitle.label": "Tìm kiếm chức danh", - "search.filters.filter.jobTitle.placeholder": "Chức danh", - "search.filters.filter.knowsLanguage.head": "Ngôn ngữ", - "search.filters.filter.knowsLanguage.label": "Tìm kiếm ngôn ngữ", - "search.filters.filter.knowsLanguage.placeholder": "Ngôn ngữ", - "search.filters.filter.namedresourcetype.head": "Trạng thái", - "search.filters.filter.namedresourcetype.label": "Tìm kiếm trạng thái", - "search.filters.filter.namedresourcetype.placeholder": "Trạng thái", - "search.filters.filter.objectpeople.head": "Người", - "search.filters.filter.objectpeople.label": "Tìm kiếm tên người", - "search.filters.filter.objectpeople.placeholder": "Người", - "search.filters.filter.organizationAddressCountry.head": "Quốc gia", - "search.filters.filter.organizationAddressCountry.label": "Tìm kiếm quốc gia", - "search.filters.filter.organizationAddressCountry.placeholder": "Quốc gia", - "search.filters.filter.organizationAddressLocality.head": "Thành phố", - "search.filters.filter.organizationAddressLocality.label": "Tìm kiếm thành phố", - "search.filters.filter.organizationAddressLocality.placeholder": "Thành phố", - "search.filters.filter.organizationFoundingDate.head": "Ngày thành lập", - "search.filters.filter.organizationFoundingDate.label": "Tìm kiếm ngày thành lập", - "search.filters.filter.organizationFoundingDate.placeholder": "Ngày thành lập", - "search.filters.filter.scope.head": "Phạm vi", - "search.filters.filter.scope.label": "Tìm kiếm phạm vi giới hạn", - "search.filters.filter.scope.placeholder": "phạm vi giới hạn", - "search.filters.filter.show-less": "Thu hẹp", - "search.filters.filter.show-more": "Xem thêm", - "search.filters.filter.show-tree": "Duyệt cây {{ name }}", - "search.filters.filter.subject.head": "Chủ đề", - "search.filters.filter.subject.label": "Tìm kiếm chủ đề", - "search.filters.filter.subject.placeholder": "Chủ đề", - "search.filters.filter.submitter.head": "Người gửi", - "search.filters.filter.submitter.label": "Tìm kiếm người gửi", - "search.filters.filter.submitter.placeholder": "Người gửi", - "search.filters.filter.withdrawn.head": "Tài liệu ẩn", - "search.filters.has_content_in_original_bundle.false": "Không", - "search.filters.has_content_in_original_bundle.true": "Có", - "search.filters.head": "Bộ lọc", - "search.filters.reset": "Làm mới bộ lọc", - "search.filters.search.submit": "Xác nhận", - "search.filters.withdrawn.false": "Không", - "search.filters.withdrawn.true": "Có", - "search.form.scope.all": "Toàn bộ thư viện", - "search.form.search": "Tìm kiếm", - "search.form.search_dspace": "tất cả kho lưu trữ", - "search.results.empty": "Tìm kiếm của bạn không trả về kết quả.", - "search.results.head": "Kết quả tìm kiếm", - "search.results.no-results": "Tìm kiếm của bạn không trả về kết quả. Bạn có gặp khó khăn khi thực hiện tìm kiếm? Hãy thử lại bằng cách", - "search.results.no-results-link": "đặt từ khóa tìm vào trong cặp dấu ngoặc kép", - "search.results.response.500": "Đã xảy ra lỗi trong khi thực hiện truy vấn vui lòng thử lại sau", - "search.results.view-result": "Xem", - "search.search-form.placeholder": "Từ khóa tìm kiếm", - "search.sidebar.close": "Quay lại kết quả tìm kiếm", - "search.sidebar.filters.title": "Bộ lọc", - "search.sidebar.open": "Công cụ tìm kiếm", - "search.sidebar.results": "kết quả", - "search.sidebar.settings.rpp": "Kết quả mỗi trang", - "search.sidebar.settings.sort-by": "Sắp xếp theo", - "search.sidebar.settings.title": "Cài đặt", - "search.switch-configuration.title": "Xem", - "search.title": "Tìm kiếm", - "search.view-switch.show-detail": "Xem chi tiết", - "search.view-switch.show-grid": "Hiển thị dưới dạng lưới", - "search.view-switch.show-list": "Hiển thị dưới dạng danh sách", - - "sorting.ASC": "Tăng dần", - "sorting.dc.date.accessioned.ASC": "Tăng dần theo ngày lưu trữ", - "sorting.dc.date.accessioned.DESC": "Giảm dần theo ngày lưu trữ", - "sorting.dc.date.issued.ASC": "Tăng dần theo ngày", - "sorting.dc.date.issued.DESC": "Giảm dần theo ngày", - "sorting.dc.title.ASC": "Tăng dần theo nhan đề", - "sorting.dc.title.DESC": "Giảm dần theo nhan đề", - "sorting.DESC": "Giảm dần", - "sorting.lastModified.ASC": "Tăng dần theo lần chỉnh sửa cuối cùng", - "sorting.lastModified.DESC": "Giảm dần theo lần chỉnh sửa cuối cùng", - "sorting.score.ASC": "Liên quan ít nhất", - "sorting.score.DESC": "Liên quan nhiều nhất", - - "statistics.breadcrumbs": "Thống kê", - "statistics.header": "Thống kê theo {{ scope }}", - "statistics.page.no-data": "Không có dữ liệu", - "statistics.table.header.views": "Xem", - "statistics.table.no-data": "Không có dữ liệu", - "statistics.table.title.TopCities": "Top thành phố xem nhiều nhất", - "statistics.table.title.TopCountries": "Top quốc gia xem nhiều nhất", - "statistics.table.title.TotalDownloads": "Truy cập tệp", - "statistics.table.title.TotalVisits": "Tổng số truy cập", - "statistics.table.title.TotalVisitsPerMonth": "Tổng số lượt truy cập theo từng tháng", - "statistics.title": "Thống kê", - - - "submission.edit.breadcrumbs": "Chỉnh sửa đăng ký", - "submission.edit.title": "Chỉnh sửa đăng ký", - "submission.general.cancel": "Hủy", - "submission.general.cannot_submit": "Bạn không có quyền chỉnh sửa đăng ký đã gửi .", - "submission.general.deposit": "Tải lên", - "submission.general.discard.confirm.cancel": "Hủy", - "submission.general.discard.confirm.info": "Không thể hoàn tác thao tác. Bạn có chắc chắn không?", - "submission.general.discard.confirm.submit": "Có tôi đồng ý", - "submission.general.discard.confirm.title": "Hủy đăng ký", - "submission.general.discard.submit": "Hủy", - "submission.general.info.pending-changes": "Thay đổi chưa được lưu", - "submission.general.info.saved": "Lưu", - "submission.general.save": "Lưu", - "submission.general.save-later": "Lưu lại", - "submission.import-external.back-to-my-dspace": "Trở lại thư viện số", - "submission.import-external.page.hint": "Nhập vào một truy vấn phía trên để tìm các tài liệu trên trang web để nhập vào thư viện số", - "submission.import-external.page.title": "Nhập thông tin mô tả từ nguồn bên ngoài", - "submission.import-external.preview.button.import": "Bắt đầu gửi", - "submission.import-external.preview.error.import.body": "Đã xảy ra lỗi trong quá trình nhập tài liệu từ nguồn bên ngoài", - "submission.import-external.preview.error.import.title": "Lỗi gửi đi", - "submission.import-external.preview.subtitle": "Siêu dữ liệu bên dưới được nhập từ nguồn bên ngoài. Nó sẽ được điền vào trước khi bạn gửi đi.", - "submission.import-external.preview.title": "Xem trước tài liệu", - "submission.import-external.preview.title.Journal": "Xem trước Tạp chí", - "submission.import-external.preview.title.none": "Xem trước tài liệu", - "submission.import-external.preview.title.OrgUnit": "Xem trước tổ chức", - "submission.import-external.preview.title.Person": "Xem trước Tác giả\/nhà nghiên cứu", - "submission.import-external.preview.title.Project": "Xem trước dự án", - "submission.import-external.preview.title.Publication": "Xem trước ấn phẩm", - "submission.import-external.search.button": "Tìm kiếm", - "submission.import-external.search.button.hint": "Nhập một từ để tìm kiếm", - "submission.import-external.search.placeholder": "Tìm kiếm nguồn bên ngoài", - "submission.import-external.search.source.hint": "Chọn một nguồn bên ngoài", - "submission.import-external.source.ads": "NASA\/ADS", - "submission.import-external.source.arxiv": "arXiv", - "submission.import-external.source.cinii": "CiNii", - "submission.import-external.source.crossref": "CrossRef", - "submission.import-external.source.datacite": "submission.import-external.source.datacite", - "submission.import-external.source.epo": "Văn phòng Bằng sáng chế Châu Âu (EPO)", - "submission.import-external.source.lcname": "Tên Thư viện Quốc hội", - "submission.import-external.source.loading": "Đang tải lên ...", - "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", - "submission.import-external.source.orcid": "ORCID", - "submission.import-external.source.orcidWorks": "ORCID", - "submission.import-external.source.pubmed": "Pubmed", - "submission.import-external.source.pubmedeu": "Pubmed Europe", - "submission.import-external.source.scielo": "SciELO", - "submission.import-external.source.scopus": "SciELO", - "submission.import-external.source.sherpaJournal": "Tạp chí SHERPA", - "submission.import-external.source.sherpaJournalIssn": "Số ISSN của tạp chí SHERPA", - "submission.import-external.source.sherpaPublisher": "Nhà xuất bản SHERPA", - "submission.import-external.source.vufind": "VuFind", - "submission.import-external.source.wos": "Web Of Science", - "submission.import-external.title": "Nhập thông tin mô tả từ nguồn bên ngoài", - "submission.import-external.title.Journal": "Nhập tạp chí từ nguồn bên ngoài", - "submission.import-external.title.JournalIssue": "Nhập kỳ ấn phẩm tạp chí từ nguồn bên ngoài", - "submission.import-external.title.JournalVolume": "Nhập một tập của tạp chí từ nguồn bên ngoài", - "submission.import-external.title.none": "Nhập thông tin mô tả từ nguồn bên ngoài", - "submission.import-external.title.OrgUnit": "Nhập nhà xuất bản từ nguồn bên ngoài", - "submission.import-external.title.Person": "Nhập một tác giả\/ nhà nghiên cứu từ nguồn bên ngoài", - "submission.import-external.title.Project": "Nhập một dự án từ nguồn bên ngoài", - "submission.import-external.title.Publication": "Nhập một ấn phẩm từ nguồn bên ngoài", - "submission.sections.accesses.form.access-condition-hint": "Chọn chính sách phân quyền để áp dụng cho biểu ghi khi nó được nhập vào hệ thống.", - "submission.sections.accesses.form.access-condition-label": "Loại chính sách truy cập", - "submission.sections.accesses.form.date-required": "Thông tin thời gian là bắt buộc.", - "submission.sections.accesses.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", - "submission.sections.accesses.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", - "submission.sections.accesses.form.discoverable-description": "Khi được chọn biểu ghi này sẽ có thể được tìm thấy trong các chức năng tìm kiếm\/duyệt. Khi bỏ chọn biểu ghi sẽ chỉ có sẵn qua đường dẫn trực tiếp và sẽ không bao giờ xuất hiện trong tìm kiếm\/duyệt.", - "submission.sections.accesses.form.discoverable-label": "Có thể khám phá", - "submission.sections.accesses.form.from-hint": "Chọn ngày mà quyền được áp dụng", - "submission.sections.accesses.form.from-label": "Cấp quyền truy cập từ", - "submission.sections.accesses.form.from-placeholder": "Từ", - "submission.sections.accesses.form.group-label": "Nhóm", - "submission.sections.accesses.form.group-required": "Trường Nhóm là bắt buộc.", - "submission.sections.accesses.form.until-hint": "Chọn ngày mà quyền được áp dụng", - "submission.sections.accesses.form.until-label": "Cấp quyền truy cập cho đến khi", - "submission.sections.accesses.form.until-placeholder": "Cho tới khi", - "submission.sections.ccLicense.change": "Thay đổi loại giấy phép…", - "submission.sections.ccLicense.confirmation": "Tôi đồng ý với giấy phép ở trên", - "submission.sections.ccLicense.link": "Bạn có lựa chọn theo giấy phép này:", - "submission.sections.ccLicense.none": "Không có giấy phép nào", - "submission.sections.ccLicense.option.select": "Lựa chọn tùy chọn…", - "submission.sections.ccLicense.select": "Lựa chọn loại giấy phép…", - "submission.sections.ccLicense.type": "Loại giấy phép", - "submission.sections.describe.relationship-lookup.close": "Đóng", - "submission.sections.describe.relationship-lookup.external-source.added": "Thêm thành công tài liệu nội bộ vào mục đã chọn", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Nhập thiết bị từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Nhập sự kiện từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Nhập sự kiện từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Nhập tác giả từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Dự án", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Nhập tạp chí từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.JournalIssue": "Nhập số kỳ của tạp chí từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.JournalVolume": "Nhập số tập của tạp chí từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Nhập tài liệu từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Nhập tổ chức từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Nhập bằng sáng chế từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Nhập dự án từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Nhập ấn phẩm từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Kiểm soát", - "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Nhập dưới dạng một kiểm soát nội bộ mới", - "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Hủy", - "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Chọn một bộ sưu tập để thêm các tài liệu mới", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Thực thể", - "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Nhập vào một thực thể nội bộ mới", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Nhập từ arXiv", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Nhập từ tên LC", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Nhập từ ORCID", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Nhập từ PubMed", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Nhập từ tạp chí Sherpa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Nhập từ nhà xuất bản Sherpa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Nhập liệu", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Thêm thành công tác giả nội bộ bộ vào mục đã chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Nhập thành công và thêm tác giả bên ngoài vào mục đã chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Nhập tác giả từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Thực thể mới đã được thêm!", - "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Dự án", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Thêm thành công tạp chí đã chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Nhập thành công tạp chí bên ngoài vào mục lựa chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Nhập tạp chí từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.added.local-entity": "Thêm thành công số kỳ tạp chí nội bộ vào mục lựa chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.added.new-entity": "Nhập thành công và thêm số kỳ của tạp chí bên ngoài vào mục lựa chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.title": "Nhập số kỳ của tạp chí từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.added.local-entity": "Thêm thành công số tập của tạp chí nội bộ vào mục lựa chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.added.new-entity": "Nhập và thêm thành công số tập của tạp chí bên ngoài vào mục lựa chọn", - "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.title": "Nhập số tập của tạp chí từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Chọn một phù hợp:", - "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Lưu một biến thể tên mới", - "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Bạn có muốn lưu \"{{ value }}\" làm tên biến thể cho người này để bạn và những người khác có thể sử dụng lại cho những lần gửi sau không? Nếu không bạn vẫn có thể sử dụng cho lần gửi này\"", - "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Chỉ sử dụng cho lần gửi này", - "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Bỏ chọn tất cả", - "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Bỏ chọn trang", - "submission.sections.describe.relationship-lookup.search-tab.loading": "Đang tải...", - "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Tìm kiếm truy vấn", - "submission.sections.describe.relationship-lookup.search-tab.search": "Đi", - "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Tìm kiếm...", - "submission.sections.describe.relationship-lookup.search-tab.select-all": "Lựa chọn tất cả", - "submission.sections.describe.relationship-lookup.search-tab.select-page": "Lựa chọn trang", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Tệp dữ liệu nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Gói dữ liệu nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Tác giả nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Tìm kiếm đơn vị tổ chức", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Nhà tài trợ của dự án", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Tìm kiếm cơ quan cấp vốn", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Tìm kiếm tài trợ", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Số kỳ của tạp chí nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Tạp chí nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Số tập của tạp chí nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Dự án", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Ấn phẩm của tác giả", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Tạp chí nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Số kỳ của tạp chsi nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Số tập của tạp chí nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Tên LC ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Đơn vị tổ chức nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Tác giả nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Dự án nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Ấn phẩm nội bộ ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Tạp chí Sherpa ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Nhà xuất bản Sherpa ({{ count }})", - "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Chuyển đổi danh mục thả xuống", - "submission.sections.describe.relationship-lookup.selected": "Lựa chọn {{ size }} tài liệu", - "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Lựa chọn cảu bạn hiện đang trống.", - "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Tìm kiếm...", - "submission.sections.describe.relationship-lookup.selection-tab.settings": "Cài đặt", - "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Lựa chọn hiện tại ({{ count }})", - "submission.sections.describe.relationship-lookup.selection-tab.title": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Lựa chọn tệp dữ liệu", - "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Lựa chọn gói dữ liệu", - "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Lựa chọn tác giả.", - "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Lựa chọn đơn vị tổ chức", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Lựa chọn đơn vị tổ chức", - "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Lựa chọn tài trợ", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Lựa chọn kỳ của tạp chí", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Lựa chọn tạp chí", - "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Lựa chọn số tập của tạp chí", - "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Dự án", - "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Lựa chọn tạp chí", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Lựa chọn số kỳ của tạp chí", - "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Lựa chọn số tập của tạp chí", - "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Lựa chọn đơn vị tổ chức", - "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Lựa chọn tác giả", - "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Lựa chọn dự án", - "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Lựa chọn ấn phẩm", - "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Lựa chọn kết quả", - "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Kết quả tìm kiếm", - "submission.sections.describe.relationship-lookup.title.DataFile": "Tệp dữ liệu", - "submission.sections.describe.relationship-lookup.title.DataPackage": "Gói dữ liệu", - "submission.sections.describe.relationship-lookup.title.FundingAgency": "Đơn vị tài trợ", - "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Tác giả", - "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Đơn vị tổ chức chính", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Nhà tài trợ của dự án", - "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Đơn vị tài trợ", - "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Tài trợ", - "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Số kỳ của tạp chí", - "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Tạp chí", - "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Số tập cảu tạp chí", - "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Dự án", - "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Ấn phẩm", - "submission.sections.describe.relationship-lookup.title.JournalIssue": "Số kỳ của tạp chí", - "submission.sections.describe.relationship-lookup.title.JournalVolume": "Số tập của tạp chí", - "submission.sections.describe.relationship-lookup.title.OrgUnit": "Đơn vị tổ chức", - "submission.sections.describe.relationship-lookup.title.Person": "Tác giả", - "submission.sections.describe.relationship-lookup.title.Project": "Dự án", - "submission.sections.describe.relationship-lookup.title.Publication": "Ấn phẩm", - "submission.sections.general.add-more": "Thêm nhiều hơn", - "submission.sections.general.cannot_deposit": "Không thể hoàn tất quá trình nhập dữ liệu do lỗi trong biểu mẫu.
    Vui lòng điền vào tất cả các trường bắt buộc để hoàn tất quá trình nhập liệu.", - "submission.sections.general.collection": "Bộ sưu tập", - "submission.sections.general.deposit_error_notice": "Đã xảy ra sự cố khi gửi tài liệu vui lòng thử lại sau.", - "submission.sections.general.deposit_success_notice": "Đã gửi thành công.", - "submission.sections.general.discard_error_notice": "Đã xảy ra sự cố khi hủy tài liệu vui lòng thử lại sau.", - "submission.sections.general.discard_success_notice": "Đã hủy thành công.", - "submission.sections.general.metadata-extracted": "Siêu dữ liệu mới đã được trích xuất và thêm vào phần {{sectionId}} phần.", - "submission.sections.general.metadata-extracted-new-section": " {{sectionId}} mới phần đã được thêm vào thông tin gửi đi.", - "submission.sections.general.no-collection": "Không tìm thấy bộ sưu tập", - "submission.sections.general.no-sections": "Không có tùy chọn", - "submission.sections.general.save_error_notice": "Đã xảy ra sự cố khi lưu tài liệu vui lòng thử lại sau.", - "submission.sections.general.save_success_notice": "Lưu thành công.", - "submission.sections.general.search-collection": "Tìm kiếm bộ sưu tập", - "submission.sections.general.sections_not_valid": "Không có phần nào hoàn thành.", - "submission.sections.license.granted-label": "Xác nhận giấy phép", - "submission.sections.license.notgranted": "Bạn phải chấp nhận giấy phép", - "submission.sections.license.required": "Bạn phải chấp nhận giấy phép", - "submission.sections.sherpa.error.message": "Đã xảy ra lỗi trong quá trình truy xuất thông tin", - "submission.sections.sherpa.publication.information": "Thông tin ấn phẩm", - "submission.sections.sherpa.publication.information.issns": "ISSNs", - "submission.sections.sherpa.publication.information.publishers": "Nhà xuất bản", - "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", - "submission.sections.sherpa.publication.information.title": "Nhan đề", - "submission.sections.sherpa.publication.information.url": "URL", - "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", - "submission.sections.sherpa.publisher.policy": "Chính sách của nhà xuất bản", - "submission.sections.sherpa.publisher.policy.conditions": "Điều kiện", - "submission.sections.sherpa.publisher.policy.description": "Thông tin dưới đây được tìm thấy thông qua Sherpa Romeo. Dựa trên các chính sách của nhà xuất bản của bạn hệ thống sẽ đưa ra lời khuyên về việc có cần thiết phải hạn chế hay không và\/hoặc những tệp nào mà bạn được phép tải lên. Nếu bạn có thắc mắc vui lòng liên hệ với quản trị viên.", - "submission.sections.sherpa.publisher.policy.embargo": "Hạn chế", - "submission.sections.sherpa.publisher.policy.license": "Bản quyền", - "submission.sections.sherpa.publisher.policy.location": "Vị trí", - "submission.sections.sherpa.publisher.policy.more.information": "Để biết thêm thông tin vui lòng xem đường dẫn dưới đây:", - "submission.sections.sherpa.publisher.policy.noembargo": "Không hạn chế", - "submission.sections.sherpa.publisher.policy.nolocation": "Trống", - "submission.sections.sherpa.publisher.policy.openaccess": "Các đường dẫn truy cập mở được cho phép bởi chính sách của tạp chí này được liệt kê bên dưới theo phiên bản bài viết. Nhấp vào một đường dẫn để xem chi tiết", - "submission.sections.sherpa.publisher.policy.prerequisites": "Điều kiện cần", - "submission.sections.sherpa.publisher.policy.refresh": "Làm mới", - "submission.sections.sherpa.publisher.policy.version": "Phiên bản", - "submission.sections.sherpa.record.information": "Thông tin biểu ghi", - "submission.sections.sherpa.record.information.date.created": "Ngày tạo", - "submission.sections.sherpa.record.information.date.modified": "Lần chỉnh sửa gần nhất", - "submission.sections.sherpa.record.information.id": "ID", - "submission.sections.sherpa.record.information.uri": "URL", - "submission.sections.sherpa-policy.title-empty": "Không có chính sách của nhà xuất bản. Nếu tác phẩm của bạn có ISSN liên quan vui lòng nhập nó ở trên để xem các chính sách truy cập mở của nhà xuất bản (nếu có)", - "submission.sections.status.errors.aria": "có lỗi", - "submission.sections.status.errors.title": "Lỗi", - "submission.sections.status.info.aria": "Thông tin bổ sung", - "submission.sections.status.info.title": "Thông tin bổ sung", - "submission.sections.status.valid.aria": "là hợp lệ", - "submission.sections.status.valid.title": "Hợp lệ", - "submission.sections.status.warnings.aria": "có cảnh báo", - "submission.sections.status.warnings.title": "Cảnh báo", - "submission.sections.submit.progressbar.accessCondition": "Điều kiện truy cập biểu ghi", - "submission.sections.submit.progressbar.CClicense": "Bằng sáng chế", - "submission.sections.submit.progressbar.describe.recycle": "Tái chế", - "submission.sections.submit.progressbar.describe.stepcustom": "Mô tả", - "submission.sections.submit.progressbar.describe.stepone": "Mô tả", - "submission.sections.submit.progressbar.describe.steptwo": "Mô tả", - "submission.sections.submit.progressbar.detect-duplicate": "Các trùng lặp xảy ra", - "submission.sections.submit.progressbar.license": "Giấy phép tiền gửi", - "submission.sections.submit.progressbar.sherpaPolicies": "Chính sách truy cập mở của nhà xuất bản", - "submission.sections.submit.progressbar.sherpapolicy": "Chính sách", - "submission.sections.submit.progressbar.upload": "Tải tệp lên", - "submission.sections.toggle.aria.close": "Thu hẹp phần {{sectionHeader}}", - "submission.sections.toggle.aria.open": "Mở rộng phần {{sectionHeader}}", - "submission.sections.toggle.close": "Đóng phiên", - "submission.sections.toggle.open": "Mở phiên mới", - "submission.sections.upload.delete.confirm.cancel": "Hủy", - "submission.sections.upload.delete.confirm.info": "Không thể hoàn tác thao tác này. Bạn có chắc không?", - "submission.sections.upload.delete.confirm.submit": "Có tôi chắc chắn", - "submission.sections.upload.delete.confirm.title": "Xóa dữ liệu số", - "submission.sections.upload.delete.submit": "Xóa", - "submission.sections.upload.download.title": "Tải dữ liệu số", - "submission.sections.upload.drop-message": "Kéo tệp đính kèm vào tài liệu", - "submission.sections.upload.edit.title": "Chỉnh sửa dữ liệu số", - "submission.sections.upload.form.access-condition-hint": "Chọn quyền truy cập áp dụng trên tệp tin khi biểu ghi được biên mục vào hệ thống.", - "submission.sections.upload.form.access-condition-label": "Loại điều kiện truy cập", - "submission.sections.upload.form.date-required": "Ngày yêu cầu", - "submission.sections.upload.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", - "submission.sections.upload.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày kết thúc cấp quyền truy cập", - "submission.sections.upload.form.from-hint": "Chọn ngày mà quyền được áp dụng", - "submission.sections.upload.form.from-label": "Cấp quyền truy cập từ", - "submission.sections.upload.form.from-placeholder": "Từ", - "submission.sections.upload.form.group-label": "Nhóm", - "submission.sections.upload.form.group-required": "Nhóm yêu cầu.", - "submission.sections.upload.form.until-hint": "Chọn ngày hết hạn quyền truy cập", - "submission.sections.upload.form.until-label": "Cấp quyền truy cập cho đến khi", - "submission.sections.upload.form.until-placeholder": "Đến khi", - "submission.sections.upload.header.policy.default.nolist": "Các tệp tải lên trong bộ sưu tập {{collectionName}} sẽ cso quyền truy cập thep các nhóm sau:", - "submission.sections.upload.header.policy.default.withlist": "Xin lưu ý rằng các tệp đã tải lên trong bộ sưu tập {{collectionName}} sẽ có thể truy cập được ngoài những gì được quyết định rõ ràng cho một tệp với (các) nhóm sau:", - "submission.sections.upload.info": "Tại đây bạn sẽ tìm thấy tất cả các tệp hiện có trong tài liệu. Bạn có thể cập nhật thông tin mô tả tệp và điều kiện truy cập hoặc tải lên tệp bổ sung chỉ cần kéo và thả chúng ở mọi nơi trong trang", - "submission.sections.upload.no-entry": "Không", - "submission.sections.upload.no-file-uploaded": "Không có tệp tải lên.", - "submission.sections.upload.save-metadata": "Lưu thông tin mô tả", - "submission.sections.upload.undo": "Hủy", - "submission.sections.upload.upload-failed": "Tải lên lỗi", - "submission.sections.upload.upload-successful": "Tải lên thành công", - "submission.submit.breadcrumbs": "Gửi mới", - "submission.submit.title": "Gửi mới", - "submission.workflow.generic.delete": "Xóa", - "submission.workflow.generic.delete-help": "Nếu bạn muốn hủy tài liệu này hãy chọn \"Delete\". Sau đó bạn sẽ được yêu cầu xác nhận.\"", - "submission.workflow.generic.edit": "Chỉnh sửa", - "submission.workflow.generic.edit-help": "Chọn tùy chọn này để thay đổi thông tin mô tả của tài liệu.", - "submission.workflow.generic.view": "Xem", - "submission.workflow.generic.view-help": "Chọn tùy chọn này để xem dữ liệu cảu tài liệu.", - "submission.workflow.tasks.claimed.approve": "Chấp nhận", - "submission.workflow.tasks.claimed.approve_help": "Nếu bạn đã xem xét tài liệu và thấy phù hợp để đưa vào bộ sưu tập hãy chọn \"Approve\".", - "submission.workflow.tasks.claimed.edit": "Chỉnh sửa", - "submission.workflow.tasks.claimed.edit_help": "Chọn tùy chọn này để thay đổi thông tin mô tả của tài liệu.", - "submission.workflow.tasks.claimed.reject.reason.info": "Vui lòng nhập lý do từ chối gửi của bạn vào ô bên dưới cho biết liệu người gửi có thể khắc phục sự cố và gửi lại hay không.", - "submission.workflow.tasks.claimed.reject.reason.placeholder": "Mô tả lý do từ chối", - "submission.workflow.tasks.claimed.reject.reason.submit": "Từ chối tài liệu", - "submission.workflow.tasks.claimed.reject.reason.title": "Lý do", - "submission.workflow.tasks.claimed.reject.submit": "Từ chối", - "submission.workflow.tasks.claimed.reject_help": "Nếu bạn đã xem xét tài liệu và thấy không phù hợp để đưa vào bộ sưu tập hãy chọn \"Reject\". Sau đó bạn sẽ được yêu cầu nhập một thông báo cho biết lý do tại sao tài liệu đó không phù hợp và liệu người gửi có nên thay đổi điều gì đó và gửi lại hay không.", - "submission.workflow.tasks.claimed.return": "Trả lại nhiệm vụ", - "submission.workflow.tasks.claimed.return_help": "Trả tác vụ về nhóm để người dùng khác có thể thực hiện tác vụ.", - "submission.workflow.tasks.generic.error": "Đã xảy ra lỗi trong khi vận hành ...", - "submission.workflow.tasks.generic.processing": "Đang xử lý...", - "submission.workflow.tasks.generic.submitter": "Người gửi", - "submission.workflow.tasks.generic.success": "Hoạt động thành công", - "submission.workflow.tasks.pool.claim": "Nhận nhiệm vụ", - "submission.workflow.tasks.pool.claim_help": "Giao nhiệm vụ này cho chính bạn.", - "submission.workflow.tasks.pool.hide-detail": "Ẩn chi tiết", - "submission.workflow.tasks.pool.show-detail": "Xem chi tiết", - "submission.workspace.generic.view": "Xem", - "submission.workspace.generic.view-help": "Chọn tủy chọn để xem thông tin mô tả của tài liệu", - - "thumbnail.default.alt": "Hình ảnh thu nhỏ", - "thumbnail.default.placeholder": "Không có ảnh thu nhỏ nào", - "thumbnail.orgunit.alt": "Logo Đơn vị tổ chức", - "thumbnail.orgunit.placeholder": "Hỉnh ảnh giữ chỗ của đơn vị tổ chức", - "thumbnail.person.alt": "Ảnh hồ sơ", - "thumbnail.person.placeholder": "Không có ảnh hồ sơ nào", - "thumbnail.project.alt": "Logo dự án", - "thumbnail.project.placeholder": "Hình ảnh giữ chỗ của dự án", - - "title": "DSpace", - - "vocabulary-treeview.header": "Chế độ xem phân cấp", - "vocabulary-treeview.info": "Chọn một chủ đề để thêm làm bộ lọc tìm kiếm", - "vocabulary-treeview.load-more": "Xem thêm", - "vocabulary-treeview.search.form.reset": "Khôi phục", - "vocabulary-treeview.search.form.search": "Tìm kiếm", - "vocabulary-treeview.search.no-result": "Không có tài liệu nào hiển thị", - "vocabulary-treeview.tree.description.nsi": "Chỉ số Norwegian Science", - "vocabulary-treeview.tree.description.srsc": "Danh mục chủ đề", - - "uploader.browse": "duyệt", - "uploader.delete.btn-title": "Xóa", - "uploader.drag-message": "Kéo & thả tệp tại đây", - "uploader.processing": "Đang xử lý", - "uploader.queue-length": "Chiều dài hàng đợi", - - "virtual-metadata.delete-item.info": "Chọn kiểu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", - "virtual-metadata.delete-item.modal-head": "Siêu dữ liệu ảo của mối quan hệ này", - "virtual-metadata.delete-relationship.modal-head": "Chọn các tài liệu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", - - "supervisedWorkspace.search.results.head": "Supervised Items", - - - "workflow.search.results.head": "Tất cả nhiệm vụ", - "workflowAdmin.search.results.head": "Tiến trình làm việc của quản trị viên", - "workflow-item.delete.button.cancel": "Hủy", - "workflow-item.delete.button.confirm": "Xóa", - "workflow-item.delete.header": "Xóa tiến trình tài liệu", - "workflow-item.delete.notification.error.content": "Không thể xóa tiến trình tài liệu", - "workflow-item.delete.notification.error.title": "Đã xảy ra lỗi", - "workflow-item.delete.notification.success.content": " Tiến trình tài liệu này đã được xóa thành công", - "workflow-item.delete.notification.success.title": "Xóa", - "workflow-item.delete.title": "Xóa tiến trình tài liệu", - "workflow-item.edit.breadcrumbs": "Chỉnh sửa tiến trình tài liệu", - "workflow-item.edit.title": "Xem tiến trình tài liệu", - "workflow-item.send-back.button.cancel": "Hủy", - "workflow-item.send-back.button.confirm": "Gửi lại", - "workflow-item.send-back.header": "Gửi lại tiến trình tài liệucho người gửi", - "workflow-item.send-back.notification.error.content": "Không thể gửi lại tiến trình tài liệu cho người gửi", - "workflow-item.send-back.notification.error.title": "Đã xảy ra lỗi", - "workflow-item.send-back.notification.success.content": "Tiến trình tài liệu này đã được gửi lại thành công cho người gửi", - "workflow-item.send-back.notification.success.title": "Đã gửi lại cho người gửi", - "workflow-item.send-back.title": "Gửi lại tiến trình tài liệu cho người gửi", - "workflow-item.view.breadcrumbs": "Xem tiến trình", - "workspace.search.results.head": "Biểu ghi bạn đã tải lên", - "workspace-item.view.breadcrumbs": "Xem các tài liệu đang biên mục dở dang", - "workspace-item.view.title": "Xem các tài liệu đang biên mục dở dang", - - "idle-modal.extend-session": "Gia hạn phiên", - "idle-modal.header": "Phiên sẽ sớm hết hạn", - "idle-modal.info": "Vì lý do bảo mật các phiên của người dùng sẽ hết hạn sau {{timeToExpire}} phút không hoạt động. Phiên của bạn sẽ sớm hết hạn. Bạn muốn gia hạn hay đăng xuất?", - "idle-modal.log-out": "Đăng xuất", - - "researcher.profile.action.processing": "Đang xử lý…", - "researcher.profile.associated": "Hồ sơ nhà nghiên cứu đã được liên kết", - "researcher.profile.change-visibility.fail": "Đã xảy ra lỗi khi thay đổi chế độ hiển thị hồ sơ", - "researcher.profile.create.fail": "Đã có lỗi xảy ra trong khi tạo hồ sơ nhà nghiên cứu", - "researcher.profile.create.new": "Tạo mới", - "researcher.profile.create.success": "Đã tạo thành công hồ sơ nhà nghiên cứu", - "researcher.profile.delete": "Xóa", - "researcher.profile.expose": "Hiển thị", - "researcher.profile.hide": "Ẩn", - "researcher.profile.not.associated": "Hồ sơ nhà nghiên cứu chưa được liên kết", - "researcher.profile.private.visibility": "CÁ NHÂN", - "researcher.profile.public.visibility": "CÔNG CỘNG", - "researcher.profile.status": "Trạng thái:", - "researcher.profile.view": "Xem", - - "person.page.orcid": "ORCID", - "person.page.orcid.create": "Tạo một ID trên ORCID", - "person.page.orcid.funding-preferences": "Quỹ ưa thích", - "person.page.orcid.grant-authorizations": "Cấp quyền", - "person.page.orcid.granted-authorizations": "Quyền đã cấp", - "person.page.orcid.link": "Liên kết với ID ORCID", - "person.page.orcid.link.error.message": "Đã xảy ra lỗi khi kết nối hồ sơ với ORCID. Nếu sự cố vẫn tiếp tục xảy ra vui lòng liên hệ với quản trị viên.", - "person.page.orcid.link.processing": "Đang kết nối hồ sơ tới ORCID…", - "person.page.orcid.missing-authorizations": "Thiếu quyền", - "person.page.orcid.missing-authorizations-message": "Những quyền sau đang bị thiếu:", - "person.page.orcid.no-missing-authorizations-message": "Tuyệt! Ô này đang trống vì vậy bạn đã được cấp tất cả các quyền truy cập để sử dụng tất cả các chức năng do tổ chức của bạn cung cấp.", - "person.page.orcid.no-orcid-message": "Chưa có ID ORCID nào được liên kết. Bạn có thể click vào nút dưới đây để liên kết hồ sơ này với một tài khoản ORCID.", - "person.page.orcid.orcid-not-linked-message": "ID ORCID của hồ sơ này ({{ orcid }}) chưa được kết nối với tài khoản trên trang ORCID hoặc kết nối đã hết hạn.", - "person.page.orcid.profile-preferences": "Tham số của hồ sơ", - "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", - "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", - "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", - "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", - "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", - "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", - "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", - "person.page.orcid.sync-fundings.all": "Tất cả quỹ", - "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", - "person.page.orcid.sync-fundings.mine": "Quỹ của tôi", - "person.page.orcid.sync-fundings.my_selected": "Quỹ đã chọn", - "person.page.orcid.synchronization-mode": "Chế độ đồng bộ", - "person.page.orcid.synchronization-mode.batch": "Theo lô", - "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", - "person.page.orcid.synchronization-mode.manual": "Thủ công", - "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", - "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", - "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", - "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", - "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", - "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", - "person.page.orcid.sync-profile.affiliation": "Tổ chức", - "person.page.orcid.sync-profile.biographical": "Dữ liệu sinh trắc học", - "person.page.orcid.sync-profile.education": "Giáo dục", - "person.page.orcid.sync-profile.identifiers": "Định danh", - "person.page.orcid.sync-publications.all": "Tất cả ấn phẩm", - "person.page.orcid.sync-publications.disabled": "Đã ngừng kích hoạt", - "person.page.orcid.sync-publications.mine": "Ấn phẩm của tôi", - "person.page.orcid.sync-publications.my_selected": "Ấn phẩm đã chọn", - "person.page.orcid.sync-queue.description.affiliation": "Tổ chức", - "person.page.orcid.sync-queue.description.country": "Quốc gia", - "person.page.orcid.sync-queue.description.education": "Giáo dục", - "person.page.orcid.sync-queue.description.external_ids": "ID ngoài", - "person.page.orcid.sync-queue.description.keywords": "Từ khóa", - "person.page.orcid.sync-queue.description.other_names": "Tên khác", - "person.page.orcid.sync-queue.description.qualification": "Trình độ chuyên môn", - "person.page.orcid.sync-queue.description.researcher_urls": "URL nhà nghiên cứu", - "person.page.orcid.sync-queue.discard": "Hủy thay đổi và không đồng bộ với trang ORCID", - "person.page.orcid.sync-queue.discard.error": "Việc loại bỏ biểu ghi trong danh sách chờ của ORCID đã thất bại", - "person.page.orcid.sync-queue.discard.success": "Biểu ghi trong danh sách chờ của ORCID đã được hủy bỏ thành công", - "person.page.orcid.sync-queue.empty-message": "Danh sách chờ ORCID trống", - "person.page.orcid.sync-queue.send": "Đồng bộ với trang ORCID", - "person.page.orcid.sync-queue.send.bad-request-error": "Đẩy dữ liệu lên ORCID không thành công vì tài nguyên này không hợp lệ", - "person.page.orcid.sync-queue.send.conflict-error": "Đẩy dữ liệu lên ORCID không thành công bởi vì tài nguyên này đã có trên trang ORCID", - "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", - "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", - "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", - "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp
    vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", - "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", - "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", - "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.country.invalid": "2 ký tự mã quốc gia theo ISO 3166 là không hợp lệ", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Cần có số định danh (ID) để phân biệt giữa các tổ chức. ID được hỗ trợ là GRID Ringgold LEI và số định dang Cơ quan đăng ký Crossref Funder", - "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Định danh của tổ chức yêu cầu phải có một giá trị", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Nguồn của một trong các số định danh của tổ chức không hợp lệ. Các nguồn được hỗ trợ là RINGGOLD GRID LEI và FUNDREF", - "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Phải có một nguồn cho định danh của tổ chức", - "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Tài nguyên được gửi yêu cầu phải có ít nhất một định danh", - "person.page.orcid.sync-queue.send.validation-error.funder.required": "Nhà tài trợ là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Tổ chức này yêu cầu phải có địa chỉ", - "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Địa chỉ của tổ chức này phải là một thành phố", - "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Địa chỉ của tổ chức này phải là một mã quốc gia bao gồm 2 ký tự theo ISO 3166", - "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Tên của tổ chức là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.organization.required": "Yêu cầu phải có tổ chức", - "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Năm xuất bản phải là năm sau năm 1900", - "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Ngày bắt đầu là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.title.required": "Nhan đề là bắt buộc", - "person.page.orcid.sync-queue.send.validation-error.type.required": "Trường dc.type là bắt buộc", - "person.page.orcid.sync-queue.table.header.action": "Hành động", - "person.page.orcid.sync-queue.table.header.description": "Mô tả", - "person.page.orcid.sync-queue.table.header.type": "Loại hình tài liệu", - "person.page.orcid.sync-queue.tooltip.affiliation": "Tổ chức", - "person.page.orcid.sync-queue.tooltip.country": "Quốc gia", - "person.page.orcid.sync-queue.tooltip.delete": "Loại bỏ mục này khỏi trang ORCID", - "person.page.orcid.sync-queue.tooltip.education": "Giáo dục", - "person.page.orcid.sync-queue.tooltip.external_ids": "Định danh ", - "person.page.orcid.sync-queue.tooltip.insert": "Thêm mục mới trong ORCID", - "person.page.orcid.sync-queue.tooltip.keywords": "Từ khóa", - "person.page.orcid.sync-queue.tooltip.other_names": "Tên khác", - "person.page.orcid.sync-queue.tooltip.project": "Dự án", - "person.page.orcid.sync-queue.tooltip.publication": "Ấn phẩm", - "person.page.orcid.sync-queue.tooltip.qualification": "Trình độ chuyên môn", - "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL nhà nghiên cứu", - "person.page.orcid.sync-queue.tooltip.update": "Cập nhật mục này trên trang ORCID", - "person.page.orcid.unlink": "Ngắt kết nối khỏi ORCID", - "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", - "person.page.orcid.unlink.processing": "Đang xử lý…", - "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", - - "person.orcid.registry.auth": "Được phép qua ORCID ", - "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", - "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", - - "home.recent-submissions.head": "Các tài liệu tải lên gần đây", - - "listable-notification-object.default-message": "Không thể truy xuất", - - "system-wide-alert-banner.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo hệ thống", - "system-wide-alert-banner.countdown.prefix": "Trong", - "system-wide-alert-banner.countdown.days": "{{days}} ngày", - "system-wide-alert-banner.countdown.hours": "{{hours}} giờ và", - "system-wide-alert-banner.countdown.minutes": "{{minutes}} phút:", - - "menu.section.system-wide-alert": "Cảnh báo toàn hệ thống", - - "system-wide-alert.form.header": "Cảnh báo toàn hệ thống", - "system-wide-alert-form.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo trên toàn hệ thống", - "system-wide-alert.form.cancel": "Hủy", - "system-wide-alert.form.save": "Lưu", - "system-wide-alert.form.label.active": "HOẠT ĐỘNG", - "system-wide-alert.form.label.inactive": "KHÔNG HOẠT ĐỘNG", - "system-wide-alert.form.error.message": "Cảnh báo trên toàn hệ thống phải chứa một nội dung", - "system-wide-alert.form.label.message": "Nội dung cảnh báo", - "system-wide-alert.form.label.countdownTo.enable": "Kích hoạt thời gian tạm dừng máy chủ", - "system-wide-alert.form.label.countdownTo.hint": "Gợi ý: Thiết lập lịch tạm dừng máy chủ. Khi chức năng này được kích hoạt, có thể lựa chọn một ngày tạm dừng máy chủ trong tương lai và nội dung cảnh báo sẽ được đếm ngược tới ngày đã đặt. Khi bộ hẹn giờ này được kết thúc, nội dung này sẽ biến mất khỏi cảnh báo. Máy chủ sẽ không tự động tạm dừng.", - "system-wide-alert.form.label.preview": "Xem trước cảnh báo toàn hệ thống", - "system-wide-alert.form.update.success": "Cảnh báo toàn hệ thống đã được cập nhật thành công", - "system-wide-alert.form.update.error": "Đã xảy ra lỗi trong quá trình cập nhật cảnh báo toàn hệ thống", - "system-wide-alert.form.create.success": "Cảnh báo toàn hệ thống đã được tạo thành công", - "system-wide-alert.form.create.error": "Đã xảy ra lỗi trong quá trình tạo cảnh báo toàn hệ thống", - "admin.system-wide-alert.breadcrumbs": "Cảnh báo toàn hệ thống", - "admin.system-wide-alert.title": "Cảnh báo toàn hệ thống", + "journal.page.description": "Mô tả", + "journal.page.edit": "Chỉnh sửa tài liệu này", + "journal.page.editor": "Tổng biên tập", + "journal.page.issn": "ISSN", + "journal.page.publisher": "Nhà xuất bản", + "journal.page.titleprefix": "Tạp chí:", + "journal.search.results.head": "Kết quả tìm kiếm tạp chí", + "journal.search.title": "Tìm kiếm tạp chí", + "journalissue.listelement.badge": "Kỳ của tạp chí", + "journalissue.page.description": "Mô tả", + "journalissue.page.abstract": "Tóm tắt", + "journalissue.page.edit": "Chỉnh sửa tài liệu này", + "journalissue.page.issuedate": "Ngày xuất bản", + "journalissue.page.journal-issn": "ISSN", + "journalissue.page.journal-title": "Nhan đề tạp chí", + "journalissue.page.keyword": "Từ khóa chủ đề", + "journalissue.page.number": "Số lượng", + "journalissue.page.titleprefix": "Kỳ của tạp chí:", + "journal-relationships.search.results.head": "Kết quả tìm kiếm tạp chí", + "journalvolume.listelement.badge": "Tập của tạp chí", + "journalvolume.page.description": "Mô tả", + "journalvolume.page.edit": "Chỉnh sửa tài liệu này", + "journalvolume.page.issuedate": "Ngày xuất bản", + "journalvolume.page.titleprefix": "Tập của tạp chí:", + "journalvolume.page.volume": "Tập", + + + "iiif.listelement.badge": "Phương tiện hình ảnh", + "iiif.page.description": "Mô tả:", + "iiif.page.doi": "Đường dẫn cố định:", + "iiif.page.issue": "Vấn đề:", + "iiif.page.titleprefix": "Hình ảnh:", + "iiifsearchable.listelement.badge": "Phương tiện biểu ghi", + "iiifsearchable.page.description": "Mô tả:", + "iiifsearchable.page.doi": "Đường dẫn cố định:", + "iiifsearchable.page.issue": "Vấn đề:", + "iiifsearchable.page.titleprefix": "Tài liệu:", + "iiifviewer.fullscreen.notice": "Sử dụng chế độ toàn màn hình để xem tốt hơn.", + + "loading.bitstream": "Đang tải tệp tin...", + "loading.bitstreams": "Đang tải tệp tin...", + "loading.browse-by": "Đang tải tài liệu...", + "loading.browse-by-page": "Đang tải trang...", + "loading.collection": "Đang tải bộ sưu tập...", + "loading.collections": "Đang tải bộ sưu tập...", + "loading.community": "Đang tải đơn vị...", + "loading.content-source": "Đang tải nguồn nội dung...", + "loading.default": "Đang tải...", + "loading.item": "Đang tải tài liệu...", + "loading.items": "Đang tải tài liệu...", + "loading.mydspace-results": "Đang tải tài liệu...", + "loading.objects": "Đang tải...", + "loading.recent-submissions": "Đang tải các tài liệu mới gần đây...", + "loading.search-results": "Đanh tải kết quả tìm kiếm...", + "loading.sub-collections": "Đang tải bộ sưu tập con...", + "loading.sub-communities": "Đang tải đơn vị con...", + "loading.top-level-communities": "Đang tải các đơn vị lớn...", + + "login.breadcrumbs": "Đăng nhập", + "login.form.email": "Địa chỉ email", + "login.form.forgot-password": "Có phải bạn quên mật khẩu?", + "login.form.header": "Vui lòng đăng nhập vào DSpace", + "login.form.new-user": "Bạn là người dùng mới? \n Vui lòng nhấp vào đây để đăng kí.", + "login.form.oidc": "Đăng nhập với OIDC", + "login.form.orcid": "Đăng nhập với ORCID", + "login.form.or-divider": "hoặc", + "login.form.password": "Mật khẩu", + "login.form.shibboleth": "Đăng nhập bằng Shibboleth", + "login.form.submit": "Đăng nhập", + "login.title": "Đăng nhập", + + "logout.form.header": "Đăng xuất khỏi DSpace", + "logout.form.submit": "Đăng xuất", + "logout.title": "Đăng xuất", + + "menu.header.admin": "Quản trị", + "menu.header.admin.description": "Menu quản trị", + "menu.header.image.logo": "Logo của kho lưu trữ", + + "menu.section.access_control": "Người dùng và nhóm người dùng", + "menu.section.access_control_authorizations": "Chính sách phân quyền", + "menu.section.access_control_groups": "Nhóm người dùng", + "menu.section.access_control_people": "Người dùng", + "menu.section.admin_search": "Tìm kiếm quản trị", + "menu.section.browse_community": "Đơn vị này", + "menu.section.browse_community_by_author": "Tác giả", + "menu.section.browse_community_by_issue_date": "Năm xuất bản", + "menu.section.browse_community_by_title": "Nhan đề", + "menu.section.browse_global": "Duyệt tìm", + "menu.section.browse_global_by_author": "Tác giả", + "menu.section.browse_global_by_dateissued": "Năm xuất bản", + "menu.section.browse_global_by_subject": "Chủ đề", + "menu.section.browse_global_by_title": "Nhan đề", + "menu.section.browse_global_communities_and_collections": "Đơn vị & Bộ sưu tập", + "menu.section.control_panel": "Bảng điều khiển", + "menu.section.curation_task": "Kiểm tra dữ liệu", + "menu.section.edit": "Chỉnh sửa", + "menu.section.edit_collection": "Bộ sưu tập", + "menu.section.edit_community": "Đơn vị", + "menu.section.edit_item": "Tài liệu", + "menu.section.export": "Trích xuất", + "menu.section.export_batch": "Xuất dữ liệu (ZIP)", + "menu.section.export_collection": "Bộ sưu tập", + "menu.section.export_community": "Đơn vị", + "menu.section.export_item": "Tài liệu", + "menu.section.export_metadata": "Siêu dữ liệu", + "menu.section.health": "Kiểm tra hệ thống", + "menu.section.icon.access_control": "Phần menu của mục Người dùng và Nhóm người dùng", + "menu.section.icon.admin_search": "Phần menu của mục Tìm kiếm quản trị", + "menu.section.icon.control_panel": "Phần menu của mục Bảng điều khiển", + "menu.section.icon.curation_tasks": "Phần menu của Nhiệm vụ kiểm tra", + "menu.section.icon.edit": "Phần menu của mục Chỉnh sửa", + "menu.section.icon.export": "Phần menu của mục Trích xuất dữ liệu", + "menu.section.icon.find": "Phần menu của mục Tìm kiếm", + "menu.section.icon.health": "Phần menu của mục Kiểm tra hệ thống", + "menu.section.icon.import": "Phần menu của mục Nhập dữ liệu", + "menu.section.icon.new": "Phần menu của mục Tạo mới", + "menu.section.icon.pin": "Ghim thanh quản trị", + "menu.section.icon.processes": "Phần menu của mục Tiến trình", + "menu.section.icon.registries": "Phần menu của mục Thống số chung", + "menu.section.icon.statistics_task": "Phần menu của mục Nhiệm vụ báo cáo thống kê", + "menu.section.icon.unpin": "Bỏ ghim thanh quản trị", + "menu.section.icon.workflow": "Phần menu của mục Quản trị luồng công việc", + "menu.section.import": "Nhập dữ liệu", + "menu.section.import_batch": "Nhập liệu theo lô (ZIP)", + "menu.section.import_metadata": "Siêu dữ liệu", + "menu.section.new": "Tạo mới", + "menu.section.new_collection": "Bộ sưu tập", + "menu.section.new_community": "Đơn vị", + "menu.section.new_item": "Tài liệu", + "menu.section.new_item_version": "Phiên bản tài liệu", + "menu.section.new_process": "Tiến trình", + "menu.section.pin": "Ghim thanh quản trị", + "menu.section.policies_metadata": "Chính sách phân quyền", + "menu.section.processes": "Tiến trình", + "menu.section.registries": "Thông số chung", + "menu.section.registries_format": "Định dạng tệp tin số", + "menu.section.registries_metadata": "Trường dữ liệu", + "menu.section.statistics": "Báo cáo thống kê", + "menu.section.statistics_admin": "Báo cáo thống kê", + "menu.section.statistics_admin_metadata": "Báo cáo thống kê", + "menu.section.statistics_task": "Nhiệm vụ báo cáo thống kê", + "menu.section.toggle.access_control": "Phần chuyển đổi Người dùng và Nhóm người dùng", + "menu.section.toggle.control_panel": "Phần chuyển đổi Bảng điều khiển", + "menu.section.toggle.curation_task": "Phần chuyển đổi Kiểm tra dữ liệu", + "menu.section.toggle.edit": "Phần chuyển đổi Chỉnh sửa", + "menu.section.toggle.export": "Phần chuyển đổi Trích xuất dữ liệu", + "menu.section.toggle.find": "Phần chuyển đổi Tìm kiếm", + "menu.section.toggle.import": "Phần chuyển đổi Nhập dữ liệu", + "menu.section.toggle.new": "Phần chuyển đổi Tạo mới", + "menu.section.toggle.registries": "Phần chuyển đổi thông số chung", + "menu.section.toggle.statistics_task": "Phần chuyển đổi Nhiệm vụ Báo cáo thống kê", + "menu.section.unpin": "Bỏ ghim thanh quản trị", + "menu.section.workflow": "Quản trị dòng công việc", + + "metadata-export-search.submit.error": "Xảy ra lỗi trong quá trình xuất dữ liệu", + "metadata-export-search.submit.success": "Quá trình xuất dữ liệu đã được khởi chạy thành công", + "metadata-export-search.tooltip": "Xuất kết quả tìm kiếm ra CSV", + + "mydspace.breadcrumbs": "Trang cá nhân", + "mydspace.messages.controller-help": "Chọn tùy chọn này để gửi tin nhắn tới người biên mục tài liệu.", + "mydspace.messages.description-placeholder": "Thêm tin nhắn của bạn tại đây...", + "mydspace.messages.hide-msg": "Ẩn tin nhắn", + "mydspace.messages.mark-as-read": "Đánh dấu đã đọc", + "mydspace.messages.mark-as-unread": "Đánh dấu chưa đọc", + "mydspace.messages.no-content": "Không có nội dung.", + "mydspace.messages.no-messages": "Không có tin nhắn nào.", + "mydspace.messages.send-btn": "Gửi", + "mydspace.messages.show-msg": "Hiển thị tin nhắn", + "mydspace.messages.subject-placeholder": "Chủ đề...", + "mydspace.messages.submitter-help": "Chọn tùy chọn này để gửi tin nhắn tới người quản trị.", + "mydspace.messages.title": "Tin nhắn", + "mydspace.messages.to": "Tới", + "mydspace.new-submission": "Tạo tài liệu mới", + "mydspace.new-submission-external": "Nhập thông tin mô tả từ nguồn bên ngoài", + "mydspace.new-submission-external-short": "Nhập thông tin mô tả", + "mydspace.results.head": "Tài liệu của tôi", + "mydspace.results.no-abstract": "Không có tóm tắt", + "mydspace.results.no-authors": "Không có tác giả", + "mydspace.results.no-collections": "Không có bộ sưu tập", + "mydspace.results.no-date": "Không có thời gian xuất bản", + "mydspace.results.no-files": "Không có tệp đính kèm", + "mydspace.results.no-results": "Không có tài liệu để hiển thị", + "mydspace.results.no-title": "Không có nhan đề", + "mydspace.results.no-uri": "Không có URL", + "mydspace.search-form.placeholder": "Tìm kiếm trong trang cá nhân của tôi...", + "mydspace.show.workflow": "Tất cả nhiệm vụ", + "mydspace.show.workspace": "Tài liệu của tôi", + "mydspace.status.archived": "Đã lưu trữ", + "mydspace.status.validation": "Đang kiểm tra", + "mydspace.status.waiting-for-controller": "Đợi nhận nhiệm vụ", + "mydspace.status.workflow": "Đang kiểm duyệt", + "mydspace.status.workspace": "Đang biên mục", + "mydspace.title": "Trang cá nhân", + "mydspace.upload.upload-failed": "Có lỗi xảy ra khi tạo tài liệu mới. Vui lòng xác minh nội dung đã tải lên trước khi thử lại.", + "mydspace.upload.upload-failed-manyentries": "Không thể xử lý tệp tin. Có quá nhiều mục trong khi hệ thống chỉ cho phép một mục trong tệp tin.", + "mydspace.upload.upload-failed-moreonefile": "Không thể xử lý yêu cầu. Chỉ cho phép một tệp tin duy nhất.", + "mydspace.upload.upload-multiple-successful": "Đã tạo {{qty}} mục không gian làm việc mới.", + "mydspace.view-btn": "Xem chi tiết", + + "nav.browse.header": "Tất cả DSpace", + "nav.community-browse.header": "Theo Đơn vị", + "nav.language": "Chuyển ngôn ngữ", + "nav.login": "Đăng nhập", + "nav.logout": "Menu Hồ sơ cá nhân và Đăng xuất", + "nav.main.description": "Thanh điều hướng chính", + "nav.mydspace": "Trang cá nhân", + "nav.profile": "Hồ sơ cá nhân", + "nav.search": "Tìm kiếm", + "nav.statistics.header": "Báo cáo thống kê", + "nav.stop-impersonating": "Ngừng giả danh Người dùng", + "nav.toggle": "Điều hướng chuyển", + "nav.user.description": "Thanh hồ sơ người dùng", + "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", + + "none.listelement.badge": "Tài liệu", + + "orgunit.listelement.badge": "Đơn vị\/Tổ chức", + "orgunit.listelement.no-title": "Không có nhan đề", + "orgunit.page.city": "Thành phố", + "orgunit.page.country": "Quốc gia", + "orgunit.page.dateestablished": "Ngày thành lập", + "orgunit.page.description": "Mô tả", + "orgunit.page.edit": "Chỉnh sửa tài liệu", + "orgunit.page.id": "ID", + "orgunit.page.titleprefix": "Đơn vị\/Tổ chức", + + "pagination.next.button": "Tiếp theo", + "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", + "pagination.options.description": "Tùy chọn Phân trang", + "pagination.previous.button": "Quay lại", + "pagination.results-per-page": "Số kết quả\/trang", + "pagination.showing.detail": "{{ range }} của tổng số {{ total }} kết quả", + "pagination.showing.label": "Đang hiển thị ", + "pagination.sort-direction": "Tùy chọn sắp xếp", + + "person.listelement.badge": "Nhà nghiên cứu", + "person.listelement.no-title": "Không tìm thấy tên", + "person.orcid.registry.auth": "Được phép qua ORCID ", + "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", + "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", + "person.page.birthdate": "Ngày sinh", + "person.page.edit": "Chỉnh sửa tài liệu", + "person.page.email": "Email", + "person.page.firstname": "Tên", + "person.page.jobtitle": "Chức vụ", + "person.page.abtract": "Tiểu sử", + "person.page.description": "Mô tả", + "person.page.lastname": "Họ", + "person.page.link.full": "Hiển thị chi tiết", + "person.page.name": "Tên", + "person.page.orcid": "ORCID", + "person.page.orcid.create": "Tạo một ID trên ORCID", + "person.page.orcid.funding-preferences": "Quỹ ưa thích", + "person.page.orcid.grant-authorizations": "Cấp quyền", + "person.page.orcid.granted-authorizations": "Quyền đã cấp", + "person.page.orcid.link": "Liên kết với ID ORCID", + "person.page.orcid.link.error.message": "Đã xảy ra lỗi khi kết nối hồ sơ với ORCID. Nếu sự cố vẫn tiếp tục xảy ra vui lòng liên hệ với quản trị viên.", + "person.page.orcid.link.processing": "Đang kết nối hồ sơ tới ORCID…", + "person.page.orcid.missing-authorizations": "Thiếu quyền", + "person.page.orcid.missing-authorizations-message": "Những quyền sau đang bị thiếu:", + "person.page.orcid.no-missing-authorizations-message": "Tuyệt! Ô này đang trống vì vậy bạn đã được cấp tất cả các quyền truy cập để sử dụng tất cả các chức năng do tổ chức của bạn cung cấp.", + "person.page.orcid.no-orcid-message": "Chưa có ID ORCID nào được liên kết. Bạn có thể click vào nút dưới đây để liên kết hồ sơ này với một tài khoản ORCID.", + "person.page.orcid.orcid-not-linked-message": "ID ORCID của hồ sơ này ({{ orcid }}) chưa được kết nối với tài khoản trên trang ORCID hoặc kết nối đã hết hạn.", + "person.page.orcid.profile-preferences": "Tham số của hồ sơ", + "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", + "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", + "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", + "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", + "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", + "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", + "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", + "person.page.orcid.sync-fundings.all": "Tất cả quỹ", + "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-fundings.mine": "Quỹ của tôi", + "person.page.orcid.sync-fundings.my_selected": "Quỹ đã chọn", + "person.page.orcid.synchronization-mode": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.batch": "Theo lô", + "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.manual": "Thủ công", + "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", + "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", + "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", + "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", + "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", + "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", + "person.page.orcid.sync-profile.affiliation": "Tổ chức", + "person.page.orcid.sync-profile.biographical": "Dữ liệu sinh trắc học", + "person.page.orcid.sync-profile.education": "Giáo dục", + "person.page.orcid.sync-profile.identifiers": "Định danh", + "person.page.orcid.sync-publications.all": "Tất cả ấn phẩm", + "person.page.orcid.sync-publications.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-publications.mine": "Ấn phẩm của tôi", + "person.page.orcid.sync-publications.my_selected": "Ấn phẩm đã chọn", + "person.page.orcid.sync-queue.description.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.description.country": "Quốc gia", + "person.page.orcid.sync-queue.description.education": "Giáo dục", + "person.page.orcid.sync-queue.description.external_ids": "ID ngoài", + "person.page.orcid.sync-queue.description.keywords": "Từ khóa", + "person.page.orcid.sync-queue.description.other_names": "Tên khác", + "person.page.orcid.sync-queue.description.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.description.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.discard": "Hủy thay đổi và không đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.discard.error": "Việc loại bỏ biểu ghi trong danh sách chờ của ORCID đã thất bại", + "person.page.orcid.sync-queue.discard.success": "Biểu ghi trong danh sách chờ của ORCID đã được hủy bỏ thành công", + "person.page.orcid.sync-queue.empty-message": "Danh sách chờ ORCID trống", + "person.page.orcid.sync-queue.send": "Đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.send.bad-request-error": "Đẩy dữ liệu lên ORCID không thành công vì tài nguyên này không hợp lệ", + "person.page.orcid.sync-queue.send.conflict-error": "Đẩy dữ liệu lên ORCID không thành công bởi vì tài nguyên này đã có trên trang ORCID", + "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", + "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", + "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", + "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "2 ký tự mã quốc gia theo ISO 3166 là không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Cần có số định danh (ID) để phân biệt giữa các tổ chức. ID được hỗ trợ là GRID Ringgold LEI và số định dang Cơ quan đăng ký Crossref Funder", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Định danh của tổ chức yêu cầu phải có một giá trị", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Nguồn của một trong các số định danh của tổ chức không hợp lệ. Các nguồn được hỗ trợ là RINGGOLD GRID LEI và FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Phải có một nguồn cho định danh của tổ chức", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Tài nguyên được gửi yêu cầu phải có ít nhất một định danh", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Nhà tài trợ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Tổ chức này yêu cầu phải có địa chỉ", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Địa chỉ của tổ chức này phải là một thành phố", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Địa chỉ của tổ chức này phải là một mã quốc gia bao gồm 2 ký tự theo ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Tên của tổ chức là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Yêu cầu phải có tổ chức", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Năm xuất bản phải là năm sau năm 1900", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Ngày bắt đầu là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Nhan đề là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.type.required": "Trường dc.type là bắt buộc", + "person.page.orcid.sync-queue.table.header.action": "Hành động", + "person.page.orcid.sync-queue.table.header.description": "Mô tả", + "person.page.orcid.sync-queue.table.header.type": "Loại hình tài liệu", + "person.page.orcid.sync-queue.tooltip.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.tooltip.country": "Quốc gia", + "person.page.orcid.sync-queue.tooltip.delete": "Loại bỏ mục này khỏi trang ORCID", + "person.page.orcid.sync-queue.tooltip.education": "Giáo dục", + "person.page.orcid.sync-queue.tooltip.external_ids": "Định danh ", + "person.page.orcid.sync-queue.tooltip.insert": "Thêm mục mới trong ORCID", + "person.page.orcid.sync-queue.tooltip.keywords": "Từ khóa", + "person.page.orcid.sync-queue.tooltip.other_names": "Tên khác", + "person.page.orcid.sync-queue.tooltip.project": "Dự án", + "person.page.orcid.sync-queue.tooltip.publication": "Ấn phẩm", + "person.page.orcid.sync-queue.tooltip.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.tooltip.update": "Cập nhật mục này trên trang ORCID", + "person.page.orcid.unlink": "Ngắt kết nối khỏi ORCID", + "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", + "person.page.orcid.unlink.processing": "Đang xử lý…", + "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", + "person.page.staffid": "ID nhân viên", + "person.page.titleprefix": "Nhà nghiên cứu", + "person.search.results.head": "Kết quả tìm kiếm Nhà nghiên cứu", + "person.search.title": "Tìm kiếm Nhà nghiên cứu", + "person-relationships.search.results.head": "Kết quả tìm kiếm Tác giả\/Nhà nghiên cứu", + + "process.bulk.delete.error.body": "Không thể xóa tiến trình có ID {{ processId}}. Các tiến trình còn lại sẽ tiếp tục bị xóa.", + "process.bulk.delete.error.head": "Đã xảy ra lỗi khi xóa tiến trình", + "process.detail.actions": "Hành động", + "process.detail.arguments": "Tham số", + "process.detail.arguments.empty": "Tiến trình này không chứa bất kì tham số nào", + "process.detail.back": "Quay lại", + "process.detail.create": "Tạo tiến trình tương tự", + "process.detail.delete.body": "Bạn có chắc chắn muốn xóa tiến trình hiện tại?", + "process.detail.delete.button": "Xóa tiến trình", + "process.detail.delete.cancel": "Hủy", + "process.detail.delete.confirm": "Xóa tiến trình", + "process.detail.delete.error": "Đã xảy ra sự cố trong khi xóa tiến trình", + "process.detail.delete.header": "Xóa tiến trình", + "process.detail.delete.success": "Tiến trình đã được xóa thành công.", + "process.detail.end-time": "Thời gian kết thúc", + "process.detail.logs.button": "Tìm kiếm đầu ra của tiến trình", + "process.detail.logs.loading": "Đang tìm kiếm", + "process.detail.logs.none": "Tiến trình này không có đầu ra nào", + "process.detail.output": "Đầu ra của tiến trình", + "process.detail.output-files": "Tệp tin đầu ra", + "process.detail.output-files.empty": "Tiến trình này không chứa tệp tin đầu ra nào", + "process.detail.script": "Tập lệnh", + "process.detail.start-time": "Thời gian bắt đầu", + "process.detail.status": "Trạng thái", + "process.detail.title": "Tiến trình: {{ id }} - {{ name }}", + "process.new.breadcrumbs": "Tạo tiến trình mới", + "process.new.cancel": "Hủy", + "process.new.header": "Tạo tiến trình mới", + "process.new.notification.error.content": "Đã có lỗi xảy ra trong khi tạo tiến trình", + "process.new.notification.error.title": "Lỗi", + "process.new.notification.success.content": "Tiến trình đã được thực hiện thành công", + "process.new.notification.success.title": "Thành công", + "process.new.parameter.file.required": "Vui lòng chọn một tệp tin", + "process.new.parameter.file.upload-button": "Chọn tệp tin...", + "process.new.parameter.required.missing": "Các tham số bắt buộc sau đang bị thiếu:", + "process.new.parameter.string.required": "Giá trị tham số là bắt buộc", + "process.new.parameter.type.file": "tệp tin", + "process.new.parameter.type.value": "giá trị", + "process.new.select-parameters": "Tham số", + "process.new.select-script": "Tập lệnh", + "process.new.select-script.placeholder": "Chọn một tập lệnh...", + "process.new.select-script.required": "Tập lệnh là bắt buộc", + "process.new.submit": "Lưu", + "process.new.title": "Tạo tiến trình mới", + "process.overview.breadcrumbs": "Tiến trình tổng quan", + "process.overview.delete": "Xóa {{count}} tiến trình", + "process.overview.delete.body": "Bạn có chắc chắn muốn xóa {{count}} tiến trình?", + "process.overview.delete.clear": "Xóa các tiến trình đã chọn", + "process.overview.delete.header": "Xóa", + "process.overview.new": "Tạo mới", + "process.overview.table.actions": "Hành động", + "process.overview.table.finish": "Thời gian kết thúc", + "process.overview.table.id": "ID tiến trình", + "process.overview.table.name": "Tên", + "process.overview.table.start": "Thời gian bắt đầu", + "process.overview.table.status": "Trạng thái", + "process.overview.table.user": "Người dùng", + "process.overview.title": "Tổng quan tiến trình", + + "profile.breadcrumbs": "Cập nhật hồ sơ", + "profile.card.identify": "Hồ sơ định danh", + "profile.card.researcher": "Định danh", + "profile.card.security": "Bảo mật", + "profile.form.submit": "Lưu", + "profile.groups.head": "Nhóm quyền của bạn", + "profile.head": "Cập nhật hồ sơ", + "profile.metadata.form.error.firstname.required": "Yêu cầu nhập Tên của người dùng", + "profile.metadata.form.error.lastname.required": "Yêu cầu nhập Họ của người dùng", + "profile.metadata.form.label.email": "Địa chỉ email", + "profile.metadata.form.label.firstname": "Tên", + "profile.metadata.form.label.language": "Ngôn ngữ", + "profile.metadata.form.label.lastname": "Họ", + "profile.metadata.form.label.phone": "Số điện thoại liên hệ", + "profile.metadata.form.notifications.success.content": "Cập nhật hồ sơ thành công .", + "profile.metadata.form.notifications.success.title": "Lưu hồ sơ", + "profile.notifications.warning.no-changes.content": "Không có thay đổi nào trên hồ sơ của bạn.", + "profile.notifications.warning.no-changes.title": "Không thay đổi", + "profile.security.form.error.matching-passwords": "Mật khẩu không khớp.", + "profile.security.form.info": "Nhập vào mật khẩu mới và xác nhận mật khẩu vào ô phía dưới. Độ dài tối thiểu của mật khẩu là 6 ký tự.", + "profile.security.form.label.current-password": "Mật khẩu hiện tại", + "profile.security.form.label.password": "Mật khẩu", + "profile.security.form.label.passwordrepeat": "Nhập lại mật khẩu để xác nhận", + "profile.security.form.notifications.error.change-failed": "Đã xảy ra lỗi khi thay đổi mật khẩu. Vui lòng kiểm tra lại tính chính xác của mật khẩu hiện tại.", + "profile.security.form.notifications.error.general": "Vui lòng điền vào các trường bắt buộc của biểu mẫu bảo mật.", + "profile.security.form.notifications.error.not-same": "Mật khẩu được cung cấp không giống nhau.", + "profile.security.form.notifications.error.title": "Thay đổi mật khẩu không thành công", + "profile.security.form.notifications.success.content": "Thay đổi mật khẩu thành công.", + "profile.security.form.notifications.success.title": "Đã lưu mật khẩu", + "profile.special.groups.head": "Phân quyền cho các nhóm đặc biệt mà bạn thuộc về", + "profile.title": "Cập nhật hồ sơ", + + "project.listelement.badge": "Dự án nghiên cứu", + "project.page.contributor": "Người tham gia", + "project.page.description": "Mô tả", + "project.page.edit": "Chỉnh sửa tài liệu", + "project.page.expectedcompletion": "Dự kiến hoàn thành", + "project.page.funder": "Nhà tài trợ", + "project.page.id": "ID", + "project.page.keyword": "Từ khóa", + "project.page.status": "Trạng thái", + "project.page.titleprefix": "Dự án nghiên cứu:", + "project.search.results.head": "Kết quả tìm kiếm dự án", + "project-relationships.search.results.head": "Kết quả tìm kiếm dự án", + + "publication.listelement.badge": "Ấn phẩm", + "publication.page.description": "Mô tả", + "publication.page.edit": "Chỉnh sửa tài liệu", + "publication.page.journal-issn": "ISSN tạp chí", + "publication.page.journal-title": "Nhan đề tạp chí", + "publication.page.publisher": "Nhà xuất bản", + "publication.page.titleprefix": "Ấn phẩm: ", + "publication.page.volume-title": "Nhan đề tập", + "publication.search.results.head": "Kết quả tìm kiếm ấn phẩm", + "publication.search.title": "Tìm kiếm ấn phẩm", + "publication-relationships.search.results.head": "Kết quả tìm kiếm ấn phẩm", + + "media-viewer.next": "Tiếp theot", + "media-viewer.playlist": "Danh sách phát", + "media-viewer.previous": "Quay lại", + + "register-email.title": "Đăng ký tài khoản mới", + "register-page.create-profile.header": "Tạo hồ sơ", + "register-page.create-profile.identification.contact": "Điện thoại liên hệ", + "register-page.create-profile.identification.email": "Địa chỉ email", + "register-page.create-profile.identification.first-name": "Tên *", + "register-page.create-profile.identification.first-name.error": "Nhập vào tên của người dùng", + "register-page.create-profile.identification.header": "Hồ sơ định danh", + "register-page.create-profile.identification.language": "Ngôn ngữ", + "register-page.create-profile.identification.last-name": "Họ *", + "register-page.create-profile.identification.last-name.error": "Nhập vào họ của người dùng", + "register-page.create-profile.security.error.empty-password": "Nhập mật khẩu vào ô phía dưới.", + "register-page.create-profile.security.error.matching-passwords": "Mật khẩu không khớp.", + "register-page.create-profile.security.header": "Bảo mật", + "register-page.create-profile.security.info": "Nhập vào mật khẩu mới và xác nhận mật khẩu vào ô phía dưới. Độ dài tối thiểu của mật khẩu là 6 ký tự.", + "register-page.create-profile.security.label.password": "Mật khẩu *", + "register-page.create-profile.security.label.passwordrepeat": "Nhập lại để xác nhận *", + "register-page.create-profile.submit": "Đăng ký thành công", + "register-page.create-profile.submit.error.content": "Đã có sự cố xảy ra khi đăng ký người dùng mới.", + "register-page.create-profile.submit.error.head": "Đăng ký lỗi", + "register-page.create-profile.submit.success.content": "Đăng ký thành công. Bạn đã đăng nhập với tư cách người dùng mới", + "register-page.create-profile.submit.success.head": "Đăng ký thành công", + "register-page.registration.email": "Địa chỉ email *", + "register-page.registration.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", + "register-page.registration.email.error.required": "Vui lòng nhập vào địa chỉ email", + "register-page.registration.email.hint": "Địa chỉ này sẽ được xác minh và dùng làm tên đăng nhập của bạn.", + "register-page.registration.error.content": "Đã xảy ra lỗi khi đăng ký địa chỉ email sau: {{ email }}", + "register-page.registration.error.head": "Lỗi khi đăng ký email", + "register-page.registration.error.recaptcha": "Lỗi khi thực hiện xác minh bằng recaptcha", + "register-page.registration.google-recaptcha.must-accept-cookies": "Để đăng ký bạn phải chấp nhận cookie Đăng ký và khôi phục mật khẩu<\/b> (Google reCaptcha).", + "register-page.registration.google-recaptcha.notification.message.error": "Xác minh đã hết hạn. Vui lòng xác minh lại.", + "register-page.registration.google-recaptcha.notification.message.expired": "Đã xảy ra lỗi trong quá trình xác minh reCaptcha", + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + "register-page.registration.google-recaptcha.open-cookie-settings": "Mở phần cài đặt cookie", + "register-page.registration.header": "Đăng ký người dùng mới", + "register-page.registration.info": "Đăng ký tài khoản để nhận cập nhật mới về bộ sưu tập qua email và theo dõi tài liệu mới trên DSpace.", + "register-page.registration.submit": "Đăng ký", + "register-page.registration.success.content": "Một email sẽ được gửi đến địa chỉ email {{ email }} chứa liên kết xác nhận và các hướng dẫn khác.", + "register-page.registration.success.head": "Gửi email xác nhận", + + "relationships.add.error.relationship-type.content": "Không có kết quả nào phù hợp cho kiểu quan hệ {{ type }} giữa hai tài liệu", + "relationships.add.error.server.content": "Máy chủ trả về lỗi", + "relationships.add.error.title": "Không thể thêm mối quan hệ", + "relationships.isAuthorOf": "Tác giả", + "relationships.isAuthorOf.OrgUnit": "Tác giả (tổ chức)", + "relationships.isAuthorOf.Person": "Tác giả (người)", + "relationships.isContributorOf": "Người tham gia", + "relationships.isContributorOf.OrgUnit": "Người tham gia (Tổ chức)", + "relationships.isContributorOf.Person": "Người tham gia", + "relationships.isFundingAgencyOf.OrgUnit": "Nhà tài trợ", + "relationships.isIssueOf": "Số kỳ của tạp chí", + "relationships.isJournalIssueOf": "Số kỳ của tạp chí", + "relationships.isJournalOf": "Tạp chí", + "relationships.isOrgUnitOf": "Đơn vị tổ chức", + "relationships.isPersonOf": "Tác giả", + "relationships.isProjectOf": "Dự án nghiên cứu", + "relationships.isPublicationOf": "Ấn phẩm", + "relationships.isPublicationOfJournalIssue": "Bài báo", + "relationships.isSingleJournalOf": "Tạp chí", + "relationships.isSingleVolumeOf": "Số tập của tạp chí", + "relationships.isVolumeOf": "Số tập của tạp chí", + + "repository.image.logo": "Logo lưu trữ", + "repository.title.prefix": "Digital Library ::", + "repository.title.prefixDSpace": "Digital Library ::", + + "resource-policies.add.button": "Thêm", + "resource-policies.add.for.bitstream": "Thêm chính sách dữ liệu số mới", + "resource-policies.add.for.bundle": "Thêm chính sách gói dữ liệu mới", + "resource-policies.add.for.collection": "Thêm chính sách bộ sưu tập mới", + "resource-policies.add.for.community": "Thêm chính sách đơn vị mới", + "resource-policies.add.for.item": "Thêm chính sách tài liệu mới", + "resource-policies.create.page.failure.content": "Đã có lỗi xảy ra khi tạo chính sách tài nguyên.", + "resource-policies.create.page.heading": "Tạo chính sách tài nguyên mới cho", + "resource-policies.create.page.success.content": "Hành động thành công", + "resource-policies.create.page.title": "Tạp chính sách tài nguyên mới", + "resource-policies.delete.btn": "Xóa lựa chọn", + "resource-policies.delete.btn.title": "Xóa chính sách tài nguyên đã chọn", + "resource-policies.delete.failure.content": "Đã có lỗi xảy ra khi xóa chính sách tài nguyên đã lựa chọn.", + "resource-policies.delete.success.content": "Hành động thành công", + "resource-policies.edit.page.failure.content": "Đã có lỗi xảy ra khi chỉnh sửa chính sách tài nguyên.", + "resource-policies.edit.page.heading": "Chỉnh sửa chính sách tài nguyên", + "resource-policies.edit.page.other-failure.content": "Đã xảy ra lỗi khi chỉnh sửa chính sách phân quyền. Người dùng\/ nhóm người dùng đã được cập nhật thành công.", + "resource-policies.edit.page.success.content": "Hành động thành công", + "resource-policies.edit.page.target-failure.content": "Đã xảy ra lỗi khi chỉnh sửa người dùng\/ nhóm người dùng trong chính sách phân quyền.", + "resource-policies.edit.page.title": "Chỉnh sửa chính sách phân quyền", + "resource-policies.form.action-type.label": "Lựa chọn kiểu hành động", + "resource-policies.form.action-type.required": "Bạn cần phải lựa chọn hành động chính sách phân quyền.", + "resource-policies.form.date.end.label": "Ngày kết thúc", + "resource-policies.form.date.start.label": "Ngày bắt đầu", + "resource-policies.form.description.label": "Mô tả", + "resource-policies.form.eperson-group-list.label": "Người hoặc nhóm người dùng được cấp quyền", + "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.header": "Không thể thay đổi kiểu", + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "Không thể thay thế nhóm người dùng bằng người dùng.", + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "Không thể thay thế người dùng bằng nhóm người dùng.", + "resource-policies.form.eperson-group-list.modal.text2": "Xóa chính sách phân quyền hiện tại và tạo chính sách mới với kiểu mong muốn.", + "resource-policies.form.eperson-group-list.select.btn": "Lựa chọn", + "resource-policies.form.eperson-group-list.tab.eperson": "Tìm kiếm người dùng", + "resource-policies.form.eperson-group-list.tab.group": "Tìm kiếm một nhóm người dùng", + "resource-policies.form.eperson-group-list.table.headers.action": "Hành động", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", + "resource-policies.form.eperson-group-list.table.headers.name": "Tên", + "resource-policies.form.name.label": "Tên", + "resource-policies.form.policy-type.label": "Lựa chọn kiểu chính sách", + "resource-policies.form.policy-type.required": "Bạn cần lựa chọn kiểu chính sách tài nguyên.", + "resource-policies.table.headers.action": "Quyền", + "resource-policies.table.headers.date.end": "Ngày kết thúc", + "resource-policies.table.headers.date.start": "Ngày bắt đầu", + "resource-policies.table.headers.edit": "Chỉnh sửa", + "resource-policies.table.headers.edit.group": "Chỉnh sửa nhóm", + "resource-policies.table.headers.edit.policy": "Chỉnh sửa chính sách", + "resource-policies.table.headers.eperson": "Người dùng", + "resource-policies.table.headers.group": "Nhóm", + "resource-policies.table.headers.id": "ID", + "resource-policies.table.headers.name": "Tên", + "resource-policies.table.headers.policyType": "kiểu", + "resource-policies.table.headers.title.for.bitstream": "Chính sách tệp dữ liệu số", + "resource-policies.table.headers.title.for.bundle": "Chính sách gói dữ liệu số", + "resource-policies.table.headers.title.for.collection": "Chính sách bộ sưu tập", + "resource-policies.table.headers.title.for.community": "Chính sách đơn vị", + "resource-policies.table.headers.title.for.item": "Chính sách tài liệu", + "resource-policies.table.headers.title.for.topic": "Chính sách topic", + + "search.breadcrumbs": "Tìm kiếm", + "search.browse.item-back": "Quay lại kết quả tìm kiếm", + "search.filters.applied.f.author": "Tác giả", + "search.filters.applied.f.birthDate.max": "Ngày sinh kết thúc", + "search.filters.applied.f.birthDate.min": "Ngày sinh bắt đầu", + "search.filters.applied.f.dateIssued.max": "Ngày kết thúc", + "search.filters.applied.f.dateIssued.min": "Ngày bắt đầu", + "search.filters.applied.f.dateSubmitted": "Ngày đăng", + "search.filters.applied.f.discoverable": "Tài liệu cá nhân", + "search.filters.applied.f.entityType": "Kiểu tài liệu", + "search.filters.applied.f.has_content_in_original_bundle": "Có tệp", + "search.filters.applied.f.itemtype": "Kiểu", + "search.filters.applied.f.jobTitle": "Chức danh", + "search.filters.applied.f.namedresourcetype": "Trạng thái", + "search.filters.applied.f.subject": "Chủ đề", + "search.filters.applied.f.submitter": "Người gửi", + "search.filters.applied.f.withdrawn": "Tài liệu ẩn", + "search.filters.discoverable.false": "Có", + "search.filters.discoverable.true": "Không", + "search.filters.entityType.JournalIssue": "Kỳ của tạp chí", + "search.filters.entityType.JournalVolume": "Số tập cảu tạp chí", + "search.filters.entityType.OrgUnit": "Đơn vị tổ chức", + "search.filters.filter.author.head": "Tác giả", + "search.filters.filter.author.label": "Tìm kiếm tên tác giả", + "search.filters.filter.author.placeholder": "Tên tác giả", + "search.filters.filter.birthDate.head": "Ngày sinh", + "search.filters.filter.birthDate.label": "Tìm kiếm ngày sinh", + "search.filters.filter.birthDate.placeholder": "Ngày sinh", + "search.filters.filter.collapse": "Thu hẹp bộ lọc", + "search.filters.filter.creativeDatePublished.head": "Ngày xuất bản", + "search.filters.filter.creativeDatePublished.label": "Tìm kiếm ngày xuất bản", + "search.filters.filter.creativeDatePublished.placeholder": "Ngày xuất bản", + "search.filters.filter.creativeWorkEditor.head": "Người biên tập", + "search.filters.filter.creativeWorkEditor.label": "Tìm kiếm người biên tập", + "search.filters.filter.creativeWorkEditor.placeholder": "Người biên tập", + "search.filters.filter.creativeWorkKeywords.head": "Chủ đề", + "search.filters.filter.creativeWorkKeywords.label": "Tìm kiếm chủ đề", + "search.filters.filter.creativeWorkKeywords.placeholder": "Chủ đề", + "search.filters.filter.creativeWorkPublisher.head": "Nhà xuất bản", + "search.filters.filter.creativeWorkPublisher.label": "Tìm kiếm nhà xuất bản", + "search.filters.filter.creativeWorkPublisher.placeholder": "Nhà xuất bản", + "search.filters.filter.dateIssued.head": "Thời gian xuất bản", + "search.filters.filter.dateIssued.max.label": "Kết thúc", + "search.filters.filter.dateIssued.max.placeholder": "Thời gian tối đa", + "search.filters.filter.dateIssued.min.label": "Bắt đầu", + "search.filters.filter.dateIssued.min.placeholder": "Thời gian tối thiểu", + "search.filters.filter.dateSubmitted.head": "Ngày gửi", + "search.filters.filter.dateSubmitted.label": "Tìm kiếm ngày gửi", + "search.filters.filter.dateSubmitted.placeholder": "Ngày gửi", + "search.filters.filter.discoverable.head": "Tài liệu cá nhân", + "search.filters.filter.entityType.head": "Kiểu thực thể", + "search.filters.filter.entityType.label": "Tìm kiếm kiểu thực thể", + "search.filters.filter.entityType.placeholder": "Kiểu thực thể", + "search.filters.filter.expand": "Mở rộng bộ lọc", + "search.filters.filter.has_content_in_original_bundle.head": "Có tệp", + "search.filters.filter.itemtype.head": "Kiểu tài liệu", + "search.filters.filter.itemtype.label": "Tìm kiếm kiểu tài liệu", + "search.filters.filter.itemtype.placeholder": "Kiểu tài liệu", + "search.filters.filter.jobTitle.head": "Chức danh", + "search.filters.filter.jobTitle.label": "Tìm kiếm chức danh", + "search.filters.filter.jobTitle.placeholder": "Chức danh", + "search.filters.filter.knowsLanguage.head": "Ngôn ngữ", + "search.filters.filter.knowsLanguage.label": "Tìm kiếm ngôn ngữ", + "search.filters.filter.knowsLanguage.placeholder": "Ngôn ngữ", + "search.filters.filter.namedresourcetype.head": "Trạng thái", + "search.filters.filter.namedresourcetype.label": "Tìm kiếm trạng thái", + "search.filters.filter.namedresourcetype.placeholder": "Trạng thái", + "search.filters.filter.objectpeople.head": "Người", + "search.filters.filter.objectpeople.label": "Tìm kiếm tên người", + "search.filters.filter.objectpeople.placeholder": "Người", + "search.filters.filter.organizationAddressCountry.head": "Quốc gia", + "search.filters.filter.organizationAddressCountry.label": "Tìm kiếm quốc gia", + "search.filters.filter.organizationAddressCountry.placeholder": "Quốc gia", + "search.filters.filter.organizationAddressLocality.head": "Thành phố", + "search.filters.filter.organizationAddressLocality.label": "Tìm kiếm thành phố", + "search.filters.filter.organizationAddressLocality.placeholder": "Thành phố", + "search.filters.filter.organizationFoundingDate.head": "Ngày thành lập", + "search.filters.filter.organizationFoundingDate.label": "Tìm kiếm ngày thành lập", + "search.filters.filter.organizationFoundingDate.placeholder": "Ngày thành lập", + "search.filters.filter.scope.head": "Phạm vi", + "search.filters.filter.scope.label": "Tìm kiếm phạm vi giới hạn", + "search.filters.filter.scope.placeholder": "phạm vi giới hạn", + "search.filters.filter.show-less": "Thu hẹp", + "search.filters.filter.show-more": "Xem thêm", + "search.filters.filter.show-tree": "Duyệt cây {{ name }}", + "search.filters.filter.subject.head": "Chủ đề", + "search.filters.filter.subject.label": "Tìm kiếm chủ đề", + "search.filters.filter.subject.placeholder": "Chủ đề", + "search.filters.filter.submitter.head": "Người gửi", + "search.filters.filter.submitter.label": "Tìm kiếm người gửi", + "search.filters.filter.submitter.placeholder": "Người gửi", + "search.filters.filter.withdrawn.head": "Tài liệu ẩn", + "search.filters.has_content_in_original_bundle.false": "Không", + "search.filters.has_content_in_original_bundle.true": "Có", + "search.filters.head": "Bộ lọc", + "search.filters.reset": "Làm mới bộ lọc", + "search.filters.search.submit": "Xác nhận", + "search.filters.withdrawn.false": "Không", + "search.filters.withdrawn.true": "Có", + "search.form.scope.all": "Toàn bộ thư viện", + "search.form.search": "Tìm kiếm", + "search.form.search_dspace": "tất cả kho lưu trữ", + "search.results.empty": "Tìm kiếm của bạn không trả về kết quả.", + "search.results.head": "Kết quả tìm kiếm", + "search.results.no-results": "Tìm kiếm của bạn không trả về kết quả. Bạn có gặp khó khăn khi thực hiện tìm kiếm? Hãy thử lại bằng cách", + "search.results.no-results-link": "đặt từ khóa tìm vào trong cặp dấu ngoặc kép", + "search.results.response.500": "Đã xảy ra lỗi trong khi thực hiện truy vấn vui lòng thử lại sau", + "search.results.view-result": "Xem", + "search.search-form.placeholder": "Từ khóa tìm kiếm", + "search.sidebar.close": "Quay lại kết quả tìm kiếm", + "search.sidebar.filters.title": "Bộ lọc", + "search.sidebar.open": "Công cụ tìm kiếm", + "search.sidebar.results": "kết quả", + "search.sidebar.settings.rpp": "Kết quả mỗi trang", + "search.sidebar.settings.sort-by": "Sắp xếp theo", + "search.sidebar.settings.title": "Cài đặt", + "search.switch-configuration.title": "Xem", + "search.title": "Tìm kiếm", + "search.view-switch.show-detail": "Xem chi tiết", + "search.view-switch.show-grid": "Hiển thị dưới dạng lưới", + "search.view-switch.show-list": "Hiển thị dưới dạng danh sách", + + "sorting.ASC": "Tăng dần", + "sorting.dc.date.accessioned.ASC": "Tăng dần theo ngày lưu trữ", + "sorting.dc.date.accessioned.DESC": "Giảm dần theo ngày lưu trữ", + "sorting.dc.date.issued.ASC": "Tăng dần theo ngày", + "sorting.dc.date.issued.DESC": "Giảm dần theo ngày", + "sorting.dc.title.ASC": "Tăng dần theo nhan đề", + "sorting.dc.title.DESC": "Giảm dần theo nhan đề", + "sorting.DESC": "Giảm dần", + "sorting.lastModified.ASC": "Tăng dần theo lần chỉnh sửa cuối cùng", + "sorting.lastModified.DESC": "Giảm dần theo lần chỉnh sửa cuối cùng", + "sorting.score.ASC": "Liên quan ít nhất", + "sorting.score.DESC": "Liên quan nhiều nhất", + + "statistics.breadcrumbs": "Thống kê", + "statistics.header": "Thống kê theo {{ scope }}", + "statistics.page.no-data": "Không có dữ liệu", + "statistics.table.header.views": "Xem", + "statistics.table.no-data": "Không có dữ liệu", + "statistics.table.title.TopCities": "Top thành phố xem nhiều nhất", + "statistics.table.title.TopCountries": "Top quốc gia xem nhiều nhất", + "statistics.table.title.TotalDownloads": "Truy cập tệp", + "statistics.table.title.TotalVisits": "Tổng số truy cập", + "statistics.table.title.TotalVisitsPerMonth": "Tổng số lượt truy cập theo từng tháng", + "statistics.title": "Thống kê", + + + "submission.edit.breadcrumbs": "Chỉnh sửa đăng ký", + "submission.edit.title": "Chỉnh sửa đăng ký", + "submission.general.cancel": "Hủy", + "submission.general.cannot_submit": "Bạn không có quyền chỉnh sửa đăng ký đã gửi .", + "submission.general.deposit": "Tải lên", + "submission.general.discard.confirm.cancel": "Hủy", + "submission.general.discard.confirm.info": "Không thể hoàn tác thao tác. Bạn có chắc chắn không?", + "submission.general.discard.confirm.submit": "Có tôi đồng ý", + "submission.general.discard.confirm.title": "Hủy đăng ký", + "submission.general.discard.submit": "Hủy", + "submission.general.info.pending-changes": "Thay đổi chưa được lưu", + "submission.general.info.saved": "Lưu", + "submission.general.save": "Lưu", + "submission.general.save-later": "Lưu lại", + "submission.import-external.back-to-my-dspace": "Trở lại thư viện số", + "submission.import-external.page.hint": "Nhập vào một truy vấn phía trên để tìm các tài liệu trên trang web để nhập vào thư viện số", + "submission.import-external.page.title": "Nhập thông tin mô tả từ nguồn bên ngoài", + "submission.import-external.preview.button.import": "Bắt đầu gửi", + "submission.import-external.preview.error.import.body": "Đã xảy ra lỗi trong quá trình nhập tài liệu từ nguồn bên ngoài", + "submission.import-external.preview.error.import.title": "Lỗi gửi đi", + "submission.import-external.preview.subtitle": "Siêu dữ liệu bên dưới được nhập từ nguồn bên ngoài. Nó sẽ được điền vào trước khi bạn gửi đi.", + "submission.import-external.preview.title": "Xem trước tài liệu", + "submission.import-external.preview.title.Journal": "Xem trước Tạp chí", + "submission.import-external.preview.title.none": "Xem trước tài liệu", + "submission.import-external.preview.title.OrgUnit": "Xem trước tổ chức", + "submission.import-external.preview.title.Person": "Xem trước Tác giả\/nhà nghiên cứu", + "submission.import-external.preview.title.Project": "Xem trước dự án", + "submission.import-external.preview.title.Publication": "Xem trước ấn phẩm", + "submission.import-external.search.button": "Tìm kiếm", + "submission.import-external.search.button.hint": "Nhập một từ để tìm kiếm", + "submission.import-external.search.placeholder": "Tìm kiếm nguồn bên ngoài", + "submission.import-external.search.source.hint": "Chọn một nguồn bên ngoài", + "submission.import-external.source.ads": "NASA\/ADS", + "submission.import-external.source.arxiv": "arXiv", + "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.datacite": "submission.import-external.source.datacite", + "submission.import-external.source.epo": "Văn phòng Bằng sáng chế Châu Âu (EPO)", + "submission.import-external.source.lcname": "Tên Thư viện Quốc hội", + "submission.import-external.source.loading": "Đang tải lên ...", + "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.orcid": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.pubmed": "Pubmed", + "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scopus": "SciELO", + "submission.import-external.source.sherpaJournal": "Tạp chí SHERPA", + "submission.import-external.source.sherpaJournalIssn": "Số ISSN của tạp chí SHERPA", + "submission.import-external.source.sherpaPublisher": "Nhà xuất bản SHERPA", + "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.wos": "Web Of Science", + "submission.import-external.title": "Nhập thông tin mô tả từ nguồn bên ngoài", + "submission.import-external.title.Journal": "Nhập tạp chí từ nguồn bên ngoài", + "submission.import-external.title.JournalIssue": "Nhập kỳ ấn phẩm tạp chí từ nguồn bên ngoài", + "submission.import-external.title.JournalVolume": "Nhập một tập của tạp chí từ nguồn bên ngoài", + "submission.import-external.title.none": "Nhập thông tin mô tả từ nguồn bên ngoài", + "submission.import-external.title.OrgUnit": "Nhập nhà xuất bản từ nguồn bên ngoài", + "submission.import-external.title.Person": "Nhập một tác giả\/ nhà nghiên cứu từ nguồn bên ngoài", + "submission.import-external.title.Project": "Nhập một dự án từ nguồn bên ngoài", + "submission.import-external.title.Publication": "Nhập một ấn phẩm từ nguồn bên ngoài", + "submission.sections.accesses.form.access-condition-hint": "Chọn chính sách phân quyền để áp dụng cho biểu ghi khi nó được nhập vào hệ thống.", + "submission.sections.accesses.form.access-condition-label": "Loại chính sách truy cập", + "submission.sections.accesses.form.date-required": "Thông tin thời gian là bắt buộc.", + "submission.sections.accesses.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", + "submission.sections.accesses.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", + "submission.sections.accesses.form.discoverable-description": "Khi được chọn biểu ghi này sẽ có thể được tìm thấy trong các chức năng tìm kiếm\/duyệt. Khi bỏ chọn biểu ghi sẽ chỉ có sẵn qua đường dẫn trực tiếp và sẽ không bao giờ xuất hiện trong tìm kiếm\/duyệt.", + "submission.sections.accesses.form.discoverable-label": "Có thể khám phá", + "submission.sections.accesses.form.from-hint": "Chọn ngày mà quyền được áp dụng", + "submission.sections.accesses.form.from-label": "Cấp quyền truy cập từ", + "submission.sections.accesses.form.from-placeholder": "Từ", + "submission.sections.accesses.form.group-label": "Nhóm", + "submission.sections.accesses.form.group-required": "Trường Nhóm là bắt buộc.", + "submission.sections.accesses.form.until-hint": "Chọn ngày mà quyền được áp dụng", + "submission.sections.accesses.form.until-label": "Cấp quyền truy cập cho đến khi", + "submission.sections.accesses.form.until-placeholder": "Cho tới khi", + "submission.sections.ccLicense.change": "Thay đổi loại giấy phép…", + "submission.sections.ccLicense.confirmation": "Tôi đồng ý với giấy phép ở trên", + "submission.sections.ccLicense.link": "Bạn có lựa chọn theo giấy phép này:", + "submission.sections.ccLicense.none": "Không có giấy phép nào", + "submission.sections.ccLicense.option.select": "Lựa chọn tùy chọn…", + "submission.sections.ccLicense.select": "Lựa chọn loại giấy phép…", + "submission.sections.ccLicense.type": "Loại giấy phép", + "submission.sections.describe.relationship-lookup.close": "Đóng", + "submission.sections.describe.relationship-lookup.external-source.added": "Thêm thành công tài liệu nội bộ vào mục đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Nhập thiết bị từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Nhập sự kiện từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Nhập sự kiện từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Nhập tác giả từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Nhập tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.JournalIssue": "Nhập số kỳ của tạp chí từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.JournalVolume": "Nhập số tập của tạp chí từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Nhập tài liệu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Nhập tổ chức từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Nhập bằng sáng chế từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Nhập dự án từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Nhập ấn phẩm từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Kiểm soát", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Nhập dưới dạng một kiểm soát nội bộ mới", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Hủy", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Chọn một bộ sưu tập để thêm các tài liệu mới", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Thực thể", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Nhập vào một thực thể nội bộ mới", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Nhập từ arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Nhập từ tên LC", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Nhập từ ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Nhập từ PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Nhập từ tạp chí Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Nhập từ nhà xuất bản Sherpa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Nhập liệu", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Thêm thành công tác giả nội bộ bộ vào mục đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Nhập thành công và thêm tác giả bên ngoài vào mục đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Nhập tác giả từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Thực thể mới đã được thêm!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Dự án", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Thêm thành công tạp chí đã chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Nhập thành công tạp chí bên ngoài vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Nhập tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.added.local-entity": "Thêm thành công số kỳ tạp chí nội bộ vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.added.new-entity": "Nhập thành công và thêm số kỳ của tạp chí bên ngoài vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalIssue.title": "Nhập số kỳ của tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.added.local-entity": "Thêm thành công số tập của tạp chí nội bộ vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.added.new-entity": "Nhập và thêm thành công số tập của tạp chí bên ngoài vào mục lựa chọn", + "submission.sections.describe.relationship-lookup.external-source.import-modal.JournalVolume.title": "Nhập số tập của tạp chí từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Chọn một phù hợp:", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Lưu một biến thể tên mới", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Bạn có muốn lưu \"{{ value }}\" làm tên biến thể cho người này để bạn và những người khác có thể sử dụng lại cho những lần gửi sau không? Nếu không bạn vẫn có thể sử dụng cho lần gửi này\"", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Chỉ sử dụng cho lần gửi này", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Bỏ chọn tất cả", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Bỏ chọn trang", + "submission.sections.describe.relationship-lookup.search-tab.loading": "Đang tải...", + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Tìm kiếm truy vấn", + "submission.sections.describe.relationship-lookup.search-tab.search": "Đi", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Tìm kiếm...", + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Lựa chọn tất cả", + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Lựa chọn trang", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Tệp dữ liệu nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Gói dữ liệu nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Tác giả nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Tìm kiếm đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Nhà tài trợ của dự án", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Tìm kiếm cơ quan cấp vốn", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Tìm kiếm tài trợ", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Số kỳ của tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Số tập của tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Ấn phẩm của tác giả", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Số kỳ của tạp chsi nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Số tập của tạp chí nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Tên LC ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Đơn vị tổ chức nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Tác giả nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Dự án nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Ấn phẩm nội bộ ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Tạp chí Sherpa ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Nhà xuất bản Sherpa ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Chuyển đổi danh mục thả xuống", + "submission.sections.describe.relationship-lookup.selected": "Lựa chọn {{ size }} tài liệu", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Lựa chọn cảu bạn hiện đang trống.", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Tìm kiếm...", + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Cài đặt", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Lựa chọn hiện tại ({{ count }})", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Lựa chọn tệp dữ liệu", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Lựa chọn gói dữ liệu", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Lựa chọn tác giả.", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Lựa chọn đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Lựa chọn đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Lựa chọn tài trợ", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Lựa chọn kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Lựa chọn tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Lựa chọn số tập của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Lựa chọn tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Lựa chọn số kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Lựa chọn số tập của tạp chí", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Lựa chọn đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Lựa chọn tác giả", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Lựa chọn dự án", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Lựa chọn ấn phẩm", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Lựa chọn kết quả", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Kết quả tìm kiếm", + "submission.sections.describe.relationship-lookup.title.DataFile": "Tệp dữ liệu", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Gói dữ liệu", + "submission.sections.describe.relationship-lookup.title.FundingAgency": "Đơn vị tài trợ", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Tác giả", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Đơn vị tổ chức chính", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Nhà tài trợ của dự án", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Đơn vị tài trợ", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Tài trợ", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Số kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Tạp chí", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Số tập cảu tạp chí", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Dự án", + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Ấn phẩm", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Số kỳ của tạp chí", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Số tập của tạp chí", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Đơn vị tổ chức", + "submission.sections.describe.relationship-lookup.title.Person": "Tác giả", + "submission.sections.describe.relationship-lookup.title.Project": "Dự án", + "submission.sections.describe.relationship-lookup.title.Publication": "Ấn phẩm", + "submission.sections.general.add-more": "Thêm nhiều hơn", + "submission.sections.general.cannot_deposit": "Không thể hoàn tất quá trình nhập dữ liệu do lỗi trong biểu mẫu.
    Vui lòng điền vào tất cả các trường bắt buộc để hoàn tất quá trình nhập liệu.", + "submission.sections.general.collection": "Bộ sưu tập", + "submission.sections.general.deposit_error_notice": "Đã xảy ra sự cố khi gửi tài liệu vui lòng thử lại sau.", + "submission.sections.general.deposit_success_notice": "Đã gửi thành công.", + "submission.sections.general.discard_error_notice": "Đã xảy ra sự cố khi hủy tài liệu vui lòng thử lại sau.", + "submission.sections.general.discard_success_notice": "Đã hủy thành công.", + "submission.sections.general.metadata-extracted": "Siêu dữ liệu mới đã được trích xuất và thêm vào phần {{sectionId}} phần.", + "submission.sections.general.metadata-extracted-new-section": " {{sectionId}} mới phần đã được thêm vào thông tin gửi đi.", + "submission.sections.general.no-collection": "Không tìm thấy bộ sưu tập", + "submission.sections.general.no-sections": "Không có tùy chọn", + "submission.sections.general.save_error_notice": "Đã xảy ra sự cố khi lưu tài liệu vui lòng thử lại sau.", + "submission.sections.general.save_success_notice": "Lưu thành công.", + "submission.sections.general.search-collection": "Tìm kiếm bộ sưu tập", + "submission.sections.general.sections_not_valid": "Không có phần nào hoàn thành.", + "submission.sections.license.granted-label": "Xác nhận giấy phép", + "submission.sections.license.notgranted": "Bạn phải chấp nhận giấy phép", + "submission.sections.license.required": "Bạn phải chấp nhận giấy phép", + "submission.sections.sherpa.error.message": "Đã xảy ra lỗi trong quá trình truy xuất thông tin", + "submission.sections.sherpa.publication.information": "Thông tin ấn phẩm", + "submission.sections.sherpa.publication.information.issns": "ISSNs", + "submission.sections.sherpa.publication.information.publishers": "Nhà xuất bản", + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + "submission.sections.sherpa.publication.information.title": "Nhan đề", + "submission.sections.sherpa.publication.information.url": "URL", + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + "submission.sections.sherpa.publisher.policy": "Chính sách của nhà xuất bản", + "submission.sections.sherpa.publisher.policy.conditions": "Điều kiện", + "submission.sections.sherpa.publisher.policy.description": "Thông tin dưới đây được tìm thấy thông qua Sherpa Romeo. Dựa trên các chính sách của nhà xuất bản của bạn hệ thống sẽ đưa ra lời khuyên về việc có cần thiết phải hạn chế hay không và\/hoặc những tệp nào mà bạn được phép tải lên. Nếu bạn có thắc mắc vui lòng liên hệ với quản trị viên.", + "submission.sections.sherpa.publisher.policy.embargo": "Hạn chế", + "submission.sections.sherpa.publisher.policy.license": "Bản quyền", + "submission.sections.sherpa.publisher.policy.location": "Vị trí", + "submission.sections.sherpa.publisher.policy.more.information": "Để biết thêm thông tin vui lòng xem đường dẫn dưới đây:", + "submission.sections.sherpa.publisher.policy.noembargo": "Không hạn chế", + "submission.sections.sherpa.publisher.policy.nolocation": "Trống", + "submission.sections.sherpa.publisher.policy.openaccess": "Các đường dẫn truy cập mở được cho phép bởi chính sách của tạp chí này được liệt kê bên dưới theo phiên bản bài viết. Nhấp vào một đường dẫn để xem chi tiết", + "submission.sections.sherpa.publisher.policy.prerequisites": "Điều kiện cần", + "submission.sections.sherpa.publisher.policy.refresh": "Làm mới", + "submission.sections.sherpa.publisher.policy.version": "Phiên bản", + "submission.sections.sherpa.record.information": "Thông tin biểu ghi", + "submission.sections.sherpa.record.information.date.created": "Ngày tạo", + "submission.sections.sherpa.record.information.date.modified": "Lần chỉnh sửa gần nhất", + "submission.sections.sherpa.record.information.id": "ID", + "submission.sections.sherpa.record.information.uri": "URL", + "submission.sections.sherpa-policy.title-empty": "Không có chính sách của nhà xuất bản. Nếu tác phẩm của bạn có ISSN liên quan vui lòng nhập nó ở trên để xem các chính sách truy cập mở của nhà xuất bản (nếu có)", + "submission.sections.status.errors.aria": "có lỗi", + "submission.sections.status.errors.title": "Lỗi", + "submission.sections.status.info.aria": "Thông tin bổ sung", + "submission.sections.status.info.title": "Thông tin bổ sung", + "submission.sections.status.valid.aria": "là hợp lệ", + "submission.sections.status.valid.title": "Hợp lệ", + "submission.sections.status.warnings.aria": "có cảnh báo", + "submission.sections.status.warnings.title": "Cảnh báo", + "submission.sections.submit.progressbar.accessCondition": "Điều kiện truy cập biểu ghi", + "submission.sections.submit.progressbar.CClicense": "Bằng sáng chế", + "submission.sections.submit.progressbar.describe.recycle": "Tái chế", + "submission.sections.submit.progressbar.describe.stepcustom": "Mô tả", + "submission.sections.submit.progressbar.describe.stepone": "Mô tả", + "submission.sections.submit.progressbar.describe.steptwo": "Mô tả", + "submission.sections.submit.progressbar.detect-duplicate": "Các trùng lặp xảy ra", + "submission.sections.submit.progressbar.license": "Giấy phép tiền gửi", + "submission.sections.submit.progressbar.sherpaPolicies": "Chính sách truy cập mở của nhà xuất bản", + "submission.sections.submit.progressbar.sherpapolicy": "Chính sách", + "submission.sections.submit.progressbar.upload": "Tải tệp lên", + "submission.sections.toggle.aria.close": "Thu hẹp phần {{sectionHeader}}", + "submission.sections.toggle.aria.open": "Mở rộng phần {{sectionHeader}}", + "submission.sections.toggle.close": "Đóng phiên", + "submission.sections.toggle.open": "Mở phiên mới", + "submission.sections.upload.delete.confirm.cancel": "Hủy", + "submission.sections.upload.delete.confirm.info": "Không thể hoàn tác thao tác này. Bạn có chắc không?", + "submission.sections.upload.delete.confirm.submit": "Có tôi chắc chắn", + "submission.sections.upload.delete.confirm.title": "Xóa dữ liệu số", + "submission.sections.upload.delete.submit": "Xóa", + "submission.sections.upload.download.title": "Tải dữ liệu số", + "submission.sections.upload.drop-message": "Kéo tệp đính kèm vào tài liệu", + "submission.sections.upload.edit.title": "Chỉnh sửa dữ liệu số", + "submission.sections.upload.form.access-condition-hint": "Chọn quyền truy cập áp dụng trên tệp tin khi biểu ghi được biên mục vào hệ thống.", + "submission.sections.upload.form.access-condition-label": "Loại điều kiện truy cập", + "submission.sections.upload.form.date-required": "Ngày yêu cầu", + "submission.sections.upload.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", + "submission.sections.upload.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày kết thúc cấp quyền truy cập", + "submission.sections.upload.form.from-hint": "Chọn ngày mà quyền được áp dụng", + "submission.sections.upload.form.from-label": "Cấp quyền truy cập từ", + "submission.sections.upload.form.from-placeholder": "Từ", + "submission.sections.upload.form.group-label": "Nhóm", + "submission.sections.upload.form.group-required": "Nhóm yêu cầu.", + "submission.sections.upload.form.until-hint": "Chọn ngày hết hạn quyền truy cập", + "submission.sections.upload.form.until-label": "Cấp quyền truy cập cho đến khi", + "submission.sections.upload.form.until-placeholder": "Đến khi", + "submission.sections.upload.header.policy.default.nolist": "Các tệp tải lên trong bộ sưu tập {{collectionName}} sẽ cso quyền truy cập thep các nhóm sau:", + "submission.sections.upload.header.policy.default.withlist": "Xin lưu ý rằng các tệp đã tải lên trong bộ sưu tập {{collectionName}} sẽ có thể truy cập được ngoài những gì được quyết định rõ ràng cho một tệp với (các) nhóm sau:", + "submission.sections.upload.info": "Tại đây bạn sẽ tìm thấy tất cả các tệp hiện có trong tài liệu. Bạn có thể cập nhật thông tin mô tả tệp và điều kiện truy cập hoặc tải lên tệp bổ sung chỉ cần kéo và thả chúng ở mọi nơi trong trang", + "submission.sections.upload.no-entry": "Không", + "submission.sections.upload.no-file-uploaded": "Không có tệp tải lên.", + "submission.sections.upload.save-metadata": "Lưu thông tin mô tả", + "submission.sections.upload.undo": "Hủy", + "submission.sections.upload.upload-failed": "Tải lên lỗi", + "submission.sections.upload.upload-successful": "Tải lên thành công", + "submission.submit.breadcrumbs": "Gửi mới", + "submission.submit.title": "Gửi mới", + "submission.workflow.generic.delete": "Xóa", + "submission.workflow.generic.delete-help": "Nếu bạn muốn hủy tài liệu này hãy chọn \"Delete\". Sau đó bạn sẽ được yêu cầu xác nhận.\"", + "submission.workflow.generic.edit": "Chỉnh sửa", + "submission.workflow.generic.edit-help": "Chọn tùy chọn này để thay đổi thông tin mô tả của tài liệu.", + "submission.workflow.generic.view": "Xem", + "submission.workflow.generic.view-help": "Chọn tùy chọn này để xem dữ liệu cảu tài liệu.", + "submission.workflow.tasks.claimed.approve": "Chấp nhận", + "submission.workflow.tasks.claimed.approve_help": "Nếu bạn đã xem xét tài liệu và thấy phù hợp để đưa vào bộ sưu tập hãy chọn \"Approve\".", + "submission.workflow.tasks.claimed.edit": "Chỉnh sửa", + "submission.workflow.tasks.claimed.edit_help": "Chọn tùy chọn này để thay đổi thông tin mô tả của tài liệu.", + "submission.workflow.tasks.claimed.reject.reason.info": "Vui lòng nhập lý do từ chối gửi của bạn vào ô bên dưới cho biết liệu người gửi có thể khắc phục sự cố và gửi lại hay không.", + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Mô tả lý do từ chối", + "submission.workflow.tasks.claimed.reject.reason.submit": "Từ chối tài liệu", + "submission.workflow.tasks.claimed.reject.reason.title": "Lý do", + "submission.workflow.tasks.claimed.reject.submit": "Từ chối", + "submission.workflow.tasks.claimed.reject_help": "Nếu bạn đã xem xét tài liệu và thấy không phù hợp để đưa vào bộ sưu tập hãy chọn \"Reject\". Sau đó bạn sẽ được yêu cầu nhập một thông báo cho biết lý do tại sao tài liệu đó không phù hợp và liệu người gửi có nên thay đổi điều gì đó và gửi lại hay không.", + "submission.workflow.tasks.claimed.return": "Trả lại nhiệm vụ", + "submission.workflow.tasks.claimed.return_help": "Trả tác vụ về nhóm để người dùng khác có thể thực hiện tác vụ.", + "submission.workflow.tasks.generic.error": "Đã xảy ra lỗi trong khi vận hành ...", + "submission.workflow.tasks.generic.processing": "Đang xử lý...", + "submission.workflow.tasks.generic.submitter": "Người gửi", + "submission.workflow.tasks.generic.success": "Hoạt động thành công", + "submission.workflow.tasks.pool.claim": "Nhận nhiệm vụ", + "submission.workflow.tasks.pool.claim_help": "Giao nhiệm vụ này cho chính bạn.", + "submission.workflow.tasks.pool.hide-detail": "Ẩn chi tiết", + "submission.workflow.tasks.pool.show-detail": "Xem chi tiết", + "submission.workspace.generic.view": "Xem", + "submission.workspace.generic.view-help": "Chọn tủy chọn để xem thông tin mô tả của tài liệu", + + "thumbnail.default.alt": "Hình ảnh thu nhỏ", + "thumbnail.default.placeholder": "Không có ảnh thu nhỏ nào", + "thumbnail.orgunit.alt": "Logo Đơn vị tổ chức", + "thumbnail.orgunit.placeholder": "Hỉnh ảnh giữ chỗ của đơn vị tổ chức", + "thumbnail.person.alt": "Ảnh hồ sơ", + "thumbnail.person.placeholder": "Không có ảnh hồ sơ nào", + "thumbnail.project.alt": "Logo dự án", + "thumbnail.project.placeholder": "Hình ảnh giữ chỗ của dự án", + + "title": "DSpace", + + "vocabulary-treeview.header": "Chế độ xem phân cấp", + "vocabulary-treeview.info": "Chọn một chủ đề để thêm làm bộ lọc tìm kiếm", + "vocabulary-treeview.load-more": "Xem thêm", + "vocabulary-treeview.search.form.reset": "Khôi phục", + "vocabulary-treeview.search.form.search": "Tìm kiếm", + "vocabulary-treeview.search.no-result": "Không có tài liệu nào hiển thị", + "vocabulary-treeview.tree.description.nsi": "Chỉ số Norwegian Science", + "vocabulary-treeview.tree.description.srsc": "Danh mục chủ đề", + + "uploader.browse": "duyệt", + "uploader.delete.btn-title": "Xóa", + "uploader.drag-message": "Kéo & thả tệp tại đây", + "uploader.processing": "Đang xử lý", + "uploader.queue-length": "Chiều dài hàng đợi", + + "virtual-metadata.delete-item.info": "Chọn kiểu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", + "virtual-metadata.delete-item.modal-head": "Siêu dữ liệu ảo của mối quan hệ này", + "virtual-metadata.delete-relationship.modal-head": "Chọn các tài liệu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", + + "supervisedWorkspace.search.results.head": "Supervised Items", + + + "workflow.search.results.head": "Tất cả nhiệm vụ", + "workflowAdmin.search.results.head": "Tiến trình làm việc của quản trị viên", + "workflow-item.delete.button.cancel": "Hủy", + "workflow-item.delete.button.confirm": "Xóa", + "workflow-item.delete.header": "Xóa tiến trình tài liệu", + "workflow-item.delete.notification.error.content": "Không thể xóa tiến trình tài liệu", + "workflow-item.delete.notification.error.title": "Đã xảy ra lỗi", + "workflow-item.delete.notification.success.content": " Tiến trình tài liệu này đã được xóa thành công", + "workflow-item.delete.notification.success.title": "Xóa", + "workflow-item.delete.title": "Xóa tiến trình tài liệu", + "workflow-item.edit.breadcrumbs": "Chỉnh sửa tiến trình tài liệu", + "workflow-item.edit.title": "Xem tiến trình tài liệu", + "workflow-item.send-back.button.cancel": "Hủy", + "workflow-item.send-back.button.confirm": "Gửi lại", + "workflow-item.send-back.header": "Gửi lại tiến trình tài liệucho người gửi", + "workflow-item.send-back.notification.error.content": "Không thể gửi lại tiến trình tài liệu cho người gửi", + "workflow-item.send-back.notification.error.title": "Đã xảy ra lỗi", + "workflow-item.send-back.notification.success.content": "Tiến trình tài liệu này đã được gửi lại thành công cho người gửi", + "workflow-item.send-back.notification.success.title": "Đã gửi lại cho người gửi", + "workflow-item.send-back.title": "Gửi lại tiến trình tài liệu cho người gửi", + "workflow-item.view.breadcrumbs": "Xem tiến trình", + "workspace.search.results.head": "Biểu ghi bạn đã tải lên", + "workspace-item.view.breadcrumbs": "Xem các tài liệu đang biên mục dở dang", + "workspace-item.view.title": "Xem các tài liệu đang biên mục dở dang", + + "idle-modal.extend-session": "Gia hạn phiên", + "idle-modal.header": "Phiên sẽ sớm hết hạn", + "idle-modal.info": "Vì lý do bảo mật các phiên của người dùng sẽ hết hạn sau {{timeToExpire}} phút không hoạt động. Phiên của bạn sẽ sớm hết hạn. Bạn muốn gia hạn hay đăng xuất?", + "idle-modal.log-out": "Đăng xuất", + + "researcher.profile.action.processing": "Đang xử lý…", + "researcher.profile.associated": "Hồ sơ nhà nghiên cứu đã được liên kết", + "researcher.profile.change-visibility.fail": "Đã xảy ra lỗi khi thay đổi chế độ hiển thị hồ sơ", + "researcher.profile.create.fail": "Đã có lỗi xảy ra trong khi tạo hồ sơ nhà nghiên cứu", + "researcher.profile.create.new": "Tạo mới", + "researcher.profile.create.success": "Đã tạo thành công hồ sơ nhà nghiên cứu", + "researcher.profile.delete": "Xóa", + "researcher.profile.expose": "Hiển thị", + "researcher.profile.hide": "Ẩn", + "researcher.profile.not.associated": "Hồ sơ nhà nghiên cứu chưa được liên kết", + "researcher.profile.private.visibility": "CÁ NHÂN", + "researcher.profile.public.visibility": "CÔNG CỘNG", + "researcher.profile.status": "Trạng thái:", + "researcher.profile.view": "Xem", + + "person.page.orcid": "ORCID", + "person.page.orcid.create": "Tạo một ID trên ORCID", + "person.page.orcid.funding-preferences": "Quỹ ưa thích", + "person.page.orcid.grant-authorizations": "Cấp quyền", + "person.page.orcid.granted-authorizations": "Quyền đã cấp", + "person.page.orcid.link": "Liên kết với ID ORCID", + "person.page.orcid.link.error.message": "Đã xảy ra lỗi khi kết nối hồ sơ với ORCID. Nếu sự cố vẫn tiếp tục xảy ra vui lòng liên hệ với quản trị viên.", + "person.page.orcid.link.processing": "Đang kết nối hồ sơ tới ORCID…", + "person.page.orcid.missing-authorizations": "Thiếu quyền", + "person.page.orcid.missing-authorizations-message": "Những quyền sau đang bị thiếu:", + "person.page.orcid.no-missing-authorizations-message": "Tuyệt! Ô này đang trống vì vậy bạn đã được cấp tất cả các quyền truy cập để sử dụng tất cả các chức năng do tổ chức của bạn cung cấp.", + "person.page.orcid.no-orcid-message": "Chưa có ID ORCID nào được liên kết. Bạn có thể click vào nút dưới đây để liên kết hồ sơ này với một tài khoản ORCID.", + "person.page.orcid.orcid-not-linked-message": "ID ORCID của hồ sơ này ({{ orcid }}) chưa được kết nối với tài khoản trên trang ORCID hoặc kết nối đã hết hạn.", + "person.page.orcid.profile-preferences": "Tham số của hồ sơ", + "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", + "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", + "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", + "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", + "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", + "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", + "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", + "person.page.orcid.sync-fundings.all": "Tất cả quỹ", + "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-fundings.mine": "Quỹ của tôi", + "person.page.orcid.sync-fundings.my_selected": "Quỹ đã chọn", + "person.page.orcid.synchronization-mode": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.batch": "Theo lô", + "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", + "person.page.orcid.synchronization-mode.manual": "Thủ công", + "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", + "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", + "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", + "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", + "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", + "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", + "person.page.orcid.sync-profile.affiliation": "Tổ chức", + "person.page.orcid.sync-profile.biographical": "Dữ liệu sinh trắc học", + "person.page.orcid.sync-profile.education": "Giáo dục", + "person.page.orcid.sync-profile.identifiers": "Định danh", + "person.page.orcid.sync-publications.all": "Tất cả ấn phẩm", + "person.page.orcid.sync-publications.disabled": "Đã ngừng kích hoạt", + "person.page.orcid.sync-publications.mine": "Ấn phẩm của tôi", + "person.page.orcid.sync-publications.my_selected": "Ấn phẩm đã chọn", + "person.page.orcid.sync-queue.description.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.description.country": "Quốc gia", + "person.page.orcid.sync-queue.description.education": "Giáo dục", + "person.page.orcid.sync-queue.description.external_ids": "ID ngoài", + "person.page.orcid.sync-queue.description.keywords": "Từ khóa", + "person.page.orcid.sync-queue.description.other_names": "Tên khác", + "person.page.orcid.sync-queue.description.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.description.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.discard": "Hủy thay đổi và không đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.discard.error": "Việc loại bỏ biểu ghi trong danh sách chờ của ORCID đã thất bại", + "person.page.orcid.sync-queue.discard.success": "Biểu ghi trong danh sách chờ của ORCID đã được hủy bỏ thành công", + "person.page.orcid.sync-queue.empty-message": "Danh sách chờ ORCID trống", + "person.page.orcid.sync-queue.send": "Đồng bộ với trang ORCID", + "person.page.orcid.sync-queue.send.bad-request-error": "Đẩy dữ liệu lên ORCID không thành công vì tài nguyên này không hợp lệ", + "person.page.orcid.sync-queue.send.conflict-error": "Đẩy dữ liệu lên ORCID không thành công bởi vì tài nguyên này đã có trên trang ORCID", + "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", + "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", + "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp
    vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", + "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "2 ký tự mã quốc gia theo ISO 3166 là không hợp lệ", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "Cần có số định danh (ID) để phân biệt giữa các tổ chức. ID được hỗ trợ là GRID Ringgold LEI và số định dang Cơ quan đăng ký Crossref Funder", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Định danh của tổ chức yêu cầu phải có một giá trị", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "Nguồn của một trong các số định danh của tổ chức không hợp lệ. Các nguồn được hỗ trợ là RINGGOLD GRID LEI và FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Phải có một nguồn cho định danh của tổ chức", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "Tài nguyên được gửi yêu cầu phải có ít nhất một định danh", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Nhà tài trợ là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "Tổ chức này yêu cầu phải có địa chỉ", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "Địa chỉ của tổ chức này phải là một thành phố", + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "Địa chỉ của tổ chức này phải là một mã quốc gia bao gồm 2 ký tự theo ISO 3166", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Tên của tổ chức là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "Yêu cầu phải có tổ chức", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "Năm xuất bản phải là năm sau năm 1900", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "Ngày bắt đầu là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Nhan đề là bắt buộc", + "person.page.orcid.sync-queue.send.validation-error.type.required": "Trường dc.type là bắt buộc", + "person.page.orcid.sync-queue.table.header.action": "Hành động", + "person.page.orcid.sync-queue.table.header.description": "Mô tả", + "person.page.orcid.sync-queue.table.header.type": "Loại hình tài liệu", + "person.page.orcid.sync-queue.tooltip.affiliation": "Tổ chức", + "person.page.orcid.sync-queue.tooltip.country": "Quốc gia", + "person.page.orcid.sync-queue.tooltip.delete": "Loại bỏ mục này khỏi trang ORCID", + "person.page.orcid.sync-queue.tooltip.education": "Giáo dục", + "person.page.orcid.sync-queue.tooltip.external_ids": "Định danh ", + "person.page.orcid.sync-queue.tooltip.insert": "Thêm mục mới trong ORCID", + "person.page.orcid.sync-queue.tooltip.keywords": "Từ khóa", + "person.page.orcid.sync-queue.tooltip.other_names": "Tên khác", + "person.page.orcid.sync-queue.tooltip.project": "Dự án", + "person.page.orcid.sync-queue.tooltip.publication": "Ấn phẩm", + "person.page.orcid.sync-queue.tooltip.qualification": "Trình độ chuyên môn", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL nhà nghiên cứu", + "person.page.orcid.sync-queue.tooltip.update": "Cập nhật mục này trên trang ORCID", + "person.page.orcid.unlink": "Ngắt kết nối khỏi ORCID", + "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", + "person.page.orcid.unlink.processing": "Đang xử lý…", + "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", + + "person.orcid.registry.auth": "Được phép qua ORCID ", + "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", + "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", + + "home.recent-submissions.head": "Các tài liệu tải lên gần đây", + + "listable-notification-object.default-message": "Không thể truy xuất", + + "system-wide-alert-banner.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo hệ thống", + "system-wide-alert-banner.countdown.prefix": "Trong", + "system-wide-alert-banner.countdown.days": "{{days}} ngày", + "system-wide-alert-banner.countdown.hours": "{{hours}} giờ và", + "system-wide-alert-banner.countdown.minutes": "{{minutes}} phút:", + + "menu.section.system-wide-alert": "Cảnh báo toàn hệ thống", + + "system-wide-alert.form.header": "Cảnh báo toàn hệ thống", + "system-wide-alert-form.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo trên toàn hệ thống", + "system-wide-alert.form.cancel": "Hủy", + "system-wide-alert.form.save": "Lưu", + "system-wide-alert.form.label.active": "HOẠT ĐỘNG", + "system-wide-alert.form.label.inactive": "KHÔNG HOẠT ĐỘNG", + "system-wide-alert.form.error.message": "Cảnh báo trên toàn hệ thống phải chứa một nội dung", + "system-wide-alert.form.label.message": "Nội dung cảnh báo", + "system-wide-alert.form.label.countdownTo.enable": "Kích hoạt thời gian tạm dừng máy chủ", + "system-wide-alert.form.label.countdownTo.hint": "Gợi ý: Thiết lập lịch tạm dừng máy chủ. Khi chức năng này được kích hoạt, có thể lựa chọn một ngày tạm dừng máy chủ trong tương lai và nội dung cảnh báo sẽ được đếm ngược tới ngày đã đặt. Khi bộ hẹn giờ này được kết thúc, nội dung này sẽ biến mất khỏi cảnh báo. Máy chủ sẽ không tự động tạm dừng.", + "system-wide-alert.form.label.preview": "Xem trước cảnh báo toàn hệ thống", + "system-wide-alert.form.update.success": "Cảnh báo toàn hệ thống đã được cập nhật thành công", + "system-wide-alert.form.update.error": "Đã xảy ra lỗi trong quá trình cập nhật cảnh báo toàn hệ thống", + "system-wide-alert.form.create.success": "Cảnh báo toàn hệ thống đã được tạo thành công", + "system-wide-alert.form.create.error": "Đã xảy ra lỗi trong quá trình tạo cảnh báo toàn hệ thống", + "admin.system-wide-alert.breadcrumbs": "Cảnh báo toàn hệ thống", + "admin.system-wide-alert.title": "Cảnh báo toàn hệ thống", } \ No newline at end of file From 2e6b1cc4efc8741e94c4c9e16a5db6df42ee8567 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Tue, 25 Apr 2023 14:48:28 +0200 Subject: [PATCH 538/833] Added Curate tab in Edit Item page --- .../edit-item-page/edit-item-page.module.ts | 5 +- .../edit-item-page.routing.module.ts | 6 ++ .../item-curate/item-curate.component.html | 6 ++ .../item-curate/item-curate.component.spec.ts | 75 +++++++++++++++++++ .../item-curate/item-curate.component.ts | 35 +++++++++ src/assets/i18n/en.json5 | 1 + 6 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/app/item-page/edit-item-page/item-curate/item-curate.component.html create mode 100644 src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts create mode 100644 src/app/item-page/edit-item-page/item-curate/item-curate.component.ts diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 24d27b3340..7692df8924 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -38,7 +38,7 @@ import { IdentifierDataService } from '../../core/data/identifier-data.service'; import { IdentifierDataComponent } from '../../shared/object-list/identifier-data/identifier-data.component'; import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; - +import { ItemCurateComponent } from './item-curate/item-curate.component'; /** * Module that contains all components related to the Edit Item page administrator functionality @@ -81,7 +81,8 @@ import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; VirtualMetadataComponent, ItemAuthorizationsComponent, IdentifierDataComponent, - ItemRegisterDoiComponent + ItemRegisterDoiComponent, + ItemCurateComponent ], providers: [ BundleDataService, diff --git a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts index 88172e2620..9923748338 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts @@ -41,6 +41,7 @@ import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; import { ThemedDsoEditMetadataComponent } from '../../dso-shared/dso-edit-metadata/themed-dso-edit-metadata.component'; import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard'; +import { ItemCurateComponent } from './item-curate/item-curate.component'; /** * Routing module that handles the routing for the Edit Item page administrator functionality @@ -82,6 +83,11 @@ import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard'; data: { title: 'item.edit.tabs.metadata.title', showBreadcrumbs: true }, canActivate: [ItemPageMetadataGuard] }, + { + path: 'curate', + component: ItemCurateComponent, + data: { title: 'item.edit.tabs.curate.title', showBreadcrumbs: true } + }, { path: 'relationships', component: ItemRelationshipsComponent, diff --git a/src/app/item-page/edit-item-page/item-curate/item-curate.component.html b/src/app/item-page/edit-item-page/item-curate/item-curate.component.html new file mode 100644 index 0000000000..f1710924f5 --- /dev/null +++ b/src/app/item-page/edit-item-page/item-curate/item-curate.component.html @@ -0,0 +1,6 @@ +
    +

    {{'item.edit.curate.title' |translate:{item: (itemName$ |async)} }}

    + +
    diff --git a/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts b/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts new file mode 100644 index 0000000000..9770d2e1aa --- /dev/null +++ b/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts @@ -0,0 +1,75 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { TranslateModule } from '@ngx-translate/core'; +import { CUSTOM_ELEMENTS_SCHEMA, DebugElement } from '@angular/core'; +import { ItemCurateComponent } from './item-curate.component'; +import { of as observableOf } from 'rxjs'; +import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; +import { ActivatedRoute } from '@angular/router'; +import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; +import { Item } from '../../../core/shared/item.model'; + +fdescribe('ItemCurateComponent', () => { + let comp: ItemCurateComponent; + let fixture: ComponentFixture; + let debugEl: DebugElement; + + let routeStub; + let dsoNameService; + + const item = Object.assign(new Item(), { + handle: '123456789/1', + metadata: {'dc.title': ['Item Name']} + }); + + beforeEach(waitForAsync(() => { + routeStub = { + parent: { + data: observableOf({ + dso: createSuccessfulRemoteDataObject(item) + }) + } + }; + + dsoNameService = jasmine.createSpyObj('dsoNameService', { + getName: 'Item Name' + }); + + TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [ItemCurateComponent], + providers: [ + {provide: ActivatedRoute, useValue: routeStub}, + {provide: DSONameService, useValue: dsoNameService} + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ItemCurateComponent); + comp = fixture.componentInstance; + debugEl = fixture.debugElement; + + fixture.detectChanges(); + }); + describe('init', () => { + it('should initialise the comp', () => { + expect(comp).toBeDefined(); + expect(debugEl.nativeElement.innerHTML).toContain('ds-curation-form'); + }); + + it('should contain the item information provided in the route', (done) => { + comp.dsoRD$.subscribe((value) => { + expect(value.payload.handle).toEqual('123456789/1'); + done(); + }); + }); + + it('should contain the item name', (done) => { + comp.itemName$.subscribe((value) => { + expect(value).toEqual('Item Name'); + done(); + }); + }); + }); +}); diff --git a/src/app/item-page/edit-item-page/item-curate/item-curate.component.ts b/src/app/item-page/edit-item-page/item-curate/item-curate.component.ts new file mode 100644 index 0000000000..9205246a06 --- /dev/null +++ b/src/app/item-page/edit-item-page/item-curate/item-curate.component.ts @@ -0,0 +1,35 @@ +import { Component } from '@angular/core'; +import { filter, map, shareReplay } from 'rxjs/operators'; +import { RemoteData } from '../../../core/data/remote-data'; +import { Observable } from 'rxjs'; +import { ActivatedRoute } from '@angular/router'; +import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; +import { Collection } from '../../../core/shared/collection.model'; +import { hasValue } from '../../../shared/empty.util'; + +/** + * Component for managing a collection's curation tasks + */ +@Component({ + selector: 'ds-item-curate', + templateUrl: './item-curate.component.html', +}) +export class ItemCurateComponent { + dsoRD$: Observable> = this.route.parent.data.pipe( + map((data) => data.dso), + shareReplay(1) + ); + + itemName$: Observable = this.dsoRD$.pipe( + filter((rd: RemoteData) => hasValue(rd)), + map((rd: RemoteData) => { + console.log(rd); + return this.dsoNameService.getName(rd.payload); + }) + ); + + constructor( + private route: ActivatedRoute, + private dsoNameService: DSONameService, + ) {} +} diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 66824e56b3..1af7c36e19 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2291,6 +2291,7 @@ "item.edit.tabs.curate.head": "Curate", "item.edit.tabs.curate.title": "Item Edit - Curate", + "item.edit.curate.title": "Curate Item: {{item}}", "item.edit.tabs.metadata.head": "Metadata", From 53b883cb4205b8c591146db67cd611d7bb85df69 Mon Sep 17 00:00:00 2001 From: tuanvu Date: Wed, 26 Apr 2023 16:21:58 +0700 Subject: [PATCH 539/833] Internalization (i18n): Vietnamese translation! Fixes #2172 --- src/assets/i18n/vi.json5 | 204 ++++++++------------------------------- 1 file changed, 39 insertions(+), 165 deletions(-) diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 index 4e3528148f..169f19f41a 100644 --- a/src/assets/i18n/vi.json5 +++ b/src/assets/i18n/vi.json5 @@ -11,17 +11,14 @@ "500.help": "Máy chủ tạm thời không thể phục vụ yêu cầu của bạn do đang trong giai đoạn bảo trì hoặc vấn đề về dung lượng. Vui lòng thử lại sau.", "500.link.home-page": "Đi tới trang chủ", "500.page-internal-server-error": "Dịch vụ không sẵn sàng", - "access-status.embargo.listelement.badge": "Ngăn chặn", "access-status.metadata.only.listelement.badge": "Chỉ siêu dữ liệu", "access-status.open.access.listelement.badge": "Truy cập mở", "access-status.restricted.listelement.badge": "Hạn chế", "access-status.unknown.listelement.badge": "Không xác định", - "admin.curation-tasks.breadcrumbs": "Thu thập các tác vụ hệ thống", "admin.curation-tasks.header": "Thu thập các tác vụ hệ thống", "admin.curation-tasks.title": "Thu thập các tác vụ hệ thống", - "admin.registries.bitstream-formats.breadcrumbs": "Tạo định dạng", "admin.registries.bitstream-formats.create.breadcrumbs": "Định dạng tệp tin", "admin.registries.bitstream-formats.create.failure.content": "Đã xảy ra lỗi khi tạo định dạng tệp tin mới.", @@ -106,7 +103,6 @@ "admin.registries.schema.notification.success": "Thành công", "admin.registries.schema.return": "Quay lại", "admin.registries.schema.title": "Tạo lược đồ thông tin mô tả", - "admin.access-control.epeople.actions.delete": "Xóa người dùng", "admin.access-control.epeople.actions.impersonate": "Mạo danh người dùng", "admin.access-control.epeople.actions.reset": "Cài lại mật khẩu", @@ -134,7 +130,7 @@ "admin.access-control.epeople.form.notification.edited.success": "Chỉnh sửa thành công người dùng \"{{name}}\"", "admin.access-control.epeople.form.requireCertificate": "Khóa tài khoản", "admin.access-control.epeople.form.return": "Quay lại", - "admin.access-control.epeople.form.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.epeople.form.table.collectionOrCommunity": "Đơn vị/ Bộ sưu tập", "admin.access-control.epeople.form.table.id": "ID", "admin.access-control.epeople.form.table.name": "Tên", "admin.access-control.epeople.head": "Người dùng", @@ -161,7 +157,7 @@ "admin.access-control.groups.button.see-all": "Duyệt toàn bộ", "admin.access-control.groups.form.actions.delete": "Xóa nhóm người dùng", "admin.access-control.groups.form.alert.permanent": "Nhóm này là cố định vì vậy nó không thể bị chỉnh sửa hoặc xóa. Bạn vẫn có thể thêm và loại bỏ thành viên trong nhóm tại trang này.", - "admin.access-control.groups.form.alert.workflowGroup": "Không thể chỉnh sửa hoặc xóa nhóm này vì nó tương ứng với một vai trò trong quá trình gửi và quy trình xử lý trong \"{{name}}\" {{comcol}}. Bạn có thể xóa nó từ thẻ
    assign roles<\/a> trên trang chỉnh sửa {{comcol}}. Bạn vẫn có thể thêm và loại bỏ thành viên nhóm bằng trang này.\"", + "admin.access-control.groups.form.alert.workflowGroup": "Không thể chỉnh sửa hoặc xóa nhóm này vì nó tương ứng với một vai trò trong quá trình gửi và quy trình xử lý trong \"{{name}}\" {{comcol}}. Bạn có thể xóa nó từ thẻ assign roles trên trang chỉnh sửa {{comcol}}. Bạn vẫn có thể thêm và loại bỏ thành viên nhóm bằng trang này.\"", "admin.access-control.groups.form.delete-group.modal.cancel": "Hủy", "admin.access-control.groups.form.delete-group.modal.confirm": "Xóa", "admin.access-control.groups.form.delete-group.modal.header": "Xóa nhóm người dùng \"{{ dsoName }}\"", @@ -185,7 +181,7 @@ "admin.access-control.groups.form.members-list.search.head": "Thêm người dùng", "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (chính xác)", "admin.access-control.groups.form.members-list.search.scope.metadata": "Siêu dữ liệu", - "admin.access-control.groups.form.members-list.table.edit": "Loại bỏ \/ Thêm", + "admin.access-control.groups.form.members-list.table.edit": "Loại bỏ / Thêm", "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Thêm thành viên với tên \"{{name}}\"", "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Loại bỏ thành viên với tên \"{{name}}\"", "admin.access-control.groups.form.members-list.table.email": "Email", @@ -217,8 +213,8 @@ "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Loại bỏ thành công nhóm người dùng: \"{{name}}\" ra khỏi nhóm", "admin.access-control.groups.form.subgroups-list.search.button": "Tìm kiếm", "admin.access-control.groups.form.subgroups-list.search.head": "Thêm nhóm người dùng con", - "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", - "admin.access-control.groups.form.subgroups-list.table.edit": "Loại bỏ \/ Thêm", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Đơn vị/ Bộ sưu tập", + "admin.access-control.groups.form.subgroups-list.table.edit": "Loại bỏ / Thêm", "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Thêm nhóm người dùng con với tên \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Loại bỏ nhóm người dùng con với tên \"{{name}}\"", "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Nhóm người dùng hiện tại", @@ -233,7 +229,7 @@ "admin.access-control.groups.search.head": "Tìm kiếm nhóm người dùng", "admin.access-control.groups.search.placeholder": "Tìm kiếm nhóm người dùng...", "admin.access-control.groups.singleGroup.breadcrumbs": "Chỉnh sửa nhóm người dùng", - "admin.access-control.groups.table.collectionOrCommunity": "Đơn vị\/ Bộ sưu tập", + "admin.access-control.groups.table.collectionOrCommunity": "Đơn vị/ Bộ sưu tập", "admin.access-control.groups.table.edit": "Chỉnh sửa", "admin.access-control.groups.table.edit.buttons.edit": "Chỉnh sửa \"{{name}}\"", "admin.access-control.groups.table.edit.buttons.remove": "Xóa \"{{name}}\"", @@ -243,7 +239,6 @@ "admin.access-control.groups.title": "Nhóm người dùng", "admin.access-control.groups.title.addGroup": "Tạo nhóm người dùng", "admin.access-control.groups.title.singleGroup": "Chỉnh sửa nhóm người dùng", - "admin.search.breadcrumbs": "Tìm kiếm quản trị", "admin.search.collection.edit": "Chỉnh sửa", "admin.search.community.edit": "Chỉnh sửa", @@ -255,9 +250,7 @@ "admin.search.item.reinstate": "Khôi phục", "admin.search.item.withdraw": "Ẩn", "admin.search.title": "Tìm kiếm quản trị", - "administrativeView.search.results.head": "Tìm kiếm quản trị", - "admin.workflow.breadcrumbs": "Quản trị luồng công việc", "admin.workflow.title": "Quản trị luồng công việc", "admin.workflow.item.workflow": "Luồng công việc", @@ -266,7 +259,6 @@ "admin.workflow.item.send-back": "Gửi trở lại", "admin.workflow.item.policies": "Policies", "admin.workflow.item.supervision": "Supervision", - "admin.batch-import.breadcrumbs": "Nhập dữ liệu theo lô", "admin.batch-import.page.dropMsg": "Kéo thả file ZIP để nhập vào", "admin.batch-import.page.dropMsgReplace": "Kéo thả để thay thế file ZIP cần nhập vào", @@ -276,7 +268,6 @@ "admin.batch-import.page.remove": "xóa", "admin.batch-import.title": "Nhập dữ liệu theo lô", "admin.batch-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra file ZIP tải lên\", hệ thống sẽ chạy một tiến trình kiểm tra việc nhập dữ liệu theo lô thay vì đổ trực tiếp dữ liệu lên hệ thống. Việc này giúp cán bộ xác nhận lại kết quả của quy trình nhập trước khi nhập dữ liệu chính thức. Bỏ chọn tùy chọn này để đổ lô tài liệu lên hệ thống.", - "admin.metadata-import.breadcrumbs": "Nhập thông tin mô tả", "admin.metadata-import.page.button.proceed": "Tiếp tục", "admin.metadata-import.page.button.return": "Quay lại", @@ -289,7 +280,6 @@ "admin.metadata-import.page.validateOnly": "Kiểm tra nhập lô siêu dữ liệu", "admin.metadata-import.page.validateOnly.hint": "Nếu chọn tùy chọn \"Kiểm tra nhập lô siêu dữ liệu\", hệ thống sẽ chạy một tiến trình kiểm tra nhập lô siêu dữ liệu thay vì đổ trực tiếp dữ liệu lên hệ thống. Bỏ chọn tùy chọn này để tiến hành nhập dữ liệu chính thức.", "admin.metadata-import.title": "Nhập thông tin mô tả", - "advanced-workflow-action.rating.form.rating.label": "Xếp hạng", "advanced-workflow-action.rating.form.rating.error": "Bạn phải đánh giá tài liệu/ thực thế này", "advanced-workflow-action.rating.form.review.label": "Kiểm duyệt", @@ -320,16 +310,12 @@ "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Không có nhóm hoạt động, gửi tên trước.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Chưa có thành viên nào trong nhóm, tìm kiếm để thêm.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Không tìm thấy người dùng", - "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", - + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", "auth.errors.invalid-user": "Địa chỉ email hoặc mật khẩu không hợp lệ.", - "auth.messages.expired": "Phiên của bạn đã hết hạn. Xin vui lòng đăng nhập lại.", "auth.messages.token-refresh-failed": "Làm mới mã token phiên làm việc của bạn không thành công. Vui lòng đăng nhập lại.", - "bitstream.download.page": "Đang tải xuống {{bitstream}}... ", "bitstream.download.page.back": "Quay lại", - "bitstream.edit.authorizations.link": "Chỉnh sửa chính sách của tệp tin", "bitstream.edit.authorizations.title": "Chỉnh sửa chính sách của tệp tin", "bitstream.edit.bitstream": "Tệp tin:", @@ -358,7 +344,6 @@ "bitstream.edit.notifications.saved.title": "Đã lưu tệp tin", "bitstream.edit.return": "Quay lại", "bitstream.edit.title": "Chỉnh sửa tệp tin", - "bitstream-request-a-copy.alert.canDownload1": "Bạn đã có quyền truy cập tệp tin này. Nếu muốn tải tệp tin click ", "bitstream-request-a-copy.alert.canDownload2": "vào đây", "bitstream-request-a-copy.allfiles.label": "Các tệp tin", @@ -378,17 +363,13 @@ "bitstream-request-a-copy.submit": "Yêu cầu bản sao", "bitstream-request-a-copy.submit.error": "Đã xảy ra lỗi trong quá trình gửi yêu cầu tài liệu.", "bitstream-request-a-copy.submit.success": "Yêu cầu tài liệu đã được gửi thành công.", - "browse.back.all-results": "Tất cả kết quả", - "browse.comcol.by.author": "Tác giả", "browse.comcol.by.dateissued": "Năm xuất bản", "browse.comcol.by.subject": "Chủ đề", "browse.comcol.by.title": "Nhan đề", "browse.comcol.head": "Duyệt", - "browse.empty": "Không có tài liệu nào để hiển thị.", - "browse.metadata.author": "Tác giả", "browse.metadata.author.breadcrumbs": "Duyệt theo tác giả", "browse.metadata.dateissued": "Năm xuất bản", @@ -399,11 +380,9 @@ "browse.metadata.title.breadcrumbs": "Duyệt theo nhan đề", "browse.metadata.topic": "Topic", "browse.metadata.type": "Kiểu tài liệu", - "pagination.next.button": "Tiếp theo", "pagination.previous.button": "Quay lại", "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", - "browse.startsWith.choose_year.label": "Chọn năm xuất bản", "browse.startsWith.choose_year": "(Năm)", "browse.startsWith.jump": "Chuyển tới một điểm trong chỉ mục:", @@ -425,18 +404,13 @@ "browse.startsWith.type_date": "Hoặc nhập một ngày (năm-tháng) và nhấp \"Duyệt\"", "browse.startsWith.type_date.label": "Hoặc nhập một ngày (năm-tháng) à nhấp Duyệt", "browse.startsWith.type_text": "Nhập một vài ký tự đầu tiên và nhấp vào nút Duyệt", - "browse.title": "Duyệt {{ collection }} theo {{ field }}{{ startsWith }} {{ value }}", "browse.title.page": "Duyệt {{ collection }} theo {{ field }} {{ value }}", - "search.browse.item-back": "Quay lại kết quả tìm kiếm", - "chips.remove": "Loại bỏ chip", - "claimed-approved-search-result-list-element.title": "Chấp nhận", "claimed-declined-search-result-list-element.title": "Đã bị từ chối, đã gửi lại cho người nhập liệu", "claimed-declined-task-search-result-list-element.title": "Bị từ chối, đã gửi lại tới người quản lý kiểm duyệt", - "collection.create.head": "Tạo một Bộ sưu tập", "collection.create.notifications.success": "Tạo bộ sưu tập thành công", "collection.create.sub-head": "Tạo một bộ sưu tập cho đơnn vị {{ parent }}", @@ -545,7 +519,7 @@ "collection.select.table.title": "Nhan đề", "collection.source.controls.harvest.last": "Lần thu thập trước:", "collection.source.controls.harvest.message": "Thông tin thu thập:", - "collection.source.controls.harvest.no-information": "N\/A", + "collection.source.controls.harvest.no-information": "N/A", "collection.source.controls.harvest.start": "Thời gian bắt đầu thu thập:", "collection.source.controls.harvest.status": "Trạng thái thu thập:", "collection.source.controls.head": "Quản lý thu thập:", @@ -568,7 +542,6 @@ "collection.source.controls.test.submit.error": "Đã xảy ra lỗi khi bắt đầu cài đặt thử nghiệm", "collection.source.update.notifications.error.content": "Các cài đặt đã được kiểm tra và không hoạt động.", "collection.source.update.notifications.error.title": "Lỗi máy chủ", - "community.create.head": "Tạo đơn vị", "community.create.notifications.success": "Tạo đơn vị thành công", "community.create.sub-head": "Tạo một đơn vị con cho đơn vị {{ parent }}", @@ -621,7 +594,6 @@ "communityList.showMore": "Hiển thị thêm", "communityList.tabTitle": "Danh sách đơn vị", "communityList.title": "Danh sách các đơn vị", - "comcol-role.edit.bitstream_read.anonymous-group": "Quyền đọc được mặc định cho các tài liệu hiện được đặt cho nhóm người dùng ẩn danh.", "comcol-role.edit.bitstream_read.description": "Người có quyền đọc tệp tin có khả năng tải các tệp tin về máy tính cá nhân để sử dụng", "comcol-role.edit.bitstream_read.name": "Quyền đọc tệp tin mặc định", @@ -646,24 +618,19 @@ "comcol-role.edit.reviewer.name": "Người kiểm duyệt", "comcol-role.edit.submitters.description": "Tài khoản người dùng và nhóm người dùng có quyền tải tài liệu mới vào bộ sưu tập này", "comcol-role.edit.submitters.name": "Người tải lên", - "community.form.abstract": "Mô tả ngắn", "community.form.description": "Văn bản giới thiệu (HTML)", "community.form.errors.title.required": "Vui lòng nhập tên đơn vị", "community.form.rights": "Thông tin bản quyền (HTML)", "community.form.tableofcontents": "Tin tức (HTML)", "community.form.title": "Tên", - "community.page.edit": "Chỉnh sửa đơn vị", "community.page.handle": "URL", "community.page.license": "Giấy phép", "community.page.news": "Tin tức", - "community.all-lists.head": "Đơn vị con và bộ sưu tập", - "community.sub-collection-list.head": "Các bộ sưu tập của đơn vị này", "community.sub-community-list.head": "Các đơn vị con của đơn vị này", - "cookies.consent.accept-all": "Chấp thuận tất cả", "cookies.consent.accept-selected": "Chấp nhận các mục đã chọn", "cookies.consent.app.description.acknowledgement": "Bắt buộc để lưu sự xác nhận và đồng ý của bạn", @@ -700,7 +667,6 @@ "cookies.consent.purpose.statistical": "Thống kê", "cookies.consent.save": "Lưu", "cookies.consent.update": "Có 1 vài thay đổi từ lần ghé thăm cuối cùng của bạn vui lòng cập nhập sự đồng ý của bạn.", - "curation-task.task.checklinks.label": "\"Kiểm tra các link trong thông tin mô tả\"", "curation-task.task.citationpage.label": "Tạo trang trích dẫn", "curation-task.task.noop.label": "NOOP", @@ -709,8 +675,7 @@ "curation-task.task.requiredmetadata.label": "Kiểm tra các trường dữ liệu bắt buộc", "curation-task.task.translate.label": "Bộ dịch của Microsoft", "curation-task.task.vscan.label": "Quét Virus", - - "curation.form.handle.hint": "Gợi ý: Nhập [your-handle-prefix]\/0 để chạy một tác vụ trên toàn bộ trang (chú ý rằng không phải tất cả tác vụ đều hỗ trợ khả năng này)", + "curation.form.handle.hint": "Gợi ý: Nhập [your-handle-prefix]/0 để chạy một tác vụ trên toàn bộ trang (chú ý rằng không phải tất cả tác vụ đều hỗ trợ khả năng này)", "curation.form.handle.label": "Handle:", "curation.form.submit": "Bắt đầu", "curation.form.submit.error.content": "Đã có lỗi xảy ra khi cố gắng khởi động tác vụ kiểm tra.", @@ -719,16 +684,13 @@ "curation.form.submit.success.content": "Bạn sẽ được điều hướng đến trang phản hồi quy trình.", "curation.form.submit.success.head": "Tác vụ kiểm tra đã khởi động thành công", "curation.form.task-select.label": "Tác vụ:", - "deny-request-copy.email.message": "Kính gửi {{ recipientName }}\n\nLiên quan đến yêu cầu của bạn Thư viện rất tiếc phải thông báo với bạn rằng chúng tôi không thể gửi cho bạn bản sao của (các) tệp bạn đã yêu cầu liên quan đến tài liệu: \"{{ itemUrl }}\" ({{ itemName }}).\n\nTrân trọng\n,{{ authorName}}<{{ authorEmail }}>", "deny-request-copy.email.subject": "Yêu cầu bản sao tài liệu", "deny-request-copy.error": "Đã xảy ra lỗi", "deny-request-copy.header": "Từ chối yêu cầu bản sao tài liệu", "deny-request-copy.intro": "Tin nhắn này sẽ được gửi đến người yêu cầu", "deny-request-copy.success": "Từ chối thành công yêu cầu tài liệu", - "dso.name.untitled": "Không có nhan đề", - "dso-selector.claim.item.body": "Đây là những hồ sơ hiện có có thể liên quan đến bạn. Nếu bạn nhận ra mình ở một trong những hồ sơ này hãy chọn hồ sơ đó và trên trang chi tiết hãy chọn xác nhận hồ sơ. Nếu không bạn có thể tạo một hồ sơ mới từ đầu bằng cách sử dụng nút bên dưới.", "dso-selector.claim.item.create-from-scratch": "Tạo hồ sơ mới", "dso-selector.claim.item.head": "Mẹo quản lý hồ sơ", @@ -759,7 +721,6 @@ "dso-selector.set-scope.community.head": "Chọn một phạm vi tìm kiếm", "dso-selector.set-scope.community.input-header": "Tìm kiếm một đơn vị hoặc bộ sưu tập", "dso-selector.set-scope.community.or-divider": "hoặc", - "supervision-group-selector.header": "Supervision Group Selector", "supervision-group-selector.select.type-of-order.label": "Select a type of Order", "supervision-group-selector.select.type-of-order.option.none": "NONE", @@ -773,7 +734,6 @@ "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", "supervision-group-selector.notification.create.failure.title": "Error", "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", - "confirmation-modal.delete-eperson.cancel": "Hủy", "confirmation-modal.delete-eperson.confirm": "Xóa", "confirmation-modal.delete-eperson.header": "Xóa người dùng \"{{ dsoName }}\"", @@ -797,7 +757,6 @@ "confirmation-modal.reset-password-eperson.cancel": "Hủy", "confirmation-modal.reset-password-eperson.confirm": "Thiết lập lại mật khẩu", "confirmation-modal.reset-password-eperson.info": "Bạn có chắc chắn muốn thiết lập lại mật khẩu cho người dùng \"{{ dsoName }}\"", - "error.bitstream": "Lỗi tìm kiếm tệp tin", "error.browse-by": "Lỗi tìm kiếm tài liệu", "error.collection": "Lỗi tìm kiếm bộ sưu tập", @@ -827,11 +786,8 @@ "error-page.description.404": "không tìm thấy trang", "error-page.description.500": "Dịch vụ không sẵn sàng", "error-page.orcid.generic-error": "Đã xảy ra lỗi khi đăng nhập qua ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists contact the administrator", - "feed.description": "Nguồn cấp dữ liệu tổng hợp", - "file-section.error.header": "Lỗi khi lấy tệp cho tài liệu này", - "footer.copyright": "bản quyền © 2002-{{ year }}", "footer.link.cookies": "Cài đặt Cookie", "footer.link.dspace": "Phần mềm thư viện số", @@ -839,7 +795,6 @@ "footer.link.feedback": "Gửi phản hồi", "footer.link.lyrasis": "LYRASIS", "footer.link.privacy-policy": "Chính sách riêng tư", - "forgot-email.form.email": "Địa chỉ Email *", "forgot-email.form.email.error.pattern": "Vui lòng nhập một địa chỉ email hợp lệ", "forgot-email.form.email.error.required": "Vui lòng nhập địa chỉ email", @@ -851,7 +806,6 @@ "forgot-email.form.submit": "Lưu", "forgot-email.form.success.content": "Một email đã được gửi tới địa chỉ {{ email }} trong đó có chứa URL và các hướng dẫn chi tiết hơn.", "forgot-email.form.success.head": "Email xác nhận đã được gửi tới bạn", - "forgot-password.form.card.security": "Bảo mật", "forgot-password.form.error.empty-password": "Vui lòng nhập mật khẩu mới trong ô dưới đây.", "forgot-password.form.error.matching-passwords": "Hai mật khẩu không trùng khớp.", @@ -866,7 +820,6 @@ "forgot-password.form.notification.success.title": "Hoàn thành đặt lại mật khẩu", "forgot-password.form.submit": "Gửi mật khẩu", "forgot-password.title": "Quên mật khẩu", - "form.add": "Thêm", "form.add-help": "Nhấp vào đây để thêm mục hiện tại và một mục khác", "form.cancel": "Hủy", @@ -894,7 +847,6 @@ "form.search": "Tìm kiếm", "form.search-help": "Nhấp vào đây để tìm kiếm thư từ đang tồn tại", "form.submit": "Lưu", - "grant-deny-request-copy.deny": "Không gửi bản sao", "grant-deny-request-copy.email.back": "Quay lại", "grant-deny-request-copy.email.message": "Tin nhắn", @@ -916,7 +868,6 @@ "grant-request-copy.header": "Chấp nhận yêu cầu bản sao tài liệu", "grant-request-copy.intro": "Tin nhắn này sẽ được gửi đến người gửi yêu cầu. (Các) tài liệu được yêu cầu sẽ được gửi kèm tin nhắn.", "grant-request-copy.success": "Yêu cầu tài liệu đã được xử lý thành công", - "health.breadcrumbs": "Kiểm tra hệ thống", "health-page.error.msg": "Dịch vụ kiểm tra hệ thống tạm thời không khả dụng", "health-page.heading": "Kiểm tra hệ thống", @@ -937,14 +888,12 @@ "health-page.status.warning.info": "Phát hiện các vấn đề có thể xảy ra", "health-page.status-tab": "Trạng thái", "health-page.title": "Kiểm tra hệ thống", - "home.description": "", "home.breadcrumbs": "Trang chủ", "home.search-form.placeholder": "Tìm kiếm kho lưu trữ", "home.title": "Trang chủ", "home.top-level-communities.head": "Danh sách đơn vị trong DSpace", "home.top-level-communities.help": "Chọn một đơn vị để xem các bộ sưu tập của nó.", - "info.contact.breadcrumbs": "Thông tin liên hệ", "info.contact.head": "Thông tin liên hệ", "info.contact.title": "Thông tin liên hệ", @@ -974,7 +923,6 @@ "info.privacy.breadcrumbs": "Cam kết bảo mật", "info.privacy.head": "Cam kết bảo mật", "info.privacy.title": "Cam kết bảo mật", - "item.alerts.private": "Đây là tài liệu cá nhân", "item.alerts.withdrawn": "Tài liệu này đã được chuyển sang chế độ ẩn", "item.badge.private": "Cá nhân", @@ -990,7 +938,7 @@ "item.bitstreams.upload.notifications.bundle.created.title": "Đã tạo gói tệp tin", "item.bitstreams.upload.notifications.upload.failed": "Tải lên thất bại. Vui lòng xác minh nội dung sau trước khi thực hiện lại.", "item.bitstreams.upload.title": "Tải tệp tin lên", - "item.edit.authorizations.heading": "Với trình chỉnh sửa này bạn có thể xem và chỉnh sửa chính sách phân quyền của một tài liệu (item) cũng như các thành phần của tài liệu đó như: gói tệp tin (bundle) và tệp tin (bitstream). Các tài liệu có thể chứa nhiều gói và mỗi gói có thể chứa nhiều tệp tin. Tài liệu và gói tệp tin thường có các quyền là THÊM\/XÓA\/ĐỌC\/CHỈNH SỬA còn tệp tin chỉ có quyền ĐỌC\/CHỈNH SỬA.", + "item.edit.authorizations.heading": "Với trình chỉnh sửa này bạn có thể xem và chỉnh sửa chính sách phân quyền của một tài liệu (item) cũng như các thành phần của tài liệu đó như: gói tệp tin (bundle) và tệp tin (bitstream). Các tài liệu có thể chứa nhiều gói và mỗi gói có thể chứa nhiều tệp tin. Tài liệu và gói tệp tin thường có các quyền là THÊM/XÓA/ĐỌC/CHỈNH SỬA còn tệp tin chỉ có quyền ĐỌC/CHỈNH SỬA.", "item.edit.authorizations.title": "Chỉnh sửa chính sách phân quyền của tài liệu", "item.edit.bitstreams.bundle.displaying": "Đang hiển thị {{ amount }} trong số {{ total }} tệp tin.", "item.edit.bitstreams.bundle.edit.buttons.upload": "Tải lên", @@ -1294,62 +1242,33 @@ "item.version.history.table.workflowItem": "Đang kiểm duyệt", "item.version.history.table.workspaceItem": "Đang biên mục", "item.version.notice": "Đây không phải là phiên bản mới nhất của tài liệu này. Phiên bản mới nhất có thể xem tại đây.", - "itemtemplate.edit.metadata.add-button": "Add", - "itemtemplate.edit.metadata.discard-button": "Discard", - "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", - "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", - "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", - "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", - "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", - "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", - "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", - "itemtemplate.edit.metadata.headers.edit": "Edit", - "itemtemplate.edit.metadata.headers.field": "Field", - "itemtemplate.edit.metadata.headers.language": "Lang", - "itemtemplate.edit.metadata.headers.value": "Value", - "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", - "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", - "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", - "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", - "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", - "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", - "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", - "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", - "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", - "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", - "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", - "itemtemplate.edit.metadata.reinstate-button": "Undo", - "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", - - "itemtemplate.edit.metadata.save-button": "Save", - - + "itemtemplate.edit.metadata.save-button": "Save", "journal.listelement.badge": "Tạp chí", "journal.page.description": "Mô tả", "journal.page.edit": "Chỉnh sửa tài liệu này", @@ -1376,8 +1295,6 @@ "journalvolume.page.issuedate": "Ngày xuất bản", "journalvolume.page.titleprefix": "Tập của tạp chí:", "journalvolume.page.volume": "Tập", - - "iiif.listelement.badge": "Phương tiện hình ảnh", "iiif.page.description": "Mô tả:", "iiif.page.doi": "Đường dẫn cố định:", @@ -1389,7 +1306,6 @@ "iiifsearchable.page.issue": "Vấn đề:", "iiifsearchable.page.titleprefix": "Tài liệu:", "iiifviewer.fullscreen.notice": "Sử dụng chế độ toàn màn hình để xem tốt hơn.", - "loading.bitstream": "Đang tải tệp tin...", "loading.bitstreams": "Đang tải tệp tin...", "loading.browse-by": "Đang tải tài liệu...", @@ -1408,7 +1324,6 @@ "loading.sub-collections": "Đang tải bộ sưu tập con...", "loading.sub-communities": "Đang tải đơn vị con...", "loading.top-level-communities": "Đang tải các đơn vị lớn...", - "login.breadcrumbs": "Đăng nhập", "login.form.email": "Địa chỉ email", "login.form.forgot-password": "Có phải bạn quên mật khẩu?", @@ -1421,15 +1336,12 @@ "login.form.shibboleth": "Đăng nhập bằng Shibboleth", "login.form.submit": "Đăng nhập", "login.title": "Đăng nhập", - "logout.form.header": "Đăng xuất khỏi DSpace", "logout.form.submit": "Đăng xuất", "logout.title": "Đăng xuất", - "menu.header.admin": "Quản trị", "menu.header.admin.description": "Menu quản trị", "menu.header.image.logo": "Logo của kho lưu trữ", - "menu.section.access_control": "Người dùng và nhóm người dùng", "menu.section.access_control_authorizations": "Chính sách phân quyền", "menu.section.access_control_groups": "Nhóm người dùng", @@ -1505,11 +1417,9 @@ "menu.section.toggle.statistics_task": "Phần chuyển đổi Nhiệm vụ Báo cáo thống kê", "menu.section.unpin": "Bỏ ghim thanh quản trị", "menu.section.workflow": "Quản trị dòng công việc", - "metadata-export-search.submit.error": "Xảy ra lỗi trong quá trình xuất dữ liệu", "metadata-export-search.submit.success": "Quá trình xuất dữ liệu đã được khởi chạy thành công", "metadata-export-search.tooltip": "Xuất kết quả tìm kiếm ra CSV", - "mydspace.breadcrumbs": "Trang cá nhân", "mydspace.messages.controller-help": "Chọn tùy chọn này để gửi tin nhắn tới người biên mục tài liệu.", "mydspace.messages.description-placeholder": "Thêm tin nhắn của bạn tại đây...", @@ -1550,7 +1460,6 @@ "mydspace.upload.upload-failed-moreonefile": "Không thể xử lý yêu cầu. Chỉ cho phép một tệp tin duy nhất.", "mydspace.upload.upload-multiple-successful": "Đã tạo {{qty}} mục không gian làm việc mới.", "mydspace.view-btn": "Xem chi tiết", - "nav.browse.header": "Tất cả DSpace", "nav.community-browse.header": "Theo Đơn vị", "nav.language": "Chuyển ngôn ngữ", @@ -1564,11 +1473,9 @@ "nav.stop-impersonating": "Ngừng giả danh Người dùng", "nav.toggle": "Điều hướng chuyển", "nav.user.description": "Thanh hồ sơ người dùng", - "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", - + "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", "none.listelement.badge": "Tài liệu", - - "orgunit.listelement.badge": "Đơn vị\/Tổ chức", + "orgunit.listelement.badge": "Đơn vị/Tổ chức", "orgunit.listelement.no-title": "Không có nhan đề", "orgunit.page.city": "Thành phố", "orgunit.page.country": "Quốc gia", @@ -1576,17 +1483,15 @@ "orgunit.page.description": "Mô tả", "orgunit.page.edit": "Chỉnh sửa tài liệu", "orgunit.page.id": "ID", - "orgunit.page.titleprefix": "Đơn vị\/Tổ chức", - + "orgunit.page.titleprefix": "Đơn vị/Tổ chức", "pagination.next.button": "Tiếp theo", "pagination.next.button.disabled.tooltip": "Không còn trang kết quả khác", "pagination.options.description": "Tùy chọn Phân trang", "pagination.previous.button": "Quay lại", - "pagination.results-per-page": "Số kết quả\/trang", + "pagination.results-per-page": "Số kết quả/trang", "pagination.showing.detail": "{{ range }} của tổng số {{ total }} kết quả", "pagination.showing.label": "Đang hiển thị ", "pagination.sort-direction": "Tùy chọn sắp xếp", - "person.listelement.badge": "Nhà nghiên cứu", "person.listelement.no-title": "Không tìm thấy tên", "person.orcid.registry.auth": "Được phép qua ORCID ", @@ -1598,7 +1503,7 @@ "person.page.firstname": "Tên", "person.page.jobtitle": "Chức vụ", "person.page.abtract": "Tiểu sử", - "person.page.description": "Mô tả", + "person.page.description": "Mô tả", "person.page.lastname": "Họ", "person.page.link.full": "Hiển thị chi tiết", "person.page.name": "Tên", @@ -1619,9 +1524,9 @@ "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", - "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", + "person.page.orcid.scope.activities-update": "Thêm/cập nhật các hoạt động nghiên cứu của bạn", "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", - "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", + "person.page.orcid.scope.person-update": "Thêm/cập nhật thông tin cá nhân của bạn", "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", "person.page.orcid.sync-fundings.all": "Tất cả quỹ", "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", @@ -1631,10 +1536,10 @@ "person.page.orcid.synchronization-mode.batch": "Theo lô", "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", "person.page.orcid.synchronization-mode.manual": "Thủ công", - "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", + "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", - "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", - "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", + "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", + "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", "person.page.orcid.sync-profile.affiliation": "Tổ chức", @@ -1663,7 +1568,7 @@ "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", - "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", @@ -1707,8 +1612,7 @@ "person.page.titleprefix": "Nhà nghiên cứu", "person.search.results.head": "Kết quả tìm kiếm Nhà nghiên cứu", "person.search.title": "Tìm kiếm Nhà nghiên cứu", - "person-relationships.search.results.head": "Kết quả tìm kiếm Tác giả\/Nhà nghiên cứu", - + "person-relationships.search.results.head": "Kết quả tìm kiếm Tác giả/Nhà nghiên cứu", "process.bulk.delete.error.body": "Không thể xóa tiến trình có ID {{ processId}}. Các tiến trình còn lại sẽ tiếp tục bị xóa.", "process.bulk.delete.error.head": "Đã xảy ra lỗi khi xóa tiến trình", "process.detail.actions": "Hành động", @@ -1767,7 +1671,6 @@ "process.overview.table.status": "Trạng thái", "process.overview.table.user": "Người dùng", "process.overview.title": "Tổng quan tiến trình", - "profile.breadcrumbs": "Cập nhật hồ sơ", "profile.card.identify": "Hồ sơ định danh", "profile.card.researcher": "Định danh", @@ -1799,7 +1702,6 @@ "profile.security.form.notifications.success.title": "Đã lưu mật khẩu", "profile.special.groups.head": "Phân quyền cho các nhóm đặc biệt mà bạn thuộc về", "profile.title": "Cập nhật hồ sơ", - "project.listelement.badge": "Dự án nghiên cứu", "project.page.contributor": "Người tham gia", "project.page.description": "Mô tả", @@ -1812,7 +1714,6 @@ "project.page.titleprefix": "Dự án nghiên cứu:", "project.search.results.head": "Kết quả tìm kiếm dự án", "project-relationships.search.results.head": "Kết quả tìm kiếm dự án", - "publication.listelement.badge": "Ấn phẩm", "publication.page.description": "Mô tả", "publication.page.edit": "Chỉnh sửa tài liệu", @@ -1824,11 +1725,9 @@ "publication.search.results.head": "Kết quả tìm kiếm ấn phẩm", "publication.search.title": "Tìm kiếm ấn phẩm", "publication-relationships.search.results.head": "Kết quả tìm kiếm ấn phẩm", - "media-viewer.next": "Tiếp theot", "media-viewer.playlist": "Danh sách phát", "media-viewer.previous": "Quay lại", - "register-email.title": "Đăng ký tài khoản mới", "register-page.create-profile.header": "Tạo hồ sơ", "register-page.create-profile.identification.contact": "Điện thoại liên hệ", @@ -1857,7 +1756,7 @@ "register-page.registration.error.content": "Đã xảy ra lỗi khi đăng ký địa chỉ email sau: {{ email }}", "register-page.registration.error.head": "Lỗi khi đăng ký email", "register-page.registration.error.recaptcha": "Lỗi khi thực hiện xác minh bằng recaptcha", - "register-page.registration.google-recaptcha.must-accept-cookies": "Để đăng ký bạn phải chấp nhận cookie Đăng ký và khôi phục mật khẩu<\/b> (Google reCaptcha).", + "register-page.registration.google-recaptcha.must-accept-cookies": "Để đăng ký bạn phải chấp nhận cookie Đăng ký và khôi phục mật khẩu (Google reCaptcha).", "register-page.registration.google-recaptcha.notification.message.error": "Xác minh đã hết hạn. Vui lòng xác minh lại.", "register-page.registration.google-recaptcha.notification.message.expired": "Đã xảy ra lỗi trong quá trình xác minh reCaptcha", "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", @@ -1867,7 +1766,6 @@ "register-page.registration.submit": "Đăng ký", "register-page.registration.success.content": "Một email sẽ được gửi đến địa chỉ email {{ email }} chứa liên kết xác nhận và các hướng dẫn khác.", "register-page.registration.success.head": "Gửi email xác nhận", - "relationships.add.error.relationship-type.content": "Không có kết quả nào phù hợp cho kiểu quan hệ {{ type }} giữa hai tài liệu", "relationships.add.error.server.content": "Máy chủ trả về lỗi", "relationships.add.error.title": "Không thể thêm mối quan hệ", @@ -1889,11 +1787,9 @@ "relationships.isSingleJournalOf": "Tạp chí", "relationships.isSingleVolumeOf": "Số tập của tạp chí", "relationships.isVolumeOf": "Số tập của tạp chí", - "repository.image.logo": "Logo lưu trữ", "repository.title.prefix": "Digital Library ::", "repository.title.prefixDSpace": "Digital Library ::", - "resource-policies.add.button": "Thêm", "resource-policies.add.for.bitstream": "Thêm chính sách dữ liệu số mới", "resource-policies.add.for.bundle": "Thêm chính sách gói dữ liệu mới", @@ -1910,9 +1806,9 @@ "resource-policies.delete.success.content": "Hành động thành công", "resource-policies.edit.page.failure.content": "Đã có lỗi xảy ra khi chỉnh sửa chính sách tài nguyên.", "resource-policies.edit.page.heading": "Chỉnh sửa chính sách tài nguyên", - "resource-policies.edit.page.other-failure.content": "Đã xảy ra lỗi khi chỉnh sửa chính sách phân quyền. Người dùng\/ nhóm người dùng đã được cập nhật thành công.", + "resource-policies.edit.page.other-failure.content": "Đã xảy ra lỗi khi chỉnh sửa chính sách phân quyền. Người dùng/ nhóm người dùng đã được cập nhật thành công.", "resource-policies.edit.page.success.content": "Hành động thành công", - "resource-policies.edit.page.target-failure.content": "Đã xảy ra lỗi khi chỉnh sửa người dùng\/ nhóm người dùng trong chính sách phân quyền.", + "resource-policies.edit.page.target-failure.content": "Đã xảy ra lỗi khi chỉnh sửa người dùng/ nhóm người dùng trong chính sách phân quyền.", "resource-policies.edit.page.title": "Chỉnh sửa chính sách phân quyền", "resource-policies.form.action-type.label": "Lựa chọn kiểu hành động", "resource-policies.form.action-type.required": "Bạn cần phải lựa chọn hành động chính sách phân quyền.", @@ -1951,7 +1847,6 @@ "resource-policies.table.headers.title.for.community": "Chính sách đơn vị", "resource-policies.table.headers.title.for.item": "Chính sách tài liệu", "resource-policies.table.headers.title.for.topic": "Chính sách topic", - "search.breadcrumbs": "Tìm kiếm", "search.browse.item-back": "Quay lại kết quả tìm kiếm", "search.filters.applied.f.author": "Tác giả", @@ -2073,7 +1968,6 @@ "search.view-switch.show-detail": "Xem chi tiết", "search.view-switch.show-grid": "Hiển thị dưới dạng lưới", "search.view-switch.show-list": "Hiển thị dưới dạng danh sách", - "sorting.ASC": "Tăng dần", "sorting.dc.date.accessioned.ASC": "Tăng dần theo ngày lưu trữ", "sorting.dc.date.accessioned.DESC": "Giảm dần theo ngày lưu trữ", @@ -2086,7 +1980,6 @@ "sorting.lastModified.DESC": "Giảm dần theo lần chỉnh sửa cuối cùng", "sorting.score.ASC": "Liên quan ít nhất", "sorting.score.DESC": "Liên quan nhiều nhất", - "statistics.breadcrumbs": "Thống kê", "statistics.header": "Thống kê theo {{ scope }}", "statistics.page.no-data": "Không có dữ liệu", @@ -2098,8 +1991,6 @@ "statistics.table.title.TotalVisits": "Tổng số truy cập", "statistics.table.title.TotalVisitsPerMonth": "Tổng số lượt truy cập theo từng tháng", "statistics.title": "Thống kê", - - "submission.edit.breadcrumbs": "Chỉnh sửa đăng ký", "submission.edit.title": "Chỉnh sửa đăng ký", "submission.general.cancel": "Hủy", @@ -2125,14 +2016,14 @@ "submission.import-external.preview.title.Journal": "Xem trước Tạp chí", "submission.import-external.preview.title.none": "Xem trước tài liệu", "submission.import-external.preview.title.OrgUnit": "Xem trước tổ chức", - "submission.import-external.preview.title.Person": "Xem trước Tác giả\/nhà nghiên cứu", + "submission.import-external.preview.title.Person": "Xem trước Tác giả/nhà nghiên cứu", "submission.import-external.preview.title.Project": "Xem trước dự án", "submission.import-external.preview.title.Publication": "Xem trước ấn phẩm", "submission.import-external.search.button": "Tìm kiếm", "submission.import-external.search.button.hint": "Nhập một từ để tìm kiếm", "submission.import-external.search.placeholder": "Tìm kiếm nguồn bên ngoài", "submission.import-external.search.source.hint": "Chọn một nguồn bên ngoài", - "submission.import-external.source.ads": "NASA\/ADS", + "submission.import-external.source.ads": "NASA/ADS", "submission.import-external.source.arxiv": "arXiv", "submission.import-external.source.cinii": "CiNii", "submission.import-external.source.crossref": "CrossRef", @@ -2158,7 +2049,7 @@ "submission.import-external.title.JournalVolume": "Nhập một tập của tạp chí từ nguồn bên ngoài", "submission.import-external.title.none": "Nhập thông tin mô tả từ nguồn bên ngoài", "submission.import-external.title.OrgUnit": "Nhập nhà xuất bản từ nguồn bên ngoài", - "submission.import-external.title.Person": "Nhập một tác giả\/ nhà nghiên cứu từ nguồn bên ngoài", + "submission.import-external.title.Person": "Nhập một tác giả/ nhà nghiên cứu từ nguồn bên ngoài", "submission.import-external.title.Project": "Nhập một dự án từ nguồn bên ngoài", "submission.import-external.title.Publication": "Nhập một ấn phẩm từ nguồn bên ngoài", "submission.sections.accesses.form.access-condition-hint": "Chọn chính sách phân quyền để áp dụng cho biểu ghi khi nó được nhập vào hệ thống.", @@ -2166,7 +2057,7 @@ "submission.sections.accesses.form.date-required": "Thông tin thời gian là bắt buộc.", "submission.sections.accesses.form.date-required-from": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", "submission.sections.accesses.form.date-required-until": "Bắt buộc phải khai báo thời gian để xác định ngày bắt đầu cấp quyền truy cập", - "submission.sections.accesses.form.discoverable-description": "Khi được chọn biểu ghi này sẽ có thể được tìm thấy trong các chức năng tìm kiếm\/duyệt. Khi bỏ chọn biểu ghi sẽ chỉ có sẵn qua đường dẫn trực tiếp và sẽ không bao giờ xuất hiện trong tìm kiếm\/duyệt.", + "submission.sections.accesses.form.discoverable-description": "Khi được chọn biểu ghi này sẽ có thể được tìm thấy trong các chức năng tìm kiếm/duyệt. Khi bỏ chọn biểu ghi sẽ chỉ có sẵn qua đường dẫn trực tiếp và sẽ không bao giờ xuất hiện trong tìm kiếm/duyệt.", "submission.sections.accesses.form.discoverable-label": "Có thể khám phá", "submission.sections.accesses.form.from-hint": "Chọn ngày mà quyền được áp dụng", "submission.sections.accesses.form.from-label": "Cấp quyền truy cập từ", @@ -2196,8 +2087,8 @@ "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Nhập tài liệu từ cơ sở dữ liệu từ xa", "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Nhập tổ chức từ cơ sở dữ liệu từ xa", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Nhập bằng sáng chế từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", - "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Nhập tác giả\/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Nhập tác giả/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Nhập tác giả/ nhà nghiên cứu từ cơ sở dữ liệu từ xa", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Nhập dự án từ cơ sở dữ liệu từ xa", "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Nhập ấn phẩm từ cơ sở dữ liệu từ xa", "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Kiểm soát", @@ -2350,7 +2241,7 @@ "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", "submission.sections.sherpa.publisher.policy": "Chính sách của nhà xuất bản", "submission.sections.sherpa.publisher.policy.conditions": "Điều kiện", - "submission.sections.sherpa.publisher.policy.description": "Thông tin dưới đây được tìm thấy thông qua Sherpa Romeo. Dựa trên các chính sách của nhà xuất bản của bạn hệ thống sẽ đưa ra lời khuyên về việc có cần thiết phải hạn chế hay không và\/hoặc những tệp nào mà bạn được phép tải lên. Nếu bạn có thắc mắc vui lòng liên hệ với quản trị viên.", + "submission.sections.sherpa.publisher.policy.description": "Thông tin dưới đây được tìm thấy thông qua Sherpa Romeo. Dựa trên các chính sách của nhà xuất bản của bạn hệ thống sẽ đưa ra lời khuyên về việc có cần thiết phải hạn chế hay không và/hoặc những tệp nào mà bạn được phép tải lên. Nếu bạn có thắc mắc vui lòng liên hệ với quản trị viên.", "submission.sections.sherpa.publisher.policy.embargo": "Hạn chế", "submission.sections.sherpa.publisher.policy.license": "Bản quyền", "submission.sections.sherpa.publisher.policy.location": "Vị trí", @@ -2450,7 +2341,6 @@ "submission.workflow.tasks.pool.show-detail": "Xem chi tiết", "submission.workspace.generic.view": "Xem", "submission.workspace.generic.view-help": "Chọn tủy chọn để xem thông tin mô tả của tài liệu", - "thumbnail.default.alt": "Hình ảnh thu nhỏ", "thumbnail.default.placeholder": "Không có ảnh thu nhỏ nào", "thumbnail.orgunit.alt": "Logo Đơn vị tổ chức", @@ -2459,9 +2349,7 @@ "thumbnail.person.placeholder": "Không có ảnh hồ sơ nào", "thumbnail.project.alt": "Logo dự án", "thumbnail.project.placeholder": "Hình ảnh giữ chỗ của dự án", - "title": "DSpace", - "vocabulary-treeview.header": "Chế độ xem phân cấp", "vocabulary-treeview.info": "Chọn một chủ đề để thêm làm bộ lọc tìm kiếm", "vocabulary-treeview.load-more": "Xem thêm", @@ -2470,20 +2358,15 @@ "vocabulary-treeview.search.no-result": "Không có tài liệu nào hiển thị", "vocabulary-treeview.tree.description.nsi": "Chỉ số Norwegian Science", "vocabulary-treeview.tree.description.srsc": "Danh mục chủ đề", - "uploader.browse": "duyệt", "uploader.delete.btn-title": "Xóa", "uploader.drag-message": "Kéo & thả tệp tại đây", "uploader.processing": "Đang xử lý", "uploader.queue-length": "Chiều dài hàng đợi", - "virtual-metadata.delete-item.info": "Chọn kiểu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", "virtual-metadata.delete-item.modal-head": "Siêu dữ liệu ảo của mối quan hệ này", "virtual-metadata.delete-relationship.modal-head": "Chọn các tài liệu mà bạn muốn lưu thông tin mô tả ảo làm thông tin mô tả thực", - "supervisedWorkspace.search.results.head": "Supervised Items", - - "workflow.search.results.head": "Tất cả nhiệm vụ", "workflowAdmin.search.results.head": "Tiến trình làm việc của quản trị viên", "workflow-item.delete.button.cancel": "Hủy", @@ -2508,12 +2391,10 @@ "workspace.search.results.head": "Biểu ghi bạn đã tải lên", "workspace-item.view.breadcrumbs": "Xem các tài liệu đang biên mục dở dang", "workspace-item.view.title": "Xem các tài liệu đang biên mục dở dang", - "idle-modal.extend-session": "Gia hạn phiên", "idle-modal.header": "Phiên sẽ sớm hết hạn", "idle-modal.info": "Vì lý do bảo mật các phiên của người dùng sẽ hết hạn sau {{timeToExpire}} phút không hoạt động. Phiên của bạn sẽ sớm hết hạn. Bạn muốn gia hạn hay đăng xuất?", "idle-modal.log-out": "Đăng xuất", - "researcher.profile.action.processing": "Đang xử lý…", "researcher.profile.associated": "Hồ sơ nhà nghiên cứu đã được liên kết", "researcher.profile.change-visibility.fail": "Đã xảy ra lỗi khi thay đổi chế độ hiển thị hồ sơ", @@ -2528,7 +2409,6 @@ "researcher.profile.public.visibility": "CÔNG CỘNG", "researcher.profile.status": "Trạng thái:", "researcher.profile.view": "Xem", - "person.page.orcid": "ORCID", "person.page.orcid.create": "Tạo một ID trên ORCID", "person.page.orcid.funding-preferences": "Quỹ ưa thích", @@ -2546,9 +2426,9 @@ "person.page.orcid.publications-preferences": "Tham số của ấn phẩm", "person.page.orcid.remove-orcid-message": "Nếu bạn cần xóa ORCID của bạn vui lòng liên hệ với quản trị viên.", "person.page.orcid.save.preference.changes": "Cập nhật cài đặt", - "person.page.orcid.scope.activities-update": "Thêm\/cập nhật các hoạt động nghiên cứu của bạn", + "person.page.orcid.scope.activities-update": "Thêm/cập nhật các hoạt động nghiên cứu của bạn", "person.page.orcid.scope.authenticate": "Lấy ID ORCID của bạn", - "person.page.orcid.scope.person-update": "Thêm\/cập nhật thông tin cá nhân của bạn", + "person.page.orcid.scope.person-update": "Thêm/cập nhật thông tin cá nhân của bạn", "person.page.orcid.scope.read-limited": "Thiết lập để cho phép Các bên Tin cậy (Trusted Parties) có khả năng đọc thông tin của bạn ", "person.page.orcid.sync-fundings.all": "Tất cả quỹ", "person.page.orcid.sync-fundings.disabled": "Đã ngừng kích hoạt", @@ -2558,10 +2438,10 @@ "person.page.orcid.synchronization-mode.batch": "Theo lô", "person.page.orcid.synchronization-mode.label": "Chế độ đồng bộ", "person.page.orcid.synchronization-mode.manual": "Thủ công", - "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi\/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", + "person.page.orcid.synchronization-mode-funding-message": "Chọn gửi/không gửi các thực thể dự án của bạn đến danh sách các quỹ tài trợ trong bản ghi ORCID của bạn hay không.", "person.page.orcid.synchronization-mode-message": "Vui lòng chọn phương thức đồng bộ hóa với ORCID. Các tùy chọn bao gồm \"Thủ công\" (bạn phải gửi dữ liệu của mình tới ORCID theo cách thủ công) hoặc \"Tự động\" (hệ thống sẽ gửi dữ liệu của bạn tới ORCID thông qua tập lệnh đã lên lịch).", - "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi\/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", - "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi\/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", + "person.page.orcid.synchronization-mode-profile-message": "Chọn gửi/ không gửi thông tin tiểu sử hoặc số định danh cá nhân tới hồ sơ ORCID của bạn.", + "person.page.orcid.synchronization-mode-publication-message": "Chọn gửi/ không gửi các thực thể Ấn phẩm tới danh sách các tác phẩm trong biểu ghi ORCID của bạn.", "person.page.orcid.synchronization-settings-update.error": "Cập nhật cài đặt đồng bộ hóa không thành công", "person.page.orcid.synchronization-settings-update.success": "Cài đặt đồng bộ hóa đã được cập nhật thành công", "person.page.orcid.sync-profile.affiliation": "Tổ chức", @@ -2590,7 +2470,7 @@ "person.page.orcid.sync-queue.send.error": "Đẩy dữ liệu lên ORCID không thành công", "person.page.orcid.sync-queue.send.not-found-warning": "Tài nguyên không còn tồn tại trên ORCID.", "person.page.orcid.sync-queue.send.success": "Đẩy dữ liệu lên ORCID thành công", - "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây<\/a> để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Nhấp vào đây để cấp lại các quyền bắt buộc. Nếu vấn đề vẫn còn tồn tại vui lòng liên hệ quản trị viên.", "person.page.orcid.sync-queue.send.unauthorized-error.title": "Đẩy dữ liệu lên ORCID không thành công do tài khoản của bạn không đủ các quyền cần thiết.", "person.page.orcid.sync-queue.send.validation-error": "Dữ liệu bạn muốn đồng bộ với ORCID là dữ liệu không hợp lệ", "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "Đơn vị tiền tệ là bắt buộc", @@ -2630,23 +2510,17 @@ "person.page.orcid.unlink.error": "Đã xảy ra lỗi khi ngắt kết nối giữa hồ sơ và ORCID. Vui lòng thử lại.", "person.page.orcid.unlink.processing": "Đang xử lý…", "person.page.orcid.unlink.success": "Đã ngắt kết nối giữa hồ sơ nhà nghiên cứu và trang ORCID thành công", - "person.orcid.registry.auth": "Được phép qua ORCID ", "person.orcid.registry.queue": "Đang xếp hàng đợi đăng ký ORCID", "person.orcid.sync.setting": "Thiết lập đồng bộ hóa với ORCID", - "home.recent-submissions.head": "Các tài liệu tải lên gần đây", - "listable-notification-object.default-message": "Không thể truy xuất", - "system-wide-alert-banner.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo hệ thống", "system-wide-alert-banner.countdown.prefix": "Trong", "system-wide-alert-banner.countdown.days": "{{days}} ngày", "system-wide-alert-banner.countdown.hours": "{{hours}} giờ và", "system-wide-alert-banner.countdown.minutes": "{{minutes}} phút:", - "menu.section.system-wide-alert": "Cảnh báo toàn hệ thống", - "system-wide-alert.form.header": "Cảnh báo toàn hệ thống", "system-wide-alert-form.retrieval.error": "Đã xảy ra lỗi trong quá trình truy xuất cảnh báo trên toàn hệ thống", "system-wide-alert.form.cancel": "Hủy", From 0dbbe6cb79790bfdb92e468c0984f924cc3e3036 Mon Sep 17 00:00:00 2001 From: tuanvu Date: Wed, 26 Apr 2023 16:29:12 +0700 Subject: [PATCH 540/833] Update error --- src/assets/i18n/vi.json5 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 index 169f19f41a..88c537bca8 100644 --- a/src/assets/i18n/vi.json5 +++ b/src/assets/i18n/vi.json5 @@ -310,7 +310,7 @@ "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "Không có nhóm hoạt động, gửi tên trước.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "Chưa có thành viên nào trong nhóm, tìm kiếm để thêm.", "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "Không tìm thấy người dùng", - "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "Không có người kiểm duyệt nào được chọn.", "auth.errors.invalid-user": "Địa chỉ email hoặc mật khẩu không hợp lệ.", "auth.messages.expired": "Phiên của bạn đã hết hạn. Xin vui lòng đăng nhập lại.", "auth.messages.token-refresh-failed": "Làm mới mã token phiên làm việc của bạn không thành công. Vui lòng đăng nhập lại.", @@ -733,7 +733,7 @@ "supervision-group-selector.select.group.error": "Please select a group", "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", "supervision-group-selector.notification.create.failure.title": "Error", - "supervision-group-selector.notification.create.already-existing" : "A supervision order already exists on this item for selected group", + "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", "confirmation-modal.delete-eperson.cancel": "Hủy", "confirmation-modal.delete-eperson.confirm": "Xóa", "confirmation-modal.delete-eperson.header": "Xóa người dùng \"{{ dsoName }}\"", @@ -764,7 +764,7 @@ "error.community": "Lỗi tìm kiếm đơn vị", "error.default": "Lỗi", "error.identifier": "Không tìm thấy tài liệu nào cho định danh này", - "error.invalid-search-query": "Truy vấn tìm kiếm không hợp lệ. Vui lòng kiểm tra Cú pháp truy vấn Solr các phương pháp tốt nhất để biết thêm thông tin về lỗi này.", + "error.invalid-search-query": "Truy vấn tìm kiếm không hợp lệ. Vui lòng kiểm tra Cú pháp truy vấn Solr các phương pháp tốt nhất để biết thêm thông tin về lỗi này.", "error.item": "Lỗi tìm kiếm tài liệu", "error.items": "Lỗi tìm kiếm tài liệu", "error.objects": "Lỗi tìm kiếm đối tượng", From 94f52721d45159fa9037111ad8063815dc77a0d5 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 26 Apr 2023 11:29:17 +0200 Subject: [PATCH 541/833] 101289: #1578 Removed border from primaryBitstream switch --- .../edit-bitstream-page/edit-bitstream-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index 5110a5e936..df8f285a6a 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -291,7 +291,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { }, primaryBitstream: { grid: { - host: 'col col-sm-4 d-inline-block switch' + host: 'col col-sm-4 d-inline-block switch border-0' } }, description: { From b83c218bf116898c83baa21a85c98db0cb94d3eb Mon Sep 17 00:00:00 2001 From: tuanvu Date: Wed, 26 Apr 2023 16:35:44 +0700 Subject: [PATCH 542/833] Update --- src/assets/i18n/vi.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/i18n/vi.json5 b/src/assets/i18n/vi.json5 index 88c537bca8..7627818978 100644 --- a/src/assets/i18n/vi.json5 +++ b/src/assets/i18n/vi.json5 @@ -1268,7 +1268,7 @@ "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", "itemtemplate.edit.metadata.reinstate-button": "Undo", "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", - "itemtemplate.edit.metadata.save-button": "Save", + "itemtemplate.edit.metadata.save-button": "Save", "journal.listelement.badge": "Tạp chí", "journal.page.description": "Mô tả", "journal.page.edit": "Chỉnh sửa tài liệu này", @@ -1473,7 +1473,7 @@ "nav.stop-impersonating": "Ngừng giả danh Người dùng", "nav.toggle": "Điều hướng chuyển", "nav.user.description": "Thanh hồ sơ người dùng", - "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", + "nav.user-profile-menu-and-logout": "Trình đơn Hồ sơ cá nhân và Đăng xuất", "none.listelement.badge": "Tài liệu", "orgunit.listelement.badge": "Đơn vị/Tổ chức", "orgunit.listelement.no-title": "Không có nhan đề", From a80cae8fb5d5d76edcc8136999ca4f2e755df87b Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 12:14:09 +0200 Subject: [PATCH 543/833] 101353: Add browse link + queryparams in BrowseByTaxonomyPage --- .../browse-by-taxonomy-page.component.html | 6 +++++- .../browse-by-taxonomy-page.component.ts | 21 +++++++++++++++++++ src/assets/i18n/en.json5 | 2 ++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index 39fcf1ab30..4b6f3586fe 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -1,5 +1,9 @@
    +
    + [multiSelect]="true" + (select)="onSelect($event)"> +
    + {{ 'browse.taxonomy.button' | translate }}
    diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index b697c74052..459442aabc 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { VocabularyOptions } from '../../core/submission/vocabularies/models/vocabulary-options.model'; +import { VocabularyEntryDetail } from '../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; @Component({ selector: 'ds-browse-by-taxonomy-page', @@ -11,9 +12,29 @@ import { VocabularyOptions } from '../../core/submission/vocabularies/models/voc */ export class BrowseByTaxonomyPageComponent implements OnInit { + /** + * The {@link VocabularyOptions} object + */ vocabularyOptions: VocabularyOptions; + /** + * The selected vocabulary entries + */ + selectedItems: VocabularyEntryDetail[] = []; + + /** + * The query parameters, contain the selected entries + */ + queryParams: { 'f.subject': string[] }; + ngOnInit() { this.vocabularyOptions = { name: 'srsc', closed: true }; } + + onSelect(detail: VocabularyEntryDetail): void { + this.selectedItems.push(detail); + const filterValues = this.selectedItems + .map((item: VocabularyEntryDetail) => `${item.value},equals`); + this.queryParams = { 'f.subject': filterValues }; + } } diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 584cb6d53f..5a0f5ce5d0 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -775,6 +775,8 @@ "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.taxonomy.button": "Browse", + "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", From 496853671edbd01e4b181cb70f10526911f9544a Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 26 Apr 2023 12:35:50 +0200 Subject: [PATCH 544/833] [CST-9636] Added access control components in community, item and collection edit page --- .../collection-access-control.component.html | 3 ++ .../collection-access-control.component.scss | 0 ...ollection-access-control.component.spec.ts | 25 +++++++++++++ .../collection-access-control.component.ts | 37 +++++++++++++++++++ .../edit-collection-page.module.ts | 3 +- .../edit-collection-page.routing.module.ts | 6 +++ .../community-access-control.component.html | 1 + .../community-access-control.component.scss | 0 ...community-access-control.component.spec.ts | 25 +++++++++++++ .../community-access-control.component.ts | 15 ++++++++ .../edit-community-page.module.ts | 4 +- .../edit-community-page.routing.module.ts | 6 +++ .../edit-item-page/edit-item-page.module.ts | 4 +- .../edit-item-page.routing.module.ts | 6 +++ .../item-access-control.component.html | 1 + .../item-access-control.component.scss | 0 .../item-access-control.component.spec.ts | 25 +++++++++++++ .../item-access-control.component.ts | 15 ++++++++ src/assets/i18n/en.json5 | 12 ++++++ 19 files changed, 185 insertions(+), 3 deletions(-) create mode 100644 src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html create mode 100644 src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.scss create mode 100644 src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.spec.ts create mode 100644 src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts create mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html create mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.component.scss create mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.component.spec.ts create mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts create mode 100644 src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html create mode 100644 src/app/item-page/edit-item-page/item-access-control/item-access-control.component.scss create mode 100644 src/app/item-page/edit-item-page/item-access-control/item-access-control.component.spec.ts create mode 100644 src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html new file mode 100644 index 0000000000..0719a18d94 --- /dev/null +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html @@ -0,0 +1,3 @@ +
    + Access control page!!! +
    diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.scss b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.spec.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.spec.ts new file mode 100644 index 0000000000..5ae7480d66 --- /dev/null +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CollectionAccessControlComponent } from './collection-access-control.component'; + +describe('CollectionAccessControlComponent', () => { + let component: CollectionAccessControlComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ CollectionAccessControlComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CollectionAccessControlComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts new file mode 100644 index 0000000000..8675e3a83f --- /dev/null +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts @@ -0,0 +1,37 @@ +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RemoteData } from '../../../core/data/remote-data'; +import { ActivatedRoute } from '@angular/router'; +import { first, map } from 'rxjs/operators'; +import { DSpaceObject } from '../../../core/shared/dspace-object.model'; + +@Component({ + selector: 'ds-collection-access-control', + templateUrl: './collection-access-control.component.html', + styleUrls: ['./collection-access-control.component.scss'] +}) +export class CollectionAccessControlComponent implements OnInit { + + /** + * The initial DSO object + */ + public dsoRD$: Observable>; + + /** + * Initialize instance variables + * + * @param {ActivatedRoute} route + */ + constructor( + private route: ActivatedRoute + ) { + } + + /** + * Initialize the component, setting up the collection + */ + ngOnInit(): void { + this.dsoRD$ = this.route.parent.parent.data.pipe(first(), map((data) => data.dso)); + } + +} diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 18f7feb699..3817122368 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -13,6 +13,7 @@ import { CollectionSourceControlsComponent } from './collection-source/collectio import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { FormModule } from '../../shared/form/form.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; +import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -33,7 +34,7 @@ import { ComcolModule } from '../../shared/comcol/comcol.module'; CollectionRolesComponent, CollectionCurateComponent, CollectionSourceComponent, - + CollectionAccessControlComponent, CollectionSourceControlsComponent, CollectionAuthorizationsComponent ] diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.routing.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.routing.module.ts index 92fc6efeff..c4481985c0 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.routing.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.routing.module.ts @@ -13,6 +13,7 @@ import { ResourcePolicyCreateComponent } from '../../shared/resource-policies/cr import { ResourcePolicyResolver } from '../../shared/resource-policies/resolvers/resource-policy.resolver'; import { ResourcePolicyEditComponent } from '../../shared/resource-policies/edit/resource-policy-edit.component'; import { CollectionAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/collection-administrator.guard'; +import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; /** * Routing module that handles the routing for the Edit Collection page administrator functionality @@ -58,6 +59,11 @@ import { CollectionAdministratorGuard } from '../../core/data/feature-authorizat component: CollectionCurateComponent, data: { title: 'collection.edit.tabs.curate.title', showBreadcrumbs: true } }, + { + path: 'access-control', + component: CollectionAccessControlComponent, + data: { title: 'collection.edit.tabs.access-control.title', showBreadcrumbs: true } + }, /* { path: 'authorizations', component: CollectionAuthorizationsComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html new file mode 100644 index 0000000000..cec7f44321 --- /dev/null +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -0,0 +1 @@ +

    community-access-control works!

    diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.scss b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.spec.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.spec.ts new file mode 100644 index 0000000000..7ec727bbb5 --- /dev/null +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CommunityAccessControlComponent } from './community-access-control.component'; + +describe('CommunityAccessControlComponent', () => { + let component: CommunityAccessControlComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ CommunityAccessControlComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CommunityAccessControlComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts new file mode 100644 index 0000000000..543d63564e --- /dev/null +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ds-community-access-control', + templateUrl: './community-access-control.component.html', + styleUrls: ['./community-access-control.component.scss'] +}) +export class CommunityAccessControlComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index 0479ea6bc6..a9f020a9e6 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -10,6 +10,7 @@ import { CommunityAuthorizationsComponent } from './community-authorizations/com import { CommunityFormModule } from '../community-form/community-form.module'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; +import { CommunityAccessControlComponent } from './community-access-control/community-access-control.component'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -28,7 +29,8 @@ import { ComcolModule } from '../../shared/comcol/comcol.module'; CommunityCurateComponent, CommunityMetadataComponent, CommunityRolesComponent, - CommunityAuthorizationsComponent + CommunityAuthorizationsComponent, + CommunityAccessControlComponent ] }) export class EditCommunityPageModule { diff --git a/src/app/community-page/edit-community-page/edit-community-page.routing.module.ts b/src/app/community-page/edit-community-page/edit-community-page.routing.module.ts index faebb1ef2e..994c6b5e96 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.routing.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.routing.module.ts @@ -11,6 +11,7 @@ import { ResourcePolicyCreateComponent } from '../../shared/resource-policies/cr import { ResourcePolicyResolver } from '../../shared/resource-policies/resolvers/resource-policy.resolver'; import { ResourcePolicyEditComponent } from '../../shared/resource-policies/edit/resource-policy-edit.component'; import { CommunityAdministratorGuard } from '../../core/data/feature-authorization/feature-authorization-guard/community-administrator.guard'; +import { CommunityAccessControlComponent } from './community-access-control/community-access-control.component'; /** * Routing module that handles the routing for the Edit Community page administrator functionality @@ -51,6 +52,11 @@ import { CommunityAdministratorGuard } from '../../core/data/feature-authorizati component: CommunityCurateComponent, data: { title: 'community.edit.tabs.curate.title', showBreadcrumbs: true } }, + { + path: 'access-control', + component: CommunityAccessControlComponent, + data: { title: 'collection.edit.tabs.access-control.title', showBreadcrumbs: true } + }, /*{ path: 'authorizations', component: CommunityAuthorizationsComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 24d27b3340..d922cee0a5 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -38,6 +38,7 @@ import { IdentifierDataService } from '../../core/data/identifier-data.service'; import { IdentifierDataComponent } from '../../shared/object-list/identifier-data/identifier-data.component'; import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; +import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; /** @@ -81,7 +82,8 @@ import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; VirtualMetadataComponent, ItemAuthorizationsComponent, IdentifierDataComponent, - ItemRegisterDoiComponent + ItemRegisterDoiComponent, + ItemAccessControlComponent ], providers: [ BundleDataService, diff --git a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts index 88172e2620..ce1d258b6b 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.routing.module.ts @@ -41,6 +41,7 @@ import { ItemPageVersionHistoryGuard } from './item-page-version-history.guard'; import { ItemPageCollectionMapperGuard } from './item-page-collection-mapper.guard'; import { ThemedDsoEditMetadataComponent } from '../../dso-shared/dso-edit-metadata/themed-dso-edit-metadata.component'; import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard'; +import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; /** * Routing module that handles the routing for the Edit Item page administrator functionality @@ -106,6 +107,11 @@ import { ItemPageRegisterDoiGuard } from './item-page-register-doi.guard'; data: { title: 'item.edit.tabs.versionhistory.title', showBreadcrumbs: true }, canActivate: [ItemPageVersionHistoryGuard] }, + { + path: 'access-control', + component: ItemAccessControlComponent, + data: { title: 'item.edit.tabs.access-control.title', showBreadcrumbs: true } + }, { path: 'mapper', component: ItemCollectionMapperComponent, diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html new file mode 100644 index 0000000000..416b785722 --- /dev/null +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -0,0 +1 @@ +

    item-access-control works!

    diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.scss b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.spec.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.spec.ts new file mode 100644 index 0000000000..297ffa3822 --- /dev/null +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ItemAccessControlComponent } from './item-access-control.component'; + +describe('ItemAccessControlComponent', () => { + let component: ItemAccessControlComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ItemAccessControlComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ItemAccessControlComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts new file mode 100644 index 0000000000..5b42e5bf4e --- /dev/null +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ds-item-access-control', + templateUrl: './item-access-control.component.html', + styleUrls: ['./item-access-control.component.scss'] +}) +export class ItemAccessControlComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 66824e56b3..2c7ae5459f 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -965,6 +965,10 @@ "collection.edit.return": "Back", + "collection.edit.tabs.access-control.head": "Access Control", + + "collection.edit.tabs.access-control.title": "Collection Edit - Access Control", + "collection.edit.tabs.curate.head": "Curate", @@ -1201,6 +1205,10 @@ "community.edit.tabs.curate.title": "Community Edit - Curate", + "community.edit.tabs.access-control.head": "Access Control", + + "community.edit.tabs.access-control.title": "Community Edit - Access Control", + "community.edit.tabs.metadata.head": "Edit Metadata", "community.edit.tabs.metadata.title": "Community Edit - Metadata", @@ -2292,6 +2300,10 @@ "item.edit.tabs.curate.title": "Item Edit - Curate", + "item.edit.tabs.access-control.head": "Access Control", + + "item.edit.tabs.access-control.title": "Item Edit - Access Control", + "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.title": "Item Edit - Metadata", From 3ee09834b1d070c11630d1221ccbbb746982c801 Mon Sep 17 00:00:00 2001 From: lotte Date: Wed, 26 Apr 2023 13:47:39 +0200 Subject: [PATCH 545/833] 101289: #1578 Changed primarybitstream field to primaryBitstreamUUID --- .../edit-bitstream-page/edit-bitstream-page.component.ts | 2 +- src/app/core/shared/bundle.model.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts index df8f285a6a..d84b8ae4e6 100644 --- a/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts +++ b/src/app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component.ts @@ -371,7 +371,7 @@ export class EditBitstreamPageComponent implements OnInit, OnDestroy { * Path to patch primary bitstream on the bundle * @private */ - private readonly primaryBitstreamPath = '/primarybitstream'; + private readonly primaryBitstreamPath = '/primaryBitstreamUUID'; constructor(private route: ActivatedRoute, private router: Router, diff --git a/src/app/core/shared/bundle.model.ts b/src/app/core/shared/bundle.model.ts index 72c466d2d6..bcaa582703 100644 --- a/src/app/core/shared/bundle.model.ts +++ b/src/app/core/shared/bundle.model.ts @@ -1,4 +1,4 @@ -import { autoserializeAs, deserialize, inheritSerialization } from 'cerialize'; +import { autoserialize, deserialize, inheritSerialization } from 'cerialize'; import { Observable } from 'rxjs'; @@ -30,9 +30,9 @@ export class Bundle extends DSpaceObject { }; /** - * The ID of the primaryBitstream of this Bundle + * The UUID of the primaryBitstream of this Bundle */ - @autoserializeAs('primarybitstream') + @autoserialize primaryBitstreamUUID: string; /** From c89adf4f8118a982818e7eb42e27f6b15a9c410a Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Wed, 26 Apr 2023 15:33:02 +0200 Subject: [PATCH 546/833] [DURACOM-134] send-back action fixed --- .../workflow-item-action-page.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts index b8998a6dd7..2ed5639c5a 100644 --- a/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts +++ b/src/app/workflowitems-edit-page/workflow-item-action-page.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { Location } from '@angular/common'; -import { Observable, forkJoin } from 'rxjs'; +import { Observable, combineLatest } from 'rxjs'; import { map, switchMap, take } from 'rxjs/operators'; import { TranslateService } from '@ngx-translate/core'; import { WorkflowItem } from '../core/submission/models/workflowitem.model'; @@ -52,7 +52,7 @@ export abstract class WorkflowItemActionPageComponent implements OnInit { * Performs the action and shows a notification based on the outcome of the action */ performAction() { - forkJoin([this.wfi$, this.requestService.removeByHrefSubstring('/discover')]).pipe( + combineLatest([this.wfi$, this.requestService.removeByHrefSubstring('/discover')]).pipe( take(1), switchMap(([wfi]) => this.sendRequest(wfi.id)) ).subscribe((successful: boolean) => { From 03bf4befabb3434536cb2b28c66f83ead1503c0f Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 15:57:42 +0200 Subject: [PATCH 547/833] 101353: Fix issues in BrowseByTaxonomyPage and VocabularyTreeview --- .../browse-by-taxonomy-page.component.html | 2 +- .../browse-by-taxonomy-page.component.ts | 21 ++++++++++++++----- .../vocabulary-treeview.component.html | 8 +++---- .../vocabulary-treeview.component.spec.ts | 4 ++-- .../vocabulary-treeview.component.ts | 8 +++++-- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index 4b6f3586fe..f84e3d72b1 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -5,5 +5,5 @@ (select)="onSelect($event)">
    - {{ 'browse.taxonomy.button' | translate }} + {{ 'browse.taxonomy.button' | translate }}
    diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index 459442aabc..c534c5e205 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -25,16 +25,27 @@ export class BrowseByTaxonomyPageComponent implements OnInit { /** * The query parameters, contain the selected entries */ - queryParams: { 'f.subject': string[] }; + filterValues: string[]; ngOnInit() { this.vocabularyOptions = { name: 'srsc', closed: true }; } + /** + * Adds detail to selectedItems, transforms it to be used as query parameter + * and adds that to filterValues. If they already contained the detail, + * it gets deleted from both arrays. + * + * @param detail VocabularyEntryDetail to be added/deleted + */ onSelect(detail: VocabularyEntryDetail): void { - this.selectedItems.push(detail); - const filterValues = this.selectedItems - .map((item: VocabularyEntryDetail) => `${item.value},equals`); - this.queryParams = { 'f.subject': filterValues }; + if (!this.selectedItems.includes(detail)) { + this.selectedItems.push(detail); + this.filterValues = this.selectedItems + .map((item: VocabularyEntryDetail) => `${item.value},equals`); + } else { + this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); + this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); + } } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 2de1d375cb..0c90ae473b 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -33,8 +33,8 @@ container="body" (click)="onSelect(node.item)"> - - + + {{node.item.display}} @@ -57,8 +57,8 @@ container="body" (click)="onSelect(node.item)"> - - + + {{node.item.display}} diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts index 29e80cfc94..e5f5145e0a 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.spec.ts @@ -264,14 +264,14 @@ describe('VocabularyTreeviewComponent test suite', () => { it('should not display checkboxes by default', async () => { fixture.detectChanges(); - expect(de.query(By.css('input[checkbox]'))).toBeNull(); + expect(de.query(By.css('.form-check-input'))).toBeNull(); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); it('should display checkboxes if multiSelect is true', async () => { comp.multiSelect = true; fixture.detectChanges(); - expect(de.queryAll(By.css('#leaf-node-checkbox')).length).toEqual(3); + expect(de.queryAll(By.css('.form-check-input')).length).toEqual(3); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); }); diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 572074d644..01225c638a 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -245,8 +245,12 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { * Method called on entry select */ onSelect(item: VocabularyEntryDetail) { - this.selectedItems.push(item.id); - this.select.emit(item); + if (!this.selectedItems.includes(item.id)) { + this.selectedItems.push(item.id); + this.select.emit(item); + } else { + this.selectedItems = this.selectedItems.filter((detail: string) => { return detail !== item.id; }); + } } /** From 14b053b70418537a412795545ba6ad933feae779 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 17:46:10 +0200 Subject: [PATCH 548/833] 101353: Add deselect Output in VocabularyTreeview --- .../browse-by-taxonomy-page.component.html | 3 ++- .../browse-by-taxonomy-page.component.ts | 15 +++++++-------- .../vocabulary-treeview.component.ts | 7 +++++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html index f84e3d72b1..149e1e6b33 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.html @@ -2,7 +2,8 @@
    + (select)="onSelect($event)" + (deselect)="onDeselect($event)">
    {{ 'browse.taxonomy.button' | translate }} diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts index c534c5e205..b132f299d6 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.ts @@ -33,19 +33,18 @@ export class BrowseByTaxonomyPageComponent implements OnInit { /** * Adds detail to selectedItems, transforms it to be used as query parameter - * and adds that to filterValues. If they already contained the detail, - * it gets deleted from both arrays. + * and adds that to filterValues. * - * @param detail VocabularyEntryDetail to be added/deleted + * @param detail VocabularyEntryDetail to be added */ onSelect(detail: VocabularyEntryDetail): void { - if (!this.selectedItems.includes(detail)) { this.selectedItems.push(detail); this.filterValues = this.selectedItems .map((item: VocabularyEntryDetail) => `${item.value},equals`); - } else { - this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); - this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); - } + } + + onDeselect(detail: VocabularyEntryDetail): void { + this.selectedItems = this.selectedItems.filter((entry: VocabularyEntryDetail) => { return entry !== detail; }); + this.filterValues = this.filterValues.filter((value: string) => { return value !== `${detail.value},equals`; }); } } diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts index 01225c638a..2199de920e 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.ts @@ -94,6 +94,12 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { */ @Output() select: EventEmitter = new EventEmitter(null); + /** + * An event fired when a vocabulary entry is deselected. + * Event's payload equals to {@link VocabularyEntryDetail} deselected. + */ + @Output() deselect: EventEmitter = new EventEmitter(null); + /** * A boolean representing if user is authenticated */ @@ -250,6 +256,7 @@ export class VocabularyTreeviewComponent implements OnDestroy, OnInit { this.select.emit(item); } else { this.selectedItems = this.selectedItems.filter((detail: string) => { return detail !== item.id; }); + this.deselect.emit(item); } } From bb242d99a6b7715203e2fcc96c1f9512173773a3 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 18:37:55 +0200 Subject: [PATCH 549/833] 101353: Fix VocabularyTreeview onSelect being called twice --- .../vocabulary-treeview.component.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 0c90ae473b..82d8077dbc 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -33,7 +33,9 @@ container="body" (click)="onSelect(node.item)"> - + + {{node.item.display}} @@ -57,7 +59,9 @@ container="body" (click)="onSelect(node.item)"> - + + {{node.item.display}} From ea297d1296c4ee685a57e19efbf3c01fdd69ce06 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 26 Apr 2023 18:40:38 +0200 Subject: [PATCH 550/833] 101353: Add tests for BrowseByTaxonomyPageComponent --- .../browse-by-taxonomy-page.component.spec.ts | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts index b1ce257ef6..bc9380d7ad 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/browse-by-taxonomy-page.component.spec.ts @@ -1,14 +1,21 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.component'; +import { VocabularyEntryDetail } from '../../core/submission/vocabularies/models/vocabulary-entry-detail.model'; +import { TranslateModule } from '@ngx-translate/core'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; describe('BrowseByTaxonomyPageComponent', () => { let component: BrowseByTaxonomyPageComponent; let fixture: ComponentFixture; + let detail1: VocabularyEntryDetail; + let detail2: VocabularyEntryDetail; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BrowseByTaxonomyPageComponent ] + imports: [ TranslateModule.forRoot() ], + declarations: [ BrowseByTaxonomyPageComponent ], + schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); }); @@ -17,9 +24,47 @@ describe('BrowseByTaxonomyPageComponent', () => { fixture = TestBed.createComponent(BrowseByTaxonomyPageComponent); component = fixture.componentInstance; fixture.detectChanges(); + detail1 = new VocabularyEntryDetail(); + detail2 = new VocabularyEntryDetail(); + detail1.value = 'HUMANITIES and RELIGION'; + detail2.value = 'TECHNOLOGY'; }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should handle select event', () => { + component.onSelect(detail1); + expect(component.selectedItems.length).toBe(1); + expect(component.selectedItems).toContain(detail1); + expect(component.selectedItems.length).toBe(1); + expect(component.filterValues).toEqual(['HUMANITIES and RELIGION,equals'] ); + }); + + it('should handle select event with multiple selected items', () => { + component.onSelect(detail1); + component.onSelect(detail2); + expect(component.selectedItems.length).toBe(2); + expect(component.selectedItems).toContain(detail1, detail2); + expect(component.selectedItems.length).toBe(2); + expect(component.filterValues).toEqual(['HUMANITIES and RELIGION,equals', 'TECHNOLOGY,equals'] ); + }); + + it('should handle deselect event', () => { + component.onSelect(detail1); + component.onSelect(detail2); + expect(component.selectedItems.length).toBe(2); + expect(component.selectedItems.length).toBe(2); + component.onDeselect(detail1); + expect(component.selectedItems.length).toBe(1); + expect(component.selectedItems).toContain(detail2); + expect(component.selectedItems.length).toBe(1); + expect(component.filterValues).toEqual(['TECHNOLOGY,equals'] ); + }); + + afterEach(() => { + fixture.destroy(); + component = null; + }); }); From fe1be27d4913d99252461e7cb5d06e20a566d5ab Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Wed, 26 Apr 2023 18:46:01 +0200 Subject: [PATCH 551/833] Bump Node heap size in CI --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6fae54f1f9..219074780e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,6 +31,8 @@ jobs: # When Chrome version is specified, we pin to a specific version of Chrome # Comment this out to use the latest release #CHROME_VERSION: "90.0.4430.212-1" + # Bump Node heap size (OOM in CI after upgrading to Angular 15) + NODE_OPTIONS: '--max-old-space-size=4096' strategy: # Create a matrix of Node versions to test against (in parallel) matrix: From b1d33c83a630d58d3116e3c5a9c78dee46099e26 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 27 Apr 2023 09:41:40 +0200 Subject: [PATCH 552/833] fixup! Added Curate tab in Edit Item page --- .../edit-item-page/item-curate/item-curate.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts b/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts index 9770d2e1aa..c104b4400b 100644 --- a/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts +++ b/src/app/item-page/edit-item-page/item-curate/item-curate.component.spec.ts @@ -8,7 +8,7 @@ import { ActivatedRoute } from '@angular/router'; import { DSONameService } from '../../../core/breadcrumbs/dso-name.service'; import { Item } from '../../../core/shared/item.model'; -fdescribe('ItemCurateComponent', () => { +describe('ItemCurateComponent', () => { let comp: ItemCurateComponent; let fixture: ComponentFixture; let debugEl: DebugElement; From 09f3dddde4c761ac24d1c2b3d8b6fbaa594e8afd Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 27 Apr 2023 10:52:51 +0200 Subject: [PATCH 553/833] 101393: Fix breadcrumbs on BrowseByTaxonomyPage --- src/app/browse-by/browse-by-routing.module.ts | 5 +++-- src/assets/i18n/en.json5 | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index 0bf61957ef..9e078dd4eb 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -5,6 +5,7 @@ import { BrowseByDSOBreadcrumbResolver } from './browse-by-dso-breadcrumb.resolv import { BrowseByI18nBreadcrumbResolver } from './browse-by-i18n-breadcrumb.resolver'; import { ThemedBrowseBySwitcherComponent } from './browse-by-switcher/themed-browse-by-switcher.component'; import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse-by-taxonomy-page.component'; +import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; @NgModule({ imports: [ @@ -17,8 +18,8 @@ import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page/browse- path: 'srsc', component: BrowseByTaxonomyPageComponent, canActivate: [BrowseByGuard], - resolve: { breadcrumb: BrowseByI18nBreadcrumbResolver }, - data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata' } + resolve: { breadcrumb: I18nBreadcrumbResolver }, + data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata.srsc' } }, { path: ':id', diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 5a0f5ce5d0..cf60499344 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -721,6 +721,8 @@ "browse.metadata.subject.breadcrumbs": "Browse by Subject", + "browse.metadata.srsc.breadcrumbs": "Browse by Subject Category", + "browse.metadata.title.breadcrumbs": "Browse by Title", "pagination.next.button": "Next", From da7c980ab1452ad5d7b0503d5389ef4adf748d37 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 27 Apr 2023 11:04:41 +0200 Subject: [PATCH 554/833] 101393: Add 'Browse by Subject Category' link to 'All of DSpace' --- src/app/menu.resolver.ts | 14 ++++++++++++++ src/assets/i18n/en.json5 | 2 ++ 2 files changed, 16 insertions(+) diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index 8630150c58..f771ef8b27 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -137,6 +137,20 @@ export class MenuResolver implements Resolve { } as TextMenuItemModel, } ); + menuList.push( + { + id: 'browse_global_by_srsc', + parentID: 'browse_global', + active: false, + visible: true, + index: 99, + model: { + type: MenuItemType.LINK, + text: `menu.section.browse_global_by_srsc`, + link: `/browse/srsc` + } as LinkMenuItemModel + } + ); } menuList.forEach((menuSection) => this.menuService.addSection(MenuID.PUBLIC, Object.assign(menuSection, { shouldPersistOnRouteChange: true diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index cf60499344..0958fc5d29 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -2649,6 +2649,8 @@ "menu.section.browse_global_by_subject": "By Subject", + "menu.section.browse_global_by_srsc": "By Subject Category", + "menu.section.browse_global_by_title": "By Title", "menu.section.browse_global_communities_and_collections": "Communities & Collections", From a5c300aebdceb3d64ff37b65ae7a1a86b852bd29 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Thu, 27 Apr 2023 14:10:43 +0200 Subject: [PATCH 555/833] refactor mulitselect mode to use labels instead of buttons --- .../vocabulary-treeview.component.html | 63 ++++++++++++------- .../vocabulary-treeview.component.scss | 4 ++ 2 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index 82d8077dbc..a2a0b28a5c 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -25,20 +25,28 @@ - @@ -51,21 +59,28 @@ aria-hidden="true"> - + + {{node.item.display}} + + diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss index 39050ff85b..3f0cea10d2 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.scss @@ -5,3 +5,7 @@ cdk-tree .btn:focus { box-shadow: none !important; } + +label { + cursor: pointer; +} From 2a84c425314aec536b4f37b8b7b0d18193600900 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Thu, 27 Apr 2023 14:19:14 +0200 Subject: [PATCH 556/833] 101393: Fix VocabularyTreeview tests + Remove template comments --- .../vocabulary-treeview/vocabulary-treeview.component.html | 2 -- .../vocabulary-treeview.component.spec.ts | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html index a2a0b28a5c..9f14795342 100644 --- a/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html +++ b/src/app/shared/form/vocabulary-treeview/vocabulary-treeview.component.html @@ -31,7 +31,6 @@ [openDelay]="500" container="body" > - - { })); afterEach(() => { - fixture.destroy(); + fixture?.destroy(); comp = null; compAsAny = null; }); @@ -264,14 +264,14 @@ describe('VocabularyTreeviewComponent test suite', () => { it('should not display checkboxes by default', async () => { fixture.detectChanges(); - expect(de.query(By.css('.form-check-input'))).toBeNull(); + expect(de.query(By.css('input[type=checkbox]'))).toBeNull(); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); it('should display checkboxes if multiSelect is true', async () => { comp.multiSelect = true; fixture.detectChanges(); - expect(de.queryAll(By.css('.form-check-input')).length).toEqual(3); + expect(de.queryAll(By.css('input[type=checkbox]')).length).toEqual(3); expect(de.queryAll(By.css('cdk-tree-node')).length).toEqual(3); }); }); From 8ec5d11fcca5743eff1254b7b281fb3ebbf8dea8 Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Thu, 27 Apr 2023 15:58:37 +0200 Subject: [PATCH 557/833] [DURACOM-133] Do not show edit/delete button for observer --- .../workspaceitem-actions.component.html | 6 +- .../workspaceitem-actions.component.spec.ts | 96 ++++++++++++++++++- .../workspaceitem-actions.component.ts | 53 ++++++++-- 3 files changed, 143 insertions(+), 12 deletions(-) diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html index f789f4df47..6c3dd79d7c 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.html @@ -7,7 +7,8 @@ {{"submission.workspace.generic.view" | translate}} - @@ -15,6 +16,7 @@
    - \ No newline at end of file + diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts index 14d3c07650..f786782c05 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.spec.ts @@ -1,3 +1,4 @@ +import { EPerson } from './../../../core/eperson/models/eperson.model'; import { ChangeDetectionStrategy, Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Router } from '@angular/router'; @@ -24,12 +25,16 @@ import { RequestService } from '../../../core/data/request.service'; import { getMockRequestService } from '../../mocks/request.service.mock'; import { getMockSearchService } from '../../mocks/search-service.mock'; import { SearchService } from '../../../core/shared/search/search.service'; +import { AuthService } from '../../../core/auth/auth.service'; +import { AuthorizationDataService } from '../../../core/data/feature-authorization/authorization-data.service'; let component: WorkspaceitemActionsComponent; let fixture: ComponentFixture; let mockObject: WorkspaceItem; let notificationsServiceStub: NotificationsServiceStub; +let authorizationService; +let authService; const mockDataService = jasmine.createSpyObj('WorkspaceitemDataService', { delete: jasmine.createSpy('delete') @@ -71,10 +76,88 @@ const item = Object.assign(new Item(), { const rd = createSuccessfulRemoteDataObject(item); mockObject = Object.assign(new WorkspaceItem(), { item: observableOf(rd), id: '1234', uuid: '1234' }); -describe('WorkspaceitemActionsComponent', () => { - beforeEach(waitForAsync(() => { +const ePersonMock: EPerson = Object.assign(new EPerson(), { + handle: null, + netid: null, + lastActive: '2023-04-27T12:15:57.054+00:00', + canLogIn: true, + email: 'dspacedemo+submit@gmail.com', + requireCertificate: false, + selfRegistered: false, + _name: 'dspacedemo+submit@gmail.com', + id: '914955b1-cf2e-4884-8af7-a166aa24cf73', + uuid: '914955b1-cf2e-4884-8af7-a166aa24cf73', + type: 'eperson', + metadata: { + 'dspace.agreements.cookies': [ + { + uuid: '0a53a0f2-e168-4ed9-b4af-cba9a2d267ca', + language: null, + value: + '{"authentication":true,"preferences":true,"acknowledgement":true,"google-analytics":true}', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'dspace.agreements.end-user': [ + { + uuid: '0879e571-6e4a-4efe-af9b-704c755166be', + language: null, + value: 'true', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'eperson.firstname': [ + { + uuid: '18052a3e-f19b-49ca-b9f9-ee4cf9c71b86', + language: null, + value: 'Demo', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'eperson.language': [ + { + uuid: '98c2abdb-6a6f-4b41-b455-896bcf333ca3', + language: null, + value: 'en', + place: 0, + authority: null, + confidence: -1, + }, + ], + 'eperson.lastname': [ + { + uuid: 'df722e70-9497-468d-a92a-4038e7ef2586', + language: null, + value: 'Submitter', + place: 0, + authority: null, + confidence: -1, + }, + ], + }, + _links: { + groups: { + href: 'http://localhost:8080/server/api/eperson/epersons/914955b1-cf2e-4884-8af7-a166aa24cf73/groups', + }, + self: { + href: 'http://localhost:8080/server/api/eperson/epersons/914955b1-cf2e-4884-8af7-a166aa24cf73', + }, + }, +}); - TestBed.configureTestingModule({ +authService = jasmine.createSpyObj('authService', { + getAuthenticatedUserFromStore: jasmine.createSpy('getAuthenticatedUserFromStore') +}); + +describe('WorkspaceitemActionsComponent', () => { + beforeEach(waitForAsync(async () => { + await TestBed.configureTestingModule({ imports: [ NgbModule, TranslateModule.forRoot({ @@ -92,6 +175,8 @@ describe('WorkspaceitemActionsComponent', () => { { provide: WorkspaceitemDataService, useValue: mockDataService }, { provide: SearchService, useValue: searchService }, { provide: RequestService, useValue: requestServce }, + { provide: AuthService, useValue: authService }, + { provide: AuthorizationDataService, useValue: authorizationService}, NgbModal ], schemas: [NO_ERRORS_SCHEMA] @@ -105,6 +190,10 @@ describe('WorkspaceitemActionsComponent', () => { component = fixture.componentInstance; component.object = mockObject; notificationsServiceStub = TestBed.inject(NotificationsService as any); + authorizationService = jasmine.createSpyObj('authorizationService', { + isAuthorized: observableOf(true) + }); + (authService.getAuthenticatedUserFromStore as jasmine.Spy).and.returnValue(observableOf(ePersonMock)); fixture.detectChanges(); }); @@ -150,7 +239,6 @@ describe('WorkspaceitemActionsComponent', () => { confirmBtn.click(); fixture.detectChanges(); - fixture.whenStable().then(() => { done(); }); diff --git a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts index a6d30728ac..d758ef1bb5 100644 --- a/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts +++ b/src/app/shared/mydspace-actions/workspaceitem/workspaceitem-actions.component.ts @@ -1,7 +1,12 @@ -import { Component, Injector, Input } from '@angular/core'; +import { EPerson } from './../../../core/eperson/models/eperson.model'; +import { AuthorizationDataService } from 'src/app/core/data/feature-authorization/authorization-data.service'; +import { AuthService } from './../../../core/auth/auth.service'; +import { Item } from 'src/app/core/shared/item.model'; +import { FeatureID } from './../../../core/data/feature-authorization/feature-id'; +import { Component, Injector, Input, OnInit } from '@angular/core'; import { Router } from '@angular/router'; -import { BehaviorSubject } from 'rxjs'; +import { BehaviorSubject, Observable, switchMap } from 'rxjs'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TranslateService } from '@ngx-translate/core'; @@ -11,7 +16,7 @@ import { WorkspaceitemDataService } from '../../../core/submission/workspaceitem import { NotificationsService } from '../../notifications/notifications.service'; import { RequestService } from '../../../core/data/request.service'; import { SearchService } from '../../../core/shared/search/search.service'; -import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; +import { getFirstCompletedRemoteData, getRemoteDataPayload } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { NoContent } from '../../../core/shared/NoContent.model'; import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/workspaceitems-edit-page-routing-paths'; @@ -24,7 +29,7 @@ import { getWorkspaceItemViewRoute } from '../../../workspaceitems-edit-page/wor styleUrls: ['./workspaceitem-actions.component.scss'], templateUrl: './workspaceitem-actions.component.html', }) -export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent { +export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent implements OnInit { /** * The workspaceitem object @@ -37,6 +42,20 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent(false); + /** + * A boolean representing if the user is an admin + * @type {Observable} + */ + isAdmin$: Observable; + + /** + * A boolean representing if the user can edit the item + * and therefore can delete it as well + * (since the user can discard the item also from the edit page) + * @type {Observable} + */ + canEditItem$: Observable; + /** * Initialize instance variables * @@ -54,8 +73,12 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent this.authorizationService.isAuthorized(FeatureID.AdministratorOf, user.uuid))); + + this.canEditItem$ = activeEPerson$.pipe( + switchMap((eperson) => { + return this.object?.item.pipe( + getFirstCompletedRemoteData(), + getRemoteDataPayload(), + switchMap((item: Item) => { + return this.authorizationService.isAuthorized(FeatureID.CanEditItem, item?._links?.self.href, eperson.uuid); + }) + ) as Observable; + })); + } + /** * Init the target object * @@ -92,5 +134,4 @@ export class WorkspaceitemActionsComponent extends MyDSpaceActionsComponent Date: Thu, 27 Apr 2023 16:51:41 +0200 Subject: [PATCH 558/833] Work for signposting --- server.ts | 9 +++ .../metadata-item.service.spec.ts | 16 +++++ .../metadata-item/metadata-item.service.ts | 70 +++++++++++++++++++ src/app/core/metadata/metadata.service.ts | 11 ++- src/app/init.service.ts | 3 + src/modules/app/browser-init.service.ts | 3 + src/modules/app/server-init.service.ts | 5 +- 7 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 src/app/core/metadata-item/metadata-item.service.spec.ts create mode 100644 src/app/core/metadata-item/metadata-item.service.ts diff --git a/server.ts b/server.ts index 3e10677a8b..5a3660e4de 100644 --- a/server.ts +++ b/server.ts @@ -180,6 +180,15 @@ export function app() { changeOrigin: true })); + /** + * Proxy the linksets + */ + router.use('/linksets**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}/linksets`, + pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), + changeOrigin: true + })); + /** * Checks if the rateLimiter property is present * When it is present, the rateLimiter will be enabled. When it is undefined, the rateLimiter will be disabled. diff --git a/src/app/core/metadata-item/metadata-item.service.spec.ts b/src/app/core/metadata-item/metadata-item.service.spec.ts new file mode 100644 index 0000000000..89ca15658d --- /dev/null +++ b/src/app/core/metadata-item/metadata-item.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { MetadataItemService } from './metadata-item.service'; + +describe('MetadataItemService', () => { + let service: MetadataItemService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(MetadataItemService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/core/metadata-item/metadata-item.service.ts b/src/app/core/metadata-item/metadata-item.service.ts new file mode 100644 index 0000000000..a4fbcf587b --- /dev/null +++ b/src/app/core/metadata-item/metadata-item.service.ts @@ -0,0 +1,70 @@ +import { Inject, Injectable } from '@angular/core'; +import { MetadataService } from '../metadata/metadata.service'; +import { ActivatedRoute, NavigationEnd, Event as NavigationEvent, NavigationStart, Router } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; +import { Meta, Title } from '@angular/platform-browser'; +import { DSONameService } from '../breadcrumbs/dso-name.service'; +import { BundleDataService } from '../data/bundle-data.service'; +import { BitstreamDataService } from '../data/bitstream-data.service'; +import { BitstreamFormatDataService } from '../data/bitstream-format-data.service'; +import { RootDataService } from '../data/root-data.service'; +import { CoreState } from '../core-state.model'; +import { Store } from '@ngrx/store'; +import { HardRedirectService } from '../services/hard-redirect.service'; +import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; +import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; +import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators'; +import { DOCUMENT } from '@angular/common'; + +@Injectable({ + providedIn: 'root' +}) +export class MetadataItemService extends MetadataService { + + constructor( + private router1: ActivatedRoute, + router: Router, + translate: TranslateService, + meta: Meta, + title: Title, + dsoNameService: DSONameService, + bundleDataService: BundleDataService, + bitstreamDataService: BitstreamDataService, + bitstreamFormatDataService: BitstreamFormatDataService, + rootService: RootDataService, + store: Store, + hardRedirectService: HardRedirectService, + @Inject(APP_CONFIG) appConfig: AppConfig, + authorizationService: AuthorizationDataService, + @Inject(DOCUMENT) private document: Document + ) { + super(router, translate, meta, title, dsoNameService, bundleDataService, bitstreamDataService, bitstreamFormatDataService, rootService, store, hardRedirectService, appConfig, authorizationService); + } + + public checkCurrentRoute(){ + + console.log(this.router); + + this.router1.url.subscribe(url => { + console.log(url); + console.log(url[0].path); + }); + + // this.router.events.subscribe((event: NavigationEvent) => { + // if(event instanceof NavigationStart) { + // if(event.url.startsWith('/entities')){ + // console.log('We are on ENTITIES!'); + // } + // } + // }); + } + + setLinkTag(){ + this.clearMetaTags(); + + let link: HTMLLinkElement = this.document.createElement('link'); + link.setAttribute('rel', ''); + link.setAttribute('href', ''); + this.document.head.appendChild(link); + } +} diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index 204c925e6b..c46f8b1d6e 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -84,7 +84,7 @@ export class MetadataService { ]; constructor( - private router: Router, + protected router: Router, private translate: TranslateService, private meta: Meta, private title: Title, @@ -363,6 +363,15 @@ export class MetadataService { } } + /** + * Add to the + */ + // private setLinkTag(): void { + // const value = this.getMetaTagValue('dc.link'); + // this.meta.addTag({ name: 'Link', content: value }); + // this.addMetaTag('Link', value); + // } + getBitLinkIfDownloadable(bitstream: Bitstream, bitstreamRd: RemoteData>): Observable { return observableOf(bitstream).pipe( getDownloadableBitstream(this.authorizationService), diff --git a/src/app/init.service.ts b/src/app/init.service.ts index 9fef2ca4ed..d5978d782d 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -24,6 +24,7 @@ import { isAuthenticationBlocking } from './core/auth/selectors'; import { distinctUntilChanged, find } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { MenuService } from './shared/menu/menu.service'; +import { MetadataItemService } from './core/metadata-item/metadata-item.service'; /** * Performs the initialization of the app. @@ -50,6 +51,7 @@ export abstract class InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, + protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, protected menuService: MenuService, @@ -188,6 +190,7 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); this.menuService.listenForRouteChanges(); + this.metadataItem.checkCurrentRoute(); } /** diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index 61d57f10f9..f38883be1e 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -32,6 +32,7 @@ import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; import { RootDataService } from '../../app/core/data/root-data.service'; import { firstValueFrom, Subscription } from 'rxjs'; +import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs client-side initialization. @@ -51,6 +52,7 @@ export class BrowserInitService extends InitService { protected angulartics2DSpace: Angulartics2DSpace, protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, + protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected klaroService: KlaroService, protected authService: AuthService, @@ -66,6 +68,7 @@ export class BrowserInitService extends InitService { localeService, angulartics2DSpace, metadata, + metadataItem, breadcrumbsService, themeService, menuService, diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index d909bb0e8d..074efc31e7 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -21,6 +21,7 @@ import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { take } from 'rxjs/operators'; import { MenuService } from '../../app/shared/menu/menu.service'; +import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs server-side initialization. @@ -36,9 +37,10 @@ export class ServerInitService extends InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, + protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, - protected menuService: MenuService, + protected menuService: MenuService ) { super( store, @@ -48,6 +50,7 @@ export class ServerInitService extends InitService { localeService, angulartics2DSpace, metadata, + metadataItem, breadcrumbsService, themeService, menuService, From 2a9021477805de7edf478456c78301d90e82f12b Mon Sep 17 00:00:00 2001 From: Yana De Pauw Date: Fri, 28 Apr 2023 14:19:44 +0200 Subject: [PATCH 559/833] Add typedocs --- src/app/core/data/base/base-data.service.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/app/core/data/base/base-data.service.ts b/src/app/core/data/base/base-data.service.ts index 544c01a69b..edd6d9e2a4 100644 --- a/src/app/core/data/base/base-data.service.ts +++ b/src/app/core/data/base/base-data.service.ts @@ -341,6 +341,11 @@ export class BaseDataService implements HALDataServic } } + /** + * Checks for the provided href whether a response is already cached + * @param href$ The url for which to check whether there is a cached response. + * Can be a string or an Observable + */ hasCachedResponse(href$: string | Observable): Observable { if (isNotEmpty(href$)) { if (typeof href$ === 'string') { @@ -359,6 +364,11 @@ export class BaseDataService implements HALDataServic throw new Error(`Can't check whether there is a cached response for an empty href$`); } + /** + * Checks for the provided href whether an ERROR response is currently cached + * @param href$ The url for which to check whether there is a cached ERROR response. + * Can be a string or an Observable + */ hasCachedErrorResponse(href$: string | Observable): Observable { return this.hasCachedResponse(href$).pipe( switchMap((hasCachedResponse) => { From 3d9100f2d10898caed61926d74434decdd24e969 Mon Sep 17 00:00:00 2001 From: Sondissimo Date: Fri, 28 Apr 2023 16:35:30 +0200 Subject: [PATCH 560/833] DURACOM-138 Added a single line in the process-parameters.component.html, we now check if the parameters selector for the process contains at least 1 value, if not, the selector box is not shown. --- .../form/process-parameters/process-parameters.component.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/process-page/form/process-parameters/process-parameters.component.html b/src/app/process-page/form/process-parameters/process-parameters.component.html index d7bbce6779..32fbba1b0b 100644 --- a/src/app/process-page/form/process-parameters/process-parameters.component.html +++ b/src/app/process-page/form/process-parameters/process-parameters.component.html @@ -1,3 +1,4 @@ +
    +
    From 3647292b8fa056503a31ea72e8b65b6fac5f9f6e Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Fri, 28 Apr 2023 16:47:07 +0200 Subject: [PATCH 561/833] [CST-9636] Added unit tests and the logic to create file object from payload --- .../collection-access-control.component.html | 91 +++++++++++++- .../collection-access-control.component.ts | 69 +++++++---- .../collection-access-control.service.ts | 54 +++++++++ .../edit-collection-page.module.ts | 6 + .../community-access-control.component.html | 93 ++++++++++++++- .../community-access-control.component.ts | 47 +++++++- .../community-access-control.service.ts | 54 +++++++++ .../edit-community-page.module.ts | 6 + .../edit-item-page/edit-item-page.module.ts | 6 + .../item-access-control.component.html | 111 +++++++++++++++++- .../item-access-control.component.ts | 55 ++++++++- .../item-access-control.service.ts | 71 +++++++++++ .../access-control-array-form.component.html | 68 +++++++++++ .../access-control-array-form.component.scss | 0 ...ccess-control-array-form.component.spec.ts | 101 ++++++++++++++++ .../access-control-array-form.component.ts | 88 ++++++++++++++ .../control-max-end-date.pipe.ts | 26 ++++ .../control-max-start-date.pipe.ts | 26 ++++ 18 files changed, 938 insertions(+), 34 deletions(-) create mode 100644 src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts create mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts create mode 100644 src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.html create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.scss create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts create mode 100644 src/app/shared/access-control-array-form/access-control-array-form.component.ts create mode 100644 src/app/shared/access-control-array-form/control-max-end-date.pipe.ts create mode 100644 src/app/shared/access-control-array-form/control-max-start-date.pipe.ts diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html index 0719a18d94..52eda57f2c 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html @@ -1,3 +1,92 @@
    - Access control page!!! +
    +
    +

    + This form allows you to perform changes to the access condition of all the items owned by collection under this community. + Changes can be performed on the access condition for the metadata (item) or for the content (bitstream). +

    + +
    +
    +
    +

    Item's Metadata

    + +
    + +
    +
    Mode
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Access conditions
    + +
    + You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
    +
    + + + + +
    +
    +
    +

    Bitstreams

    + +
    + +
    +
    Mode
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Access conditions
    + +
    + You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
    +
    + + + + +
    +
    + +
    + +
    + + +
    +
    +
    diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts index 8675e3a83f..0791e29233 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts @@ -1,37 +1,56 @@ -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs'; -import { RemoteData } from '../../../core/data/remote-data'; -import { ActivatedRoute } from '@angular/router'; -import { first, map } from 'rxjs/operators'; -import { DSpaceObject } from '../../../core/shared/dspace-object.model'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { shareReplay } from 'rxjs'; +import { + AccessControlArrayFormComponent +} from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { CollectionAccessControlService } from './collection-access-control.service'; @Component({ selector: 'ds-collection-access-control', templateUrl: './collection-access-control.component.html', - styleUrls: ['./collection-access-control.component.scss'] + styleUrls: ['./collection-access-control.component.scss'], + providers: [CollectionAccessControlService] }) -export class CollectionAccessControlComponent implements OnInit { +export class CollectionAccessControlComponent implements OnInit { - /** - * The initial DSO object - */ - public dsoRD$: Observable>; + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor(private collectionAccessControlService: CollectionAccessControlService) {} + + state = initialState; + + dropdownData$ = this.collectionAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); + + ngOnInit(): void { - /** - * Initialize instance variables - * - * @param {ActivatedRoute} route - */ - constructor( - private route: ActivatedRoute - ) { } - /** - * Initialize the component, setting up the collection - */ - ngOnInit(): void { - this.dsoRD$ = this.route.parent.parent.data.pipe(first(), map((data) => data.dso)); + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + console.log('bitstreamAccess', bitstreamAccess); + console.log('itemAccess', itemAccess); } } + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + }, +}; diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts new file mode 100644 index 0000000000..9cc7b8d85a --- /dev/null +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@angular/core'; +import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Observable, of } from 'rxjs'; + +export interface AccessControlDropdownDataResponse { + id: string; + itemAccessConditionOptions: AccessControlItem[]; + bitstreamAccessConditionOptions: AccessControlItem[]; +} + +@Injectable() +export class CollectionAccessControlService { + dropdownData$: Observable = of(accessControlDropdownData); +} + +const accessControlDropdownData: AccessControlDropdownDataResponse = { + 'id': 'default', + 'itemAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ], + 'bitstreamAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ] +}; diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 3817122368..5af7d3189a 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -14,6 +14,10 @@ import { ResourcePoliciesModule } from '../../shared/resource-policies/resource- import { FormModule } from '../../shared/form/form.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; +import { + AccessControlArrayFormModule +} from '../../shared/access-control-array-form/access-control-array-form.component'; +import { UiSwitchModule } from 'ngx-ui-switch'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -27,6 +31,8 @@ import { CollectionAccessControlComponent } from './collection-access-control/co ResourcePoliciesModule, FormModule, ComcolModule, + AccessControlArrayFormModule, + UiSwitchModule, ], declarations: [ EditCollectionPageComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html index cec7f44321..52eda57f2c 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -1 +1,92 @@ -

    community-access-control works!

    +
    +
    +
    +

    + This form allows you to perform changes to the access condition of all the items owned by collection under this community. + Changes can be performed on the access condition for the metadata (item) or for the content (bitstream). +

    + +
    +
    +
    +

    Item's Metadata

    + +
    + +
    +
    Mode
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Access conditions
    + +
    + You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
    +
    + + + + +
    +
    +
    +

    Bitstreams

    + +
    + +
    +
    Mode
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Access conditions
    + +
    + You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
    +
    + + + + +
    +
    + +
    + +
    + + +
    +
    +
    +
    diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts index 543d63564e..202c04b7b5 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -1,15 +1,56 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { CommunityAccessControlService } from './community-access-control.service'; +import { shareReplay } from 'rxjs'; +import { + AccessControlArrayFormComponent +} from '../../../shared/access-control-array-form/access-control-array-form.component'; @Component({ selector: 'ds-community-access-control', templateUrl: './community-access-control.component.html', - styleUrls: ['./community-access-control.component.scss'] + styleUrls: ['./community-access-control.component.scss'], + providers: [CommunityAccessControlService] }) export class CommunityAccessControlComponent implements OnInit { - constructor() { } + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor(private communityAccessControlService: CommunityAccessControlService) {} + + state = initialState; + + dropdownData$ = this.communityAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); ngOnInit(): void { + + } + + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + console.log('bitstreamAccess', bitstreamAccess); + console.log('itemAccess', itemAccess); } } + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + }, +}; diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts new file mode 100644 index 0000000000..d78d42ba90 --- /dev/null +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@angular/core'; +import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Observable, of } from 'rxjs'; + +export interface AccessControlDropdownDataResponse { + id: string; + itemAccessConditionOptions: AccessControlItem[]; + bitstreamAccessConditionOptions: AccessControlItem[]; +} + +@Injectable() +export class CommunityAccessControlService { + dropdownData$: Observable = of(accessControlDropdownData); +} + +const accessControlDropdownData: AccessControlDropdownDataResponse = { + 'id': 'default', + 'itemAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ], + 'bitstreamAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ] +}; diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index a9f020a9e6..8aa52086ee 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -11,6 +11,10 @@ import { CommunityFormModule } from '../community-form/community-form.module'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CommunityAccessControlComponent } from './community-access-control/community-access-control.component'; +import { UiSwitchModule } from 'ngx-ui-switch'; +import { + AccessControlArrayFormModule +} from '../../shared/access-control-array-form/access-control-array-form.component'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -23,6 +27,8 @@ import { CommunityAccessControlComponent } from './community-access-control/comm CommunityFormModule, ComcolModule, ResourcePoliciesModule, + UiSwitchModule, + AccessControlArrayFormModule, ], declarations: [ EditCommunityPageComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index d922cee0a5..65862b3de8 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -39,6 +39,10 @@ import { IdentifierDataComponent } from '../../shared/object-list/identifier-dat import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; +import { + AccessControlArrayFormModule +} from '../../shared/access-control-array-form/access-control-array-form.component'; +import { UiSwitchModule } from 'ngx-ui-switch'; /** @@ -56,6 +60,8 @@ import { ItemAccessControlComponent } from './item-access-control/item-access-co NgbModule, ItemVersionsModule, DsoSharedModule, + AccessControlArrayFormModule, + UiSwitchModule, ], declarations: [ EditItemPageComponent, diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html index 416b785722..f5a02b0452 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -1 +1,110 @@ -

    item-access-control works!

    +
    +
    +
    +

    + This form allows you to perform changes to the access condition of all the items owned by collection under this community. + Changes can be performed on the access condition for the metadata (item) or for the content (bitstream). +

    + +
    +
    +
    +

    Item's Metadata

    + +
    + +
    +
    Mode
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Access conditions
    + +
    + You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
    +
    + + + + +
    +
    +
    +

    Bitstreams

    + +
    + +
    +
    Limit the changes to specific bitstreams
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Mode
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    Access conditions
    + +
    + You have not specified any access conditions, the new items access conditions will be inherited from the owning collection. +
    +
    + + + + +
    +
    + +
    + +
    + + +
    +
    +
    +
    diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts index 5b42e5bf4e..6882dfb2a1 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -1,15 +1,64 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { + AccessControlArrayFormComponent +} from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { + CollectionAccessControlService +} from '../../../collection-page/edit-collection-page/collection-access-control/collection-access-control.service'; +import { shareReplay } from 'rxjs'; +import { ItemAccessControlService } from './item-access-control.service'; @Component({ selector: 'ds-item-access-control', templateUrl: './item-access-control.component.html', - styleUrls: ['./item-access-control.component.scss'] + styleUrls: ['./item-access-control.component.scss'], + providers: [ItemAccessControlService] }) export class ItemAccessControlComponent implements OnInit { - constructor() { } + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor(private itemAccessControlService: ItemAccessControlService) {} + + state = initialState; + + dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); ngOnInit(): void { + + } + + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + this.itemAccessControlService.execute({ + bitstreamAccess, + itemAccess, + state: this.state + }); } } + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + changesLimit: '', // 'all' | 'selected' + selectedBitstreams: [] + }, +}; diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts new file mode 100644 index 0000000000..3eeacfe1ce --- /dev/null +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts @@ -0,0 +1,71 @@ +import { Injectable } from '@angular/core'; +import { AccessControlItem } from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Observable, of } from 'rxjs'; + +export interface AccessControlDropdownDataResponse { + id: string; + itemAccessConditionOptions: AccessControlItem[]; + bitstreamAccessConditionOptions: AccessControlItem[]; +} + +@Injectable() +export class ItemAccessControlService { + dropdownData$: Observable = of(accessControlDropdownData); + + + execute(payload: any) { + console.log('execute', payload); + + const blob = new Blob([JSON.stringify(payload, null, 2)], { + type: 'application/json', + }); + + const file = new File([blob], 'data.json', { + type: 'application/json', + }); + + const url = URL.createObjectURL(file); + window.open(url, '_blank'); + + } +} + +const accessControlDropdownData: AccessControlDropdownDataResponse = { + 'id': 'default', + 'itemAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ], + 'bitstreamAccessConditionOptions': [ + { + 'name': 'openaccess' + }, + { + 'name': 'administrator' + }, + { + 'name': 'embargo', + 'hasStartDate': true, + 'maxStartDate': '2018-06-24T00:40:54.970+0000' + }, + { + 'name': 'lease', + 'hasEndDate': true, + 'maxEndDate': '2017-12-24T00:40:54.970+0000' + } + ] +}; diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-array-form/access-control-array-form.component.html new file mode 100644 index 0000000000..dc8caf403c --- /dev/null +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.html @@ -0,0 +1,68 @@ +
    + +
    + +
    + +
    + +
    +
    + +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + + + +
    diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.scss b/src/app/shared/access-control-array-form/access-control-array-form.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts new file mode 100644 index 0000000000..7c3ed06be1 --- /dev/null +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts @@ -0,0 +1,101 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccessControlArrayFormComponent, AccessControlItemValue } from './access-control-array-form.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; +import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; +import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; +import { DebugElement } from '@angular/core'; +import { By } from '@angular/platform-browser'; + +fdescribe('AccessControlArrayFormComponent', () => { + let component: AccessControlArrayFormComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], + declarations: [ AccessControlArrayFormComponent, ControlMaxStartDatePipe, ControlMaxEndDatePipe ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccessControlArrayFormComponent); + component = fixture.componentInstance; + component.dropdownOptions = [{name: 'Option1'}, {name: 'Option2'}]; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should have only one empty control access item in the form', () => { + const accessControlItems = fixture.debugElement.queryAll(By.css('[data-testId="access-control-item"]')); + expect(accessControlItems.length).toEqual(1); + }); + + it('should add access control item', () => { + component.addAccessControlItem(); + expect(component.accessControl.length).toEqual(2); + }); + + it('should remove access control item', () => { + component.removeAccessControlItem(0); + expect(component.accessControl.length).toEqual(0); + + component.addAccessControlItem(); + component.removeAccessControlItem(0); + expect(component.accessControl.length).toEqual(0); + }); + + it('should set access control item value', () => { + const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + component.addAccessControlItem(item.itemName); + component.accessControl.controls[0].patchValue(item); + expect(component.form.value.accessControl[0]).toEqual(item); + }); + + it('should reset form value', () => { + const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + component.addAccessControlItem(item.itemName); + component.accessControl.controls[1].patchValue(item); + component.reset(); + expect(component.form.value.accessControl[1].value).toEqual(undefined); + }); + + + it('should display a select dropdown with options', () => { + const selectElement: DebugElement = fixture.debugElement.query(By.css('select#accesscontroloption')); + expect(selectElement).toBeTruthy(); + + const options = selectElement.nativeElement.querySelectorAll('option'); + expect(options.length).toEqual(3); // 2 options + default empty option + + expect(options[0].value).toEqual(''); + expect(options[1].value).toEqual('Option1'); + expect(options[2].value).toEqual('Option2'); + }); + + it('should add new access control items when clicking "Add more" button', () => { + const addButton: DebugElement = fixture.debugElement.query(By.css('button#add-btn')); + addButton.nativeElement.click(); + fixture.detectChanges(); + + const accessControlItems = fixture.debugElement.queryAll(By.css('[data-testId="access-control-item"]')); + expect(accessControlItems.length).toEqual(2); + }); + + it('should remove access control items when clicking remove button', () => { + const removeButton: DebugElement = fixture.debugElement.query(By.css('button.btn-outline-danger')); + removeButton.nativeElement.click(); + fixture.detectChanges(); + + const accessControlItems = fixture.debugElement.queryAll(By.css('[data-testId="access-control-item"]')); + expect(accessControlItems.length).toEqual(0); + }); +}); diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts new file mode 100644 index 0000000000..00ff52c695 --- /dev/null +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -0,0 +1,88 @@ +import { Component, Input, NgModule, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormArray, FormBuilder, ReactiveFormsModule } from '@angular/forms'; +import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; +import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; +import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; + +// type of the dropdown item that comes from backend +export interface AccessControlItem { + name: string + hasStartDate?: boolean + maxStartDate?: string + hasEndDate?: boolean + maxEndDate?: string +} + +// will be used on the form value +export interface AccessControlItemValue { + itemName: string | null; // item name + startDate?: string; + endDate?: string; +} + +export interface AccessControlArrayFormValue { + accessControl: AccessControlItemValue[]; +} + +@Component({ + selector: 'ds-access-control-array-form', + templateUrl: './access-control-array-form.component.html', + styleUrls: [ './access-control-array-form.component.scss' ] +}) +export class AccessControlArrayFormComponent implements OnInit { + @Input() dropdownOptions: AccessControlItem[] = []; + @Input() accessControlItems: AccessControlItemValue[] = []; + + form = this.fb.group({ + accessControl: this.fb.array([]) + }); + + constructor(private fb: FormBuilder) { + } + + ngOnInit(): void { + if (this.accessControlItems.length === 0) { + this.addAccessControlItem(); + } else { + for (const item of this.accessControlItems) { + this.addAccessControlItem(item.itemName); + } + } + } + + get accessControl() { + return this.form.get('accessControl') as FormArray; + } + + addAccessControlItem(itemName: string = null) { + this.accessControl.push(this.fb.group({ + itemName, + startDate: null, + endDate: null + })); + } + + removeAccessControlItem(index: number) { + this.accessControl.removeAt(index); + } + + getValue() { + return this.form.value; + } + + reset() { + this.accessControl.reset([]); + } + +} + +@NgModule({ + imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], + declarations: [ AccessControlArrayFormComponent, ControlMaxStartDatePipe, ControlMaxEndDatePipe ], + exports: [ AccessControlArrayFormComponent ], +}) +export class AccessControlArrayFormModule { +} diff --git a/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts new file mode 100644 index 0000000000..0ddff2a042 --- /dev/null +++ b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts @@ -0,0 +1,26 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; +import { AccessControlItem } from './access-control-array-form.component'; + +@Pipe({ + // eslint-disable-next-line @angular-eslint/pipe-prefix + name: 'maxEndDate', + pure: false +}) +export class ControlMaxEndDatePipe implements PipeTransform { + transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + const { itemName } = control.value; + const item = dropdownOptions.find((x) => x.name === itemName); + if (!item?.hasEndDate) { + return null; + } + const date = new Date(item.maxEndDate); + return { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate() + } as NgbDateStruct; + } + +} diff --git a/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts new file mode 100644 index 0000000000..01a9607a16 --- /dev/null +++ b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts @@ -0,0 +1,26 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { AbstractControl } from '@angular/forms'; +import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; +import { AccessControlItem } from './access-control-array-form.component'; + +@Pipe({ + // eslint-disable-next-line @angular-eslint/pipe-prefix + name: 'maxStartDate', + pure: false +}) +export class ControlMaxStartDatePipe implements PipeTransform { + transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + const { itemName } = control.value; + const item = dropdownOptions.find((x) => x.name === itemName); + if (!item?.hasStartDate) { + return null; + } + const date = new Date(item.maxStartDate); + return { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate() + } as NgbDateStruct; + } + +} From a94f729faa43a7291c7bea519c86e56d1744031b Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Fri, 28 Apr 2023 18:01:42 +0200 Subject: [PATCH 562/833] Lock webpack version to 5.76.1 This is a strict requirement of `@angular-devkit/build-angular` 15.2.5 Specifying the version as `@^5.0.0` causes multiple versions to be installed side by side, which leads to build issues. Adding this "exact version dependency" gets rid of the warning but does not change yarn.lock (because that same version was already being resolved) --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 2118237c77..59766e993b 100644 --- a/package.json +++ b/package.json @@ -199,6 +199,7 @@ "sass-resources-loader": "^2.2.5", "ts-node": "^8.10.2", "typescript": "~4.8.4", + "webpack": "5.76.1", "webpack-bundle-analyzer": "^4.8.0", "webpack-cli": "^4.2.0", "webpack-dev-server": "^4.13.3" From d98e44185c756d84ea990000f8f16a8c79804b47 Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Fri, 28 Apr 2023 18:01:59 +0200 Subject: [PATCH 563/833] Update JavaScript target version --- tsconfig.server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.server.json b/tsconfig.server.json index d2fb2c9d40..c2f4c06a23 100644 --- a/tsconfig.server.json +++ b/tsconfig.server.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.app.json", "compilerOptions": { "outDir": "./out-tsc/app-server", - "target": "es2016", + "target": "ES2022", "types": [ "node", "grecaptcha" From 2895cfe083a80eec58a5758bd5bd45af62e3bade Mon Sep 17 00:00:00 2001 From: Alisa Ismailati Date: Fri, 28 Apr 2023 18:03:52 +0200 Subject: [PATCH 564/833] [DURACOM-134] Administer workflow actions fixed --- ...m-admin-workflow-actions.component.spec.ts | 4 +- ...e-item-admin-workflow-actions.component.ts | 6 +- .../workflowitems-edit-page-routing-paths.ts | 7 +- ...ed-workspaceitems-delete-page.component.ts | 26 ++++ .../workspaceitems-delete-page.component.html | 24 ++++ .../workspaceitems-delete-page.component.scss | 4 + ...rkspaceitems-delete-page.component.spec.ts | 110 +++++++++++++++++ .../workspaceitems-delete-page.component.ts | 111 ++++++++++++++++++ ...workspaceitems-edit-page-routing.module.ts | 24 +++- .../workspaceitems-edit-page.module.ts | 7 +- src/assets/i18n/en.json5 | 16 ++- .../workspace-items-delete.component.html | 0 .../workspace-items-delete.component.scss | 0 .../workspace-items-delete.component.ts | 10 ++ src/themes/custom/lazy-theme.module.ts | 2 + 15 files changed, 342 insertions(+), 9 deletions(-) create mode 100644 src/app/workspaceitems-edit-page/workspaceitems-delete-page/themed-workspaceitems-delete-page.component.ts create mode 100644 src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.html create mode 100644 src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.scss create mode 100644 src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts create mode 100644 src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.ts create mode 100644 src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.html create mode 100644 src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.scss create mode 100644 src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.ts diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.spec.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.spec.ts index 628fc3f89c..a8f0581ec0 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.spec.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.spec.ts @@ -11,7 +11,7 @@ import { URLCombiner } from '../../../../../core/url-combiner/url-combiner'; import { WorkspaceItemAdminWorkflowActionsComponent } from './workspace-item-admin-workflow-actions.component'; import { WorkspaceItem } from '../../../../../core/submission/models/workspaceitem.model'; import { - getWorkflowItemDeleteRoute, + getWorkspaceItemDeleteRoute, } from '../../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; import { Item } from '../../../../../core/shared/item.model'; import { RemoteData } from '../../../../../core/data/remote-data'; @@ -83,7 +83,7 @@ describe('WorkspaceItemAdminWorkflowActionsComponent', () => { it('should render a delete button with the correct link', () => { const button = fixture.debugElement.query(By.css('a.delete-link')); const link = button.nativeElement.href; - expect(link).toContain(new URLCombiner(getWorkflowItemDeleteRoute(wsi.id)).toString()); + expect(link).toContain(new URLCombiner(getWorkspaceItemDeleteRoute(wsi.id)).toString()); }); it('should render a policies button with the correct link', () => { diff --git a/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.ts b/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.ts index adbd421628..36678460da 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-search-results/actions/workspace-item/workspace-item-admin-workflow-actions.component.ts @@ -11,7 +11,7 @@ import { SupervisionOrderGroupSelectorComponent } from './supervision-order-group-selector/supervision-order-group-selector.component'; import { - getWorkflowItemDeleteRoute + getWorkspaceItemDeleteRoute } from '../../../../../workflowitems-edit-page/workflowitems-edit-page-routing-paths'; import { ITEM_EDIT_AUTHORIZATIONS_PATH } from '../../../../../item-page/edit-item-page/edit-item-page.routing-paths'; import { WorkspaceItem } from '../../../../../core/submission/models/workspaceitem.model'; @@ -105,10 +105,10 @@ export class WorkspaceItemAdminWorkflowActionsComponent implements OnInit { } /** - * Returns the path to the delete page of this workflow item + * Returns the path to the delete page of this workspace item */ getDeleteRoute(): string { - return getWorkflowItemDeleteRoute(this.wsi.id); + return getWorkspaceItemDeleteRoute(this.wsi.id); } /** diff --git a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts index ece61f0321..326eebe4a7 100644 --- a/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts +++ b/src/app/workflowitems-edit-page/workflowitems-edit-page-routing-paths.ts @@ -1,5 +1,5 @@ import { URLCombiner } from '../core/url-combiner/url-combiner'; -import { getWorkflowItemModuleRoute } from '../app-routing-paths'; +import { getWorkflowItemModuleRoute, getWorkspaceItemModuleRoute } from '../app-routing-paths'; export function getWorkflowItemPageRoute(wfiId: string) { return new URLCombiner(getWorkflowItemModuleRoute(), wfiId).toString(); @@ -24,8 +24,13 @@ export function getAdvancedWorkflowRoute(wfiId: string) { return new URLCombiner(getWorkflowItemModuleRoute(), wfiId, ADVANCED_WORKFLOW_PATH).toString(); } +export function getWorkspaceItemDeleteRoute(wsiId: string) { + return new URLCombiner(getWorkspaceItemModuleRoute(), wsiId, WORKSPACE_ITEM_DELETE_PATH).toString(); +} + export const WORKFLOW_ITEM_EDIT_PATH = 'edit'; export const WORKFLOW_ITEM_DELETE_PATH = 'delete'; export const WORKFLOW_ITEM_VIEW_PATH = 'view'; export const WORKFLOW_ITEM_SEND_BACK_PATH = 'sendback'; export const ADVANCED_WORKFLOW_PATH = 'advanced'; +export const WORKSPACE_ITEM_DELETE_PATH = 'delete'; diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/themed-workspaceitems-delete-page.component.ts b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/themed-workspaceitems-delete-page.component.ts new file mode 100644 index 0000000000..681cba21c8 --- /dev/null +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/themed-workspaceitems-delete-page.component.ts @@ -0,0 +1,26 @@ +import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { Component } from '@angular/core'; +import { WorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page.component'; + +/** + * Themed wrapper for WorkspaceItemsDeletePageComponent + */ + +@Component({ + selector: 'ds-themed-workspace-items-delete', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html' +}) +export class ThemedWorkspaceItemsDeletePageComponent extends ThemedComponent { + protected getComponentName(): string { + return 'WorkspaceItemsDeletePageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/workflowitems-edit-page/workflow-item-delete/workflow-item-delete.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./workspaceitems-delete-page.component`); + } +} diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.html b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.html new file mode 100644 index 0000000000..a0f0a1711e --- /dev/null +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.html @@ -0,0 +1,24 @@ +
    +

    {{ 'workspace-item.delete.header' | translate }}

    + + + +
    + + + + + + diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.scss b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.scss new file mode 100644 index 0000000000..e52175abea --- /dev/null +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.scss @@ -0,0 +1,4 @@ + +:host ::ng-deep ds-modify-item-overview table { + display: inline-table !important; +} diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts new file mode 100644 index 0000000000..f52dd497d8 --- /dev/null +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.spec.ts @@ -0,0 +1,110 @@ +import { RouteService } from '../..//core/services/route.service'; +import { NotificationsService } from '../..//shared/notifications/notifications.service'; +import { WorkspaceitemDataService } from '../..//core/submission/workspaceitem-data.service'; +import { RouterMock } from './../../shared/mocks/router.mock'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page.component'; +import { ActivatedRoute, Router } from '@angular/router'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule, TranslateService } from '@ngx-translate/core'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; +import { EventEmitter, NO_ERRORS_SCHEMA } from '@angular/core'; +import { Location } from '@angular/common'; +import { of as observableOf } from 'rxjs'; +import { routeServiceStub } from '../../shared/testing/route-service.stub'; +import { LocationStub } from '../../shared/testing/location.stub'; +import { By } from '@angular/platform-browser'; +import { ActivatedRouteStub } from 'src/app/shared/testing/active-router.stub'; +import { createSuccessfulRemoteDataObject } from 'src/app/shared/remote-data.utils'; +import { WorkspaceItem } from 'src/app/core/submission/models/workspaceitem.model'; +import { DSpaceObject } from 'src/app/core/shared/dspace-object.model'; + +describe('WorkspaceitemsDeletePageComponent', () => { + let component: WorkspaceItemsDeletePageComponent; + let fixture: ComponentFixture; + + const workspaceitemDataServiceSpy = jasmine.createSpyObj('WorkspaceitemDataService', { + delete: jasmine.createSpy('delete') + }); + + const wsi = new WorkspaceItem(); + wsi.id = '1234'; + const dso = new DSpaceObject(); + dso.uuid = '1234'; + + const translateServiceStub = { + get: () => observableOf('test-message'), + onLangChange: new EventEmitter(), + onTranslationChange: new EventEmitter(), + onDefaultLangChange: new EventEmitter() + }; + + const modalService = { + open: () => {/** empty */}, + }; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TranslateModule.forRoot()], + declarations: [WorkspaceItemsDeletePageComponent], + providers: [ + { + provide: ActivatedRoute, + useValue: new ActivatedRouteStub( + {}, + { + wsi: createSuccessfulRemoteDataObject(wsi), + dso: createSuccessfulRemoteDataObject(dso), + } + ), + }, + { provide: Router, useValue: new RouterMock() }, + { + provide: WorkspaceitemDataService, + useValue: workspaceitemDataServiceSpy, + }, + { provide: Location, useValue: new LocationStub() }, + { provide: NgbModal, useValue: modalService }, + { + provide: NotificationsService, + useValue: new NotificationsServiceStub(), + }, + { provide: TranslateService, useValue: translateServiceStub }, + { provide: RouteService, useValue: routeServiceStub }, + ], + schemas: [NO_ERRORS_SCHEMA], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(WorkspaceItemsDeletePageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should have the current WorkspaceItem', () => { + console.log( (component as any).activatedRoute, 'data wsi'); + (component as any).activatedRoute.data.subscribe((data) => { + console.log(data, 'dataaa'); + expect(data.wsi.payload.id).toEqual('1234'); + }); + }); + + it('should delete the target workspace item', () => { + spyOn((component as any).modalService, 'open').and.returnValue({}); + component.confirmDelete(By.css('#delete-modal')); + fixture.detectChanges(); + expect((component as any).modalService.open).toHaveBeenCalled(); + }); + + it('should call workspaceItemService.delete', () => { + spyOn(workspaceitemDataServiceSpy, 'delete').and.returnValue(observableOf(createSuccessfulRemoteDataObject({}))); + component.sendDeleteRequest(); + expect((component as any).workspaceItemService.delete).toHaveBeenCalledWith('1234'); + }); +}); diff --git a/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.ts b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.ts new file mode 100644 index 0000000000..cff5fd6994 --- /dev/null +++ b/src/app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.ts @@ -0,0 +1,111 @@ +import { NotificationsService } from 'src/app/shared/notifications/notifications.service'; +import { NoContent } from './../../core/shared/NoContent.model'; +import { RouteService } from 'src/app/core/services/route.service'; +import { getFirstCompletedRemoteData, getRemoteDataPayload } from './../../core/shared/operators'; +import { RemoteData } from 'src/app/core/data/remote-data'; +import { Component, OnInit } from '@angular/core'; +import { WorkspaceItem } from '../../core/submission/models/workspaceitem.model'; +import { Observable, map, switchMap, take } from 'rxjs'; +import { ActivatedRoute, Data, Params, Router } from '@angular/router'; +import { Location } from '@angular/common'; +import { WorkspaceitemDataService } from 'src/app/core/submission/workspaceitem-data.service'; +import { TranslateService } from '@ngx-translate/core'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { DSpaceObject } from 'src/app/core/shared/dspace-object.model'; + +@Component({ + selector: 'ds-workspaceitems-delete-page', + templateUrl: './workspaceitems-delete-page.component.html', + styleUrls: ['./workspaceitems-delete-page.component.scss'] +}) +export class WorkspaceItemsDeletePageComponent implements OnInit { + + /** + * The workspaceitem to delete + */ + public wsi$: Observable; + + /** + * The dspace object + */ + public dso$: Observable; + + /** + * The previous query parameters + */ + private previousQueryParameters?: Params; + + constructor( + private activatedRoute: ActivatedRoute, + private router: Router, + private routeService: RouteService, + private workspaceItemService: WorkspaceitemDataService, + private notificationsService: NotificationsService, + private translationService: TranslateService, + private location: Location, + private modalService: NgbModal, + ) { } + + ngOnInit(): void { + this.wsi$ = this.activatedRoute.data.pipe(map((data: Data) => data.wsi as RemoteData), getRemoteDataPayload()); + this.dso$ = this.activatedRoute.data.pipe(map((data: Data) => data.dso as RemoteData), getRemoteDataPayload()); + this.previousQueryParameters = (this.location.getState() as { [key: string]: any }).previousQueryParams; + } + + /** + * Navigates to the previous url + * If there's not previous url, it continues to the mydspace page instead + */ + previousPage() { + this.routeService.getPreviousUrl().pipe(take(1)) + .subscribe((url: string) => { + let params: Params = {}; + if (!url) { + url = '/mydspace'; + params = this.previousQueryParameters; + } + if (url.split('?').length > 1) { + for (const param of url.split('?')[1].split('&')) { + params[param.split('=')[0]] = decodeURIComponent(param.split('=')[1]); + } + } + void this.router.navigate([url.split('?')[0]], { queryParams: params }); + } + ); + } + + /** + * Open the modal to confirm the deletion of the workspaceitem + */ + public async confirmDelete(content) { + await this.modalService.open(content).result.then( + (result) => { + if (result === 'ok') { + this.sendDeleteRequest(); + } + } + ); + } + + /** + * Delete the target workspaceitem object + */ + sendDeleteRequest() { + this.wsi$.pipe( + switchMap((wsi: WorkspaceItem) => this.workspaceItemService.delete(wsi.id).pipe( + getFirstCompletedRemoteData(), + )) + ).subscribe((response: RemoteData) => { + if (response.hasSucceeded) { + const title = this.translationService.get('workspace-item.delete.notification.success.title'); + const content = this.translationService.get('workspace-item.delete.title'); + this.notificationsService.success(title, content); + this.previousPage(); + } else { + const title = this.translationService.get('workspace-item.delete.notification.error.title'); + const content = this.translationService.get('workspace-item.delete.notification.error.content'); + this.notificationsService.error(title, content); + } + }); + } +} diff --git a/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts b/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts index cc76634c03..61393d9f64 100644 --- a/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts +++ b/src/app/workspaceitems-edit-page/workspaceitems-edit-page-routing.module.ts @@ -7,6 +7,8 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso import { ThemedFullItemPageComponent } from '../item-page/full/themed-full-item-page.component'; import { ItemFromWorkspaceResolver } from './item-from-workspace.resolver'; import { WorkspaceItemPageResolver } from './workspace-item-page.resolver'; +import { WorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page/workspaceitems-delete-page.component'; +import { ThemedWorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page/themed-workspaceitems-delete-page.component'; @NgModule({ imports: [ @@ -34,7 +36,27 @@ import { WorkspaceItemPageResolver } from './workspace-item-page.resolver'; breadcrumb: I18nBreadcrumbResolver }, data: { title: 'workspace-item.view.title', breadcrumbKey: 'workspace-item.view' } - } + }, + { + canActivate: [AuthenticatedGuard], + path: 'delete', + component: WorkspaceItemsDeletePageComponent, + resolve: { + dso: ItemFromWorkspaceResolver, + breadcrumb: I18nBreadcrumbResolver + }, + data: { title: 'workspace-item.delete', breadcrumbKey: 'workspace-item.delete' } + }, + { + canActivate: [AuthenticatedGuard], + path: 'delete', + component: ThemedWorkspaceItemsDeletePageComponent, + resolve: { + dso: ItemFromWorkspaceResolver, + breadcrumb: I18nBreadcrumbResolver + }, + data: { title: 'workspace-item.delete', breadcrumbKey: 'workspace-item.delete' } + }, ] } ]) diff --git a/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts b/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts index 65a40f3f7c..77cb7a6e66 100644 --- a/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts +++ b/src/app/workspaceitems-edit-page/workspaceitems-edit-page.module.ts @@ -3,6 +3,8 @@ import { NgModule } from '@angular/core'; import { SharedModule } from '../shared/shared.module'; import { WorkspaceitemsEditPageRoutingModule } from './workspaceitems-edit-page-routing.module'; import { SubmissionModule } from '../submission/submission.module'; +import { WorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page/workspaceitems-delete-page.component'; +import { ThemedWorkspaceItemsDeletePageComponent } from './workspaceitems-delete-page/themed-workspaceitems-delete-page.component'; @NgModule({ imports: [ @@ -11,7 +13,10 @@ import { SubmissionModule } from '../submission/submission.module'; SharedModule, SubmissionModule, ], - declarations: [] + declarations: [ + WorkspaceItemsDeletePageComponent, + ThemedWorkspaceItemsDeletePageComponent, + ] }) /** * This module handles all modules that need to access the workspaceitems edit page. diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 66824e56b3..f493abbe87 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -4959,10 +4959,24 @@ "workspace-item.view.title": "Workspace View", + "workspace-item.delete.breadcrumbs": "Workspace Delete", + + "workspace-item.delete.header": "Delete workspace item", + + "workspace-item.delete.button.confirm": "Delete", + + "workspace-item.delete.button.cancel": "Cancel", + + "workspace-item.delete.notification.success.title": "Deleted", + + "workspace-item.delete.title": "This workspace item was successfully deleted", + + "workspace-item.delete.notification.error.title": "Something went wrong", + + "workspace-item.delete.notification.error.content": "The workspace item could not be deleted", "workflow-item.advanced.title": "Advanced workflow", - "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", diff --git a/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.html b/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.scss b/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.ts b/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.ts new file mode 100644 index 0000000000..95494d76dd --- /dev/null +++ b/src/themes/custom/app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; +import { WorkspaceItemsDeletePageComponent as BaseComponent } from '../../../../../app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component'; + + +@Component({ + selector: 'ds-workspaceitems-delete-page', + templateUrl: '../../../../../app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component.html', +}) +export class WorkspaceItemsDeletePageComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index b1290cc634..4297d8a024 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -145,6 +145,7 @@ import { MediaViewerVideoComponent } from './app/item-page/media-viewer/media-viewer-video/media-viewer-video.component'; import { NgxGalleryModule } from '@kolkov/ngx-gallery'; +import { WorkspaceItemsDeletePageComponent } from './app/workspace-items-delete-page/workspace-items-delete/workspace-items-delete.component'; const DECLARATIONS = [ FileSectionComponent, @@ -212,6 +213,7 @@ const DECLARATIONS = [ MediaViewerComponent, MediaViewerImageComponent, MediaViewerVideoComponent, + WorkspaceItemsDeletePageComponent, ]; @NgModule({ From ef9c42804c0acccbde460e0be9a26597519c99c8 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 30 Apr 2023 13:19:00 +0100 Subject: [PATCH 565/833] Fixed --ds-header-icon-color & --ds-header-icon-color-hover not being applied to all header icons --- src/app/header/header.component.scss | 11 +++++------ src/app/search-navbar/search-navbar.component.scss | 1 + .../shared/auth-nav-menu/auth-nav-menu.component.html | 4 ++-- .../shared/auth-nav-menu/auth-nav-menu.component.scss | 2 +- .../auth-nav-menu/auth-nav-menu.component.spec.ts | 2 +- src/themes/dspace/app/header/header.component.html | 2 +- src/themes/dspace/app/header/header.component.scss | 9 ++++++++- src/themes/dspace/app/navbar/navbar.component.scss | 1 - 8 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss index 546f6a06fa..cca3ed2abb 100644 --- a/src/app/header/header.component.scss +++ b/src/app/header/header.component.scss @@ -11,13 +11,12 @@ line-height: 1.5; } -.navbar ::ng-deep { - a { - color: var(--ds-header-icon-color); +.navbar-toggler { + border: none; + color: var(--ds-header-icon-color); - &:hover, &:focus { - color: var(--ds-header-icon-color-hover); - } + &:hover, &:focus { + color: var(--ds-header-icon-color-hover); } } diff --git a/src/app/search-navbar/search-navbar.component.scss b/src/app/search-navbar/search-navbar.component.scss index d5f3d8d615..4cfb0cb1eb 100644 --- a/src/app/search-navbar/search-navbar.component.scss +++ b/src/app/search-navbar/search-navbar.component.scss @@ -1,6 +1,7 @@ input[type="text"] { margin-top: calc(-0.5 * var(--bs-font-size-base)); background-color: #fff !important; + border-color: var(--ds-header-icon-color); &.collapsed { opacity: 0; diff --git a/src/app/shared/auth-nav-menu/auth-nav-menu.component.html b/src/app/shared/auth-nav-menu/auth-nav-menu.component.html index 94cbd4368a..05f502afa1 100644 --- a/src/app/shared/auth-nav-menu/auth-nav-menu.component.html +++ b/src/app/shared/auth-nav-menu/auth-nav-menu.component.html @@ -19,7 +19,7 @@ diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts index 65e2b508da..5161b75459 100644 --- a/src/app/shared/object-list/object-list.component.ts +++ b/src/app/shared/object-list/object-list.component.ts @@ -81,6 +81,11 @@ export class ObjectListComponent { */ @Input() showPaginator = true; + /** + * Whether to show the thumbnail preview + */ + @Input() showThumbnails; + /** * Emit when one of the listed object has changed. */ diff --git a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts index f84ae642ad..99251d3c24 100644 --- a/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts +++ b/src/app/shared/object-list/search-result-list-element/item-search-result/item-types/item/item-search-result-list-element.component.ts @@ -22,14 +22,9 @@ export class ItemSearchResultListElementComponent extends SearchResultListElemen */ itemPageRoute: string; - /** - * Display thumbnails if required by configuration - */ - showThumbnails: boolean; - ngOnInit(): void { super.ngOnInit(); - this.showThumbnails = this.appConfig.browseBy.showThumbnails; + this.showThumbnails = this.showThumbnails ?? this.appConfig.browseBy.showThumbnails; this.itemPageRoute = getItemPageRoute(this.dso); } } diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts index 913302351f..4d7b5ca77b 100644 --- a/src/app/shared/object-list/themed-object-list.component.ts +++ b/src/app/shared/object-list/themed-object-list.component.ts @@ -78,6 +78,11 @@ export class ThemedObjectListComponent extends ThemedComponent diff --git a/src/app/shared/search/search-results/search-results.component.ts b/src/app/shared/search/search-results/search-results.component.ts index 0a83d3e5c6..15d2cc0f00 100644 --- a/src/app/shared/search/search-results/search-results.component.ts +++ b/src/app/shared/search/search-results/search-results.component.ts @@ -52,6 +52,11 @@ export class SearchResultsComponent { */ @Input() showCsvExport = false; + /** + * Whether to show the thumbnail preview + */ + @Input() showThumbnails; + /** * The current sorting configuration of the search */ diff --git a/src/app/shared/search/search-results/themed-search-results.component.ts b/src/app/shared/search/search-results/themed-search-results.component.ts index 7abfb2dfa8..01ee5761f3 100644 --- a/src/app/shared/search/search-results/themed-search-results.component.ts +++ b/src/app/shared/search/search-results/themed-search-results.component.ts @@ -21,7 +21,7 @@ import { ListableObject } from '../../object-collection/shared/listable-object.m templateUrl: '../../theme-support/themed.component.html', }) export class ThemedSearchResultsComponent extends ThemedComponent { - protected inAndOutputNames: (keyof SearchResultsComponent & keyof this)[] = ['linkType', 'searchResults', 'searchConfig', 'showCsvExport', 'sortConfig', 'viewMode', 'configuration', 'disableHeader', 'selectable', 'context', 'hidePaginationDetail', 'selectionConfig', 'contentChange', 'deselectObject', 'selectObject']; + protected inAndOutputNames: (keyof SearchResultsComponent & keyof this)[] = ['linkType', 'searchResults', 'searchConfig', 'showCsvExport', 'showThumbnails', 'sortConfig', 'viewMode', 'configuration', 'disableHeader', 'selectable', 'context', 'hidePaginationDetail', 'selectionConfig', 'contentChange', 'deselectObject', 'selectObject']; @Input() linkType: CollectionElementLinkType; @@ -31,6 +31,8 @@ export class ThemedSearchResultsComponent extends ThemedComponent diff --git a/src/app/shared/search/search.component.ts b/src/app/shared/search/search.component.ts index a5b9fb9c7d..5dd84344d4 100644 --- a/src/app/shared/search/search.component.ts +++ b/src/app/shared/search/search.component.ts @@ -128,6 +128,11 @@ export class SearchComponent implements OnInit { */ @Input() showSidebar = true; + /** + * Whether to show the thumbnail preview + */ + @Input() showThumbnails; + /** * Whether to show the view mode switch */ diff --git a/src/app/shared/search/themed-search.component.ts b/src/app/shared/search/themed-search.component.ts index 44c22c8925..fe531e4f0f 100644 --- a/src/app/shared/search/themed-search.component.ts +++ b/src/app/shared/search/themed-search.component.ts @@ -19,7 +19,7 @@ import { ListableObject } from '../object-collection/shared/listable-object.mode templateUrl: '../theme-support/themed.component.html', }) export class ThemedSearchComponent extends ThemedComponent { - protected inAndOutputNames: (keyof SearchComponent & keyof this)[] = ['configurationList', 'context', 'configuration', 'fixedFilterQuery', 'useCachedVersionIfAvailable', 'inPlaceSearch', 'linkType', 'paginationId', 'searchEnabled', 'sideBarWidth', 'searchFormPlaceholder', 'selectable', 'selectionConfig', 'showCsvExport', 'showSidebar', 'showViewModes', 'useUniquePageId', 'viewModeList', 'showScopeSelector', 'resultFound', 'deselectObject', 'selectObject', 'trackStatistics', 'query']; + protected inAndOutputNames: (keyof SearchComponent & keyof this)[] = ['configurationList', 'context', 'configuration', 'fixedFilterQuery', 'useCachedVersionIfAvailable', 'inPlaceSearch', 'linkType', 'paginationId', 'searchEnabled', 'sideBarWidth', 'searchFormPlaceholder', 'selectable', 'selectionConfig', 'showCsvExport', 'showSidebar', 'showThumbnails', 'showViewModes', 'useUniquePageId', 'viewModeList', 'showScopeSelector', 'resultFound', 'deselectObject', 'selectObject', 'trackStatistics', 'query']; @Input() configurationList: SearchConfigurationOption[]; @@ -51,6 +51,8 @@ export class ThemedSearchComponent extends ThemedComponent { @Input() showSidebar: boolean; + @Input() showThumbnails; + @Input() showViewModes: boolean; @Input() useUniquePageId: boolean; From 06fef61f02c156e4b22d0d590ee301421f08d2c4 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Tue, 9 May 2023 18:39:04 +0200 Subject: [PATCH 597/833] [CST-9636] Create page for bulk access --- .../access-control-routing.module.ts | 20 +++++- .../access-control/access-control.module.ts | 24 +++++-- .../browse/bulk-access-browse.component.html | 51 ++++++++++++++ .../browse/bulk-access-browse.component.scss | 0 .../bulk-access-browse.component.spec.ts | 25 +++++++ .../browse/bulk-access-browse.component.ts | 67 +++++++++++++++++++ .../bulk-access/bulk-access.component.html | 9 +++ .../bulk-access/bulk-access.component.scss | 0 .../bulk-access/bulk-access.component.spec.ts | 25 +++++++ .../bulk-access/bulk-access.component.ts | 15 +++++ .../bulk-access-settings.component.html | 21 ++++++ .../bulk-access-settings.component.scss | 0 .../bulk-access-settings.component.spec.ts | 25 +++++++ .../bulk-access-settings.component.ts | 15 +++++ src/app/menu.resolver.ts | 11 +++ src/assets/i18n/en.json5 | 14 ++++ 16 files changed, 312 insertions(+), 10 deletions(-) create mode 100644 src/app/access-control/bulk-access/browse/bulk-access-browse.component.html create mode 100644 src/app/access-control/bulk-access/browse/bulk-access-browse.component.scss create mode 100644 src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts create mode 100644 src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts create mode 100644 src/app/access-control/bulk-access/bulk-access.component.html create mode 100644 src/app/access-control/bulk-access/bulk-access.component.scss create mode 100644 src/app/access-control/bulk-access/bulk-access.component.spec.ts create mode 100644 src/app/access-control/bulk-access/bulk-access.component.ts create mode 100644 src/app/access-control/bulk-access/settings/bulk-access-settings.component.html create mode 100644 src/app/access-control/bulk-access/settings/bulk-access-settings.component.scss create mode 100644 src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts create mode 100644 src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts diff --git a/src/app/access-control/access-control-routing.module.ts b/src/app/access-control/access-control-routing.module.ts index e64b0d170a..6f6de6cb26 100644 --- a/src/app/access-control/access-control-routing.module.ts +++ b/src/app/access-control/access-control-routing.module.ts @@ -6,8 +6,13 @@ import { GroupsRegistryComponent } from './group-registry/groups-registry.compon import { GROUP_EDIT_PATH } from './access-control-routing-paths'; import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.resolver'; import { GroupPageGuard } from './group-registry/group-page.guard'; -import { GroupAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; -import { SiteAdministratorGuard } from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; +import { + GroupAdministratorGuard +} from '../core/data/feature-authorization/feature-authorization-guard/group-administrator.guard'; +import { + SiteAdministratorGuard +} from '../core/data/feature-authorization/feature-authorization-guard/site-administrator.guard'; +import { BulkAccessComponent } from './bulk-access/bulk-access.component'; @NgModule({ imports: [ @@ -47,7 +52,16 @@ import { SiteAdministratorGuard } from '../core/data/feature-authorization/featu }, data: { title: 'admin.access-control.groups.title.singleGroup', breadcrumbKey: 'admin.access-control.groups.singleGroup' }, canActivate: [GroupPageGuard] - } + }, + { + path: 'bulk-access', + component: BulkAccessComponent, + resolve: { + breadcrumb: I18nBreadcrumbResolver + }, + data: { title: 'admin.access-control.bulk-access.title', breadcrumbKey: 'admin.access-control.bulk-access' }, + canActivate: [SiteAdministratorGuard] + }, ]) ] }) diff --git a/src/app/access-control/access-control.module.ts b/src/app/access-control/access-control.module.ts index 47a971a882..ba7334d24f 100644 --- a/src/app/access-control/access-control.module.ts +++ b/src/app/access-control/access-control.module.ts @@ -12,6 +12,11 @@ import { GroupsRegistryComponent } from './group-registry/groups-registry.compon import { FormModule } from '../shared/form/form.module'; import { DYNAMIC_ERROR_MESSAGES_MATCHER, DynamicErrorMessagesMatcher } from '@ng-dynamic-forms/core'; import { AbstractControl } from '@angular/forms'; +import { BulkAccessComponent } from './bulk-access/bulk-access.component'; +import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { BulkAccessBrowseComponent } from './bulk-access/browse/bulk-access-browse.component'; +import { BulkAccessSettingsComponent } from './bulk-access/settings/bulk-access-settings.component'; +import { SearchModule } from '../shared/search/search.module'; /** * Condition for displaying error messages on email form field @@ -22,13 +27,15 @@ export const ValidateEmailErrorStateMatcher: DynamicErrorMessagesMatcher = }; @NgModule({ - imports: [ - CommonModule, - SharedModule, - RouterModule, - AccessControlRoutingModule, - FormModule, - ], + imports: [ + CommonModule, + SharedModule, + RouterModule, + AccessControlRoutingModule, + FormModule, + NgbAccordionModule, + SearchModule, + ], exports: [ MembersListComponent, ], @@ -39,6 +46,9 @@ export const ValidateEmailErrorStateMatcher: DynamicErrorMessagesMatcher = GroupFormComponent, SubgroupsListComponent, MembersListComponent, + BulkAccessComponent, + BulkAccessBrowseComponent, + BulkAccessSettingsComponent, ], providers: [ { diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html new file mode 100644 index 0000000000..760134aba5 --- /dev/null +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -0,0 +1,51 @@ + + + +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.scss b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts new file mode 100644 index 0000000000..12cfabae08 --- /dev/null +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkAccessBrowseComponent } from './bulk-access-browse.component'; + +describe('BrowseComponent', () => { + let component: BulkAccessBrowseComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkAccessBrowseComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkAccessBrowseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts new file mode 100644 index 0000000000..a91cdf35df --- /dev/null +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; + +import { BehaviorSubject, Subscription } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; + +import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component'; +import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; +import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; +import { SelectableListState } from '../../../shared/object-list/selectable-list/selectable-list.reducer'; +import { RemoteData } from '../../../core/data/remote-data'; +import { buildPaginatedList, PaginatedList } from '../../../core/data/paginated-list.model'; +import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; +import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; +import { PageInfo } from '../../../core/shared/page-info.model'; +import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; + +@Component({ + selector: 'ds-bulk-access-browse', + templateUrl: './bulk-access-browse.component.html', + styleUrls: ['./bulk-access-browse.component.scss'], + providers: [ + { + provide: SEARCH_CONFIG_SERVICE, + useClass: SearchConfigurationService + } + ] +}) +export class BulkAccessBrowseComponent implements OnInit { + /** + * The active nav id + */ + activateId = 'search'; + + /** + * The selection list id + */ + listId: string = 'bulk-access-list'; + + /** + * The list of the objects already selected + */ + objectsSelected$: BehaviorSubject>> = new BehaviorSubject>>(null); + + paginationOptions: PaginationComponentOptions; + private subs: Subscription[] = []; + + constructor(private selectableListService: SelectableListService) { + } + + ngOnInit(): void { + this.paginationOptions = Object.assign(new PaginationComponentOptions(), { + id: 'elp', + pageSize: 10, + currentPage: 1 + }); + this.subs.push( + this.selectableListService.getSelectableList(this.listId).pipe( + distinctUntilChanged(), + map((list: SelectableListState) => { + console.log(list); + return createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), list?.selection || [])) + }) + ).subscribe(this.objectsSelected$) + ) + } + +} diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html new file mode 100644 index 0000000000..e0eafb6e36 --- /dev/null +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -0,0 +1,9 @@ + +
    + +
    + +
    + + + diff --git a/src/app/access-control/bulk-access/bulk-access.component.scss b/src/app/access-control/bulk-access/bulk-access.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts new file mode 100644 index 0000000000..61fab1e5a9 --- /dev/null +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkAccessComponent } from './bulk-access.component'; + +describe('BulkAccessComponent', () => { + let component: BulkAccessComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkAccessComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkAccessComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts new file mode 100644 index 0000000000..9e45b2c59b --- /dev/null +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ds-bulk-access', + templateUrl: './bulk-access.component.html', + styleUrls: ['./bulk-access.component.scss'] +}) +export class BulkAccessComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html new file mode 100644 index 0000000000..a5c292eddd --- /dev/null +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html @@ -0,0 +1,21 @@ + + + +
    + +
    +
    + + +
    +
    +
    +
    + +

    bulk-access-settings works!

    +
    +
    +
    diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.scss b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts new file mode 100644 index 0000000000..435f2828b9 --- /dev/null +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkAccessSettingsComponent } from './bulk-access-settings.component'; + +describe('BulkAccessSettingsComponent', () => { + let component: BulkAccessSettingsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkAccessSettingsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkAccessSettingsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts new file mode 100644 index 0000000000..631b786b01 --- /dev/null +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ds-bulk-access-settings', + templateUrl: './bulk-access-settings.component.html', + styleUrls: ['./bulk-access-settings.component.scss'] +}) +export class BulkAccessSettingsComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index 3ec1df85fd..cad6a6ec57 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -659,6 +659,17 @@ export class MenuResolver implements Resolve { link: '/access-control/groups' } as LinkMenuItemModel, }, + { + id: 'access_control_bulk', + parentID: 'access_control', + active: false, + visible: isSiteAdmin, + model: { + type: MenuItemType.LINK, + text: 'menu.section.access_control_bulk', + link: '/access-control/bulk-access' + } as LinkMenuItemModel, + }, // TODO: enable this menu item once the feature has been implemented // { // id: 'access_control_authorizations', diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 6541848df2..00f2bd46b0 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -227,6 +227,18 @@ + "admin.access-control.bulk-access": "Bulk access", + + "admin.access-control.bulk-access.title": "Bulk Access", + + "admin.access-control.bulk-access-browse.header": "Step 1: select objects", + + "admin.access-control.bulk-access-browse.search.header": "Search", + + "admin.access-control.bulk-access-browse.selected.header": "Current selection({{number}})", + + "admin.access-control.bulk-access-settings.header": "Step 2: operation to perform", + "admin.access-control.epeople.actions.delete": "Delete EPerson", "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", @@ -2878,6 +2890,8 @@ "menu.section.access_control_authorizations": "Authorizations", + "menu.section.access_control_bulk": "Bulk access", + "menu.section.access_control_groups": "Groups", "menu.section.access_control_people": "People", From fbfe55db35b4427d71cadf1262e78ea019553c5f Mon Sep 17 00:00:00 2001 From: Tim Donohue Date: Tue, 9 May 2023 16:37:33 -0500 Subject: [PATCH 598/833] Enable Vietnamese language pack --- config/config.example.yml | 3 +++ src/config/default-app-config.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/config/config.example.yml b/config/config.example.yml index f1e6be76aa..a62cce13eb 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -214,6 +214,9 @@ languages: - code: tr label: Türkçe active: true + - code: vi + label: Tiếng Việt + active: true - code: kk label: Қазақ active: true diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 67c2feada8..77422e4eff 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -229,6 +229,7 @@ export class DefaultAppConfig implements AppConfig { { code: 'fi', label: 'Suomi', active: true }, { code: 'sv', label: 'Svenska', active: true }, { code: 'tr', label: 'Türkçe', active: true }, + { code: 'vi', label: 'Tiếng Việt', active: true }, { code: 'kk', label: 'Қазақ', active: true }, { code: 'bn', label: 'বাংলা', active: true }, { code: 'hi', label: 'हिंदी', active: true}, From c10e660e0b1da868065f1c8ecdd4709636a1e5b9 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 10 May 2023 10:11:06 +0200 Subject: [PATCH 599/833] 101623: Refactor BrowseDefinition model/resource-type to FlatBrowseDefinition --- src/app/browse-by/browse-by-guard.spec.ts | 4 ++-- src/app/browse-by/browse-by-guard.ts | 4 ++-- .../browse-by-switcher.component.spec.ts | 14 +++++++------- .../browse-by-switcher.component.ts | 4 ++-- .../core/browse/browse-definition-data.service.ts | 8 ++++---- src/app/core/browse/browse.service.spec.ts | 6 +++--- src/app/core/browse/browse.service.ts | 10 +++++----- src/app/core/core.module.ts | 4 ++-- ...on.model.ts => flat-browse-definition.model.ts} | 9 ++++----- .../shared/flat-browse-definition.resource-type.ts | 9 +++++++++ src/app/core/shared/operators.ts | 12 ++++++------ src/app/menu.resolver.ts | 8 ++++---- src/app/navbar/navbar.component.spec.ts | 10 +++++----- .../comcol-page-browse-by.component.ts | 8 ++++---- 14 files changed, 59 insertions(+), 51 deletions(-) rename src/app/core/shared/{browse-definition.model.ts => flat-browse-definition.model.ts} (81%) create mode 100644 src/app/core/shared/flat-browse-definition.resource-type.ts diff --git a/src/app/browse-by/browse-by-guard.spec.ts b/src/app/browse-by/browse-by-guard.spec.ts index 933c95a3cb..8a9f9b8c50 100644 --- a/src/app/browse-by/browse-by-guard.spec.ts +++ b/src/app/browse-by/browse-by-guard.spec.ts @@ -2,7 +2,7 @@ import { first } from 'rxjs/operators'; import { BrowseByGuard } from './browse-by-guard'; import { of as observableOf } from 'rxjs'; import { createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; -import { BrowseDefinition } from '../core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; import { BrowseByDataType } from './browse-by-switcher/browse-by-decorator'; describe('BrowseByGuard', () => { @@ -18,7 +18,7 @@ describe('BrowseByGuard', () => { const id = 'author'; const scope = '1234-65487-12354-1235'; const value = 'Filter'; - const browseDefinition = Object.assign(new BrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); + const browseDefinition = Object.assign(new FlatBrowseDefinition(), { type: BrowseByDataType.Metadata, metadataKeys: ['dc.contributor'] }); beforeEach(() => { dsoService = { diff --git a/src/app/browse-by/browse-by-guard.ts b/src/app/browse-by/browse-by-guard.ts index e4582cb77a..f42359b56b 100644 --- a/src/app/browse-by/browse-by-guard.ts +++ b/src/app/browse-by/browse-by-guard.ts @@ -7,7 +7,7 @@ import { getFirstSucceededRemoteData, getFirstSucceededRemoteDataPayload } from import { TranslateService } from '@ngx-translate/core'; import { Observable, of as observableOf } from 'rxjs'; import { BrowseDefinitionDataService } from '../core/browse/browse-definition-data.service'; -import { BrowseDefinition } from '../core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; @Injectable() /** @@ -23,7 +23,7 @@ export class BrowseByGuard implements CanActivate { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { const title = route.data.title; const id = route.params.id || route.queryParams.id || route.data.id; - let browseDefinition$: Observable; + let browseDefinition$: Observable; if (hasNoValue(route.data.browseDefinition) && hasValue(id)) { browseDefinition$ = this.browseDefinitionService.findById(id).pipe(getFirstSucceededRemoteDataPayload()); } else { diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts index c2e1c9cb68..91c6c29252 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.spec.ts @@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NO_ERRORS_SCHEMA } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BROWSE_BY_COMPONENT_FACTORY, BrowseByDataType } from './browse-by-decorator'; -import { BrowseDefinition } from '../../core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; import { BehaviorSubject } from 'rxjs'; import { ThemeService } from '../../shared/theme-support/theme.service'; @@ -13,33 +13,33 @@ describe('BrowseBySwitcherComponent', () => { const types = [ Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } ), ]; - const data = new BehaviorSubject(createDataWithBrowseDefinition(new BrowseDefinition())); + const data = new BehaviorSubject(createDataWithBrowseDefinition(new FlatBrowseDefinition())); const activatedRouteStub = { data @@ -70,7 +70,7 @@ describe('BrowseBySwitcherComponent', () => { comp = fixture.componentInstance; })); - types.forEach((type: BrowseDefinition) => { + types.forEach((type: FlatBrowseDefinition) => { describe(`when switching to a browse-by page for "${type.id}"`, () => { beforeEach(() => { data.next(createDataWithBrowseDefinition(type)); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts index 0d3a35bebf..3cfc735135 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { BROWSE_BY_COMPONENT_FACTORY } from './browse-by-decorator'; import { GenericConstructor } from '../../core/shared/generic-constructor'; -import { BrowseDefinition } from '../../core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../../core/shared/flat-browse-definition.model'; import { ThemeService } from '../../shared/theme-support/theme.service'; @Component({ @@ -31,7 +31,7 @@ export class BrowseBySwitcherComponent implements OnInit { */ ngOnInit(): void { this.browseByComponent = this.route.data.pipe( - map((data: { browseDefinition: BrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.dataType, this.themeService.getThemeName())) + map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.dataType, this.themeService.getThemeName())) ); } diff --git a/src/app/core/browse/browse-definition-data.service.ts b/src/app/core/browse/browse-definition-data.service.ts index 32c3b44e14..d9c401fc3f 100644 --- a/src/app/core/browse/browse-definition-data.service.ts +++ b/src/app/core/browse/browse-definition-data.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { BROWSE_DEFINITION } from '../shared/browse-definition.resource-type'; -import { BrowseDefinition } from '../shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { RequestService } from '../data/request.service'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; @@ -21,8 +21,8 @@ import { dataService } from '../data/base/data-service.decorator'; providedIn: 'root', }) @dataService(BROWSE_DEFINITION) -export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { - private findAllData: FindAllDataImpl; +export class BrowseDefinitionDataService extends IdentifiableDataService implements FindAllData { + private findAllData: FindAllDataImpl; constructor( protected requestService: RequestService, @@ -49,7 +49,7 @@ export class BrowseDefinitionDataService extends IdentifiableDataService>>} * Return an observable that emits object list */ - findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { + findAll(options: FindListOptions = {}, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable>> { return this.findAllData.findAll(options, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } } diff --git a/src/app/core/browse/browse.service.spec.ts b/src/app/core/browse/browse.service.spec.ts index 46ac8c44f4..9e0615385b 100644 --- a/src/app/core/browse/browse.service.spec.ts +++ b/src/app/core/browse/browse.service.spec.ts @@ -6,7 +6,7 @@ import { getMockRequestService } from '../../shared/mocks/request.service.mock'; import { HALEndpointServiceStub } from '../../shared/testing/hal-endpoint-service.stub'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { RequestService } from '../data/request.service'; -import { BrowseDefinition } from '../shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { BrowseEntrySearchOptions } from './browse-entry-search-options.model'; import { BrowseService } from './browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -23,7 +23,7 @@ describe('BrowseService', () => { const browsesEndpointURL = 'https://rest.api/browses'; const halService: any = new HALEndpointServiceStub(browsesEndpointURL); const browseDefinitions = [ - Object.assign(new BrowseDefinition(), { + Object.assign(new FlatBrowseDefinition(), { id: 'date', metadataBrowse: false, sortOptions: [ @@ -50,7 +50,7 @@ describe('BrowseService', () => { items: { href: 'https://rest.api/discover/browses/dateissued/items' } } }), - Object.assign(new BrowseDefinition(), { + Object.assign(new FlatBrowseDefinition(), { id: 'author', metadataBrowse: true, sortOptions: [ diff --git a/src/app/core/browse/browse.service.ts b/src/app/core/browse/browse.service.ts index 2fab189254..9e5589e3d8 100644 --- a/src/app/core/browse/browse.service.ts +++ b/src/app/core/browse/browse.service.ts @@ -6,7 +6,7 @@ import { RemoteDataBuildService } from '../cache/builders/remote-data-build.serv import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; -import { BrowseDefinition } from '../shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../shared/flat-browse-definition.model'; import { BrowseEntry } from '../shared/browse-entry.model'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { Item } from '../shared/item.model'; @@ -60,7 +60,7 @@ export class BrowseService { /** * Get all BrowseDefinitions */ - getBrowseDefinitions(): Observable>> { + getBrowseDefinitions(): Observable>> { // TODO properly support pagination return this.browseDefinitionDataService.findAll({ elementsPerPage: 9999 }).pipe( getFirstSucceededRemoteData(), @@ -233,13 +233,13 @@ export class BrowseService { return this.getBrowseDefinitions().pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: BrowseDefinition[]) => browseDefinitions - .find((def: BrowseDefinition) => { + map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions + .find((def: FlatBrowseDefinition) => { const matchingKeys = def.metadataKeys.find((key: string) => searchKeyArray.indexOf(key) >= 0); return isNotEmpty(matchingKeys); }) ), - map((def: BrowseDefinition) => { + map((def: FlatBrowseDefinition) => { if (isEmpty(def) || isEmpty(def._links) || isEmpty(def._links[linkPath])) { throw new Error(`A browse endpoint for ${linkPath} on ${metadataKey} isn't configured`); } else { diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index ede23ba43b..81b70e42c2 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -73,7 +73,7 @@ import { ServerResponseService } from './services/server-response.service'; import { NativeWindowFactory, NativeWindowService } from './services/window.service'; import { BitstreamFormat } from './shared/bitstream-format.model'; import { Bitstream } from './shared/bitstream.model'; -import { BrowseDefinition } from './shared/browse-definition.model'; +import { FlatBrowseDefinition } from './shared/flat-browse-definition.model'; import { BrowseEntry } from './shared/browse-entry.model'; import { Bundle } from './shared/bundle.model'; import { Collection } from './shared/collection.model'; @@ -324,7 +324,7 @@ export const models = SubmissionUploadsModel, AuthStatus, BrowseEntry, - BrowseDefinition, + FlatBrowseDefinition, ClaimedTask, TaskObject, PoolTask, diff --git a/src/app/core/shared/browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts similarity index 81% rename from src/app/core/shared/browse-definition.model.ts rename to src/app/core/shared/flat-browse-definition.model.ts index 863f454422..38df4a562d 100644 --- a/src/app/core/shared/browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -1,7 +1,7 @@ import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; import { typedObject } from '../cache/builders/build-decorators'; import { excludeFromEquals } from '../utilities/equals.decorators'; -import { BROWSE_DEFINITION } from './browse-definition.resource-type'; +import { FLAT_BROWSE_DEFINITION } from './flat-browse-definition.resource-type'; import { HALLink } from './hal-link.model'; import { ResourceType } from './resource-type'; import { SortOption } from './sort-option.model'; @@ -9,15 +9,14 @@ import { CacheableObject } from '../cache/cacheable-object.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; @typedObject -export class BrowseDefinition extends CacheableObject { - static type = BROWSE_DEFINITION; +export class FlatBrowseDefinition extends CacheableObject { + static type = FLAT_BROWSE_DEFINITION; /** * The object type */ @excludeFromEquals - @autoserialize - type: ResourceType; + type: ResourceType = FLAT_BROWSE_DEFINITION; @autoserialize id: string; diff --git a/src/app/core/shared/flat-browse-definition.resource-type.ts b/src/app/core/shared/flat-browse-definition.resource-type.ts new file mode 100644 index 0000000000..bfb01cd98c --- /dev/null +++ b/src/app/core/shared/flat-browse-definition.resource-type.ts @@ -0,0 +1,9 @@ +import { ResourceType } from './resource-type'; + +/** + * The resource type for FlatBrowseDefinition + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const FLAT_BROWSE_DEFINITION = new ResourceType('flatBrowse'); diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index 32610c82fd..dd0ade112a 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -6,7 +6,7 @@ import { PaginatedList } from '../data/paginated-list.model'; import { RemoteData } from '../data/remote-data'; import { MetadataField } from '../metadata/metadata-field.model'; import { MetadataSchema } from '../metadata/metadata-schema.model'; -import { BrowseDefinition } from './browse-definition.model'; +import { FlatBrowseDefinition } from './flat-browse-definition.model'; import { DSpaceObject } from './dspace-object.model'; import { InjectionToken } from '@angular/core'; import { MonoTypeOperatorFunction, SchedulerLike } from 'rxjs/internal/types'; @@ -171,17 +171,17 @@ export const toDSpaceObjectListRD = () => /** * Get the browse links from a definition by ID given an array of all definitions * @param {string} definitionID - * @returns {(source: Observable>) => Observable} + * @returns {(source: Observable>) => Observable} */ export const getBrowseDefinitionLinks = (definitionID: string) => - (source: Observable>>): Observable => + (source: Observable>>): Observable => source.pipe( getRemoteDataPayload(), getPaginatedListPayload(), - map((browseDefinitions: BrowseDefinition[]) => browseDefinitions - .find((def: BrowseDefinition) => def.id === definitionID) + map((browseDefinitions: FlatBrowseDefinition[]) => browseDefinitions + .find((def: FlatBrowseDefinition) => def.id === definitionID) ), - map((def: BrowseDefinition) => { + map((def: FlatBrowseDefinition) => { if (isNotEmpty(def)) { return def._links; } else { diff --git a/src/app/menu.resolver.ts b/src/app/menu.resolver.ts index f771ef8b27..d423d3bc33 100644 --- a/src/app/menu.resolver.ts +++ b/src/app/menu.resolver.ts @@ -7,7 +7,7 @@ import { MenuItemType } from './shared/menu/menu-item-type.model'; import { LinkMenuItemModel } from './shared/menu/menu-item/models/link.model'; import { getFirstCompletedRemoteData } from './core/shared/operators'; import { PaginatedList } from './core/data/paginated-list.model'; -import { BrowseDefinition } from './core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from './core/shared/flat-browse-definition.model'; import { RemoteData } from './core/data/remote-data'; import { TextMenuItemModel } from './shared/menu/menu-item/models/text.model'; import { BrowseService } from './core/browse/browse.service'; @@ -108,10 +108,10 @@ export class MenuResolver implements Resolve { ]; // Read the different Browse-By types from config and add them to the browse menu this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { - browseDefListRD.payload.page.forEach((browseDef: BrowseDefinition) => { + browseDefListRD.payload.page.forEach((browseDef: FlatBrowseDefinition) => { menuList.push({ id: `browse_global_by_${browseDef.id}`, parentID: 'browse_global', diff --git a/src/app/navbar/navbar.component.spec.ts b/src/app/navbar/navbar.component.spec.ts index ada9be9d0b..084047fc46 100644 --- a/src/app/navbar/navbar.component.spec.ts +++ b/src/app/navbar/navbar.component.spec.ts @@ -16,7 +16,7 @@ import { RouterTestingModule } from '@angular/router/testing'; import { BrowseService } from '../core/browse/browse.service'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../shared/remote-data.utils'; import { buildPaginatedList } from '../core/data/paginated-list.model'; -import { BrowseDefinition } from '../core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../core/shared/flat-browse-definition.model'; import { BrowseByDataType } from '../browse-by/browse-by-switcher/browse-by-decorator'; import { Item } from '../core/shared/item.model'; import { AuthorizationDataService } from '../core/data/feature-authorization/authorization-data.service'; @@ -66,26 +66,26 @@ describe('NavbarComponent', () => { beforeEach(waitForAsync(() => { browseDefinitions = [ Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'title', dataType: BrowseByDataType.Title, } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'dateissued', dataType: BrowseByDataType.Date, metadataKeys: ['dc.date.issued'] } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'author', dataType: BrowseByDataType.Metadata, } ), Object.assign( - new BrowseDefinition(), { + new FlatBrowseDefinition(), { id: 'subject', dataType: BrowseByDataType.Metadata, } diff --git a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts index 0527d283f0..668bd138c8 100644 --- a/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts +++ b/src/app/shared/comcol/comcol-page-browse-by/comcol-page-browse-by.component.ts @@ -6,7 +6,7 @@ import { getCommunityPageRoute } from '../../../community-page/community-page-ro import { getCollectionPageRoute } from '../../../collection-page/collection-page-routing-paths'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; import { PaginatedList } from '../../../core/data/paginated-list.model'; -import { BrowseDefinition } from '../../../core/shared/browse-definition.model'; +import { FlatBrowseDefinition } from '../../../core/shared/flat-browse-definition.model'; import { RemoteData } from '../../../core/data/remote-data'; import { BrowseService } from '../../../core/browse/browse.service'; @@ -46,11 +46,11 @@ export class ComcolPageBrowseByComponent implements OnInit { ngOnInit(): void { this.browseService.getBrowseDefinitions() - .pipe(getFirstCompletedRemoteData>()) - .subscribe((browseDefListRD: RemoteData>) => { + .pipe(getFirstCompletedRemoteData>()) + .subscribe((browseDefListRD: RemoteData>) => { if (browseDefListRD.hasSucceeded) { this.allOptions = browseDefListRD.payload.page - .map((config: BrowseDefinition) => ({ + .map((config: FlatBrowseDefinition) => ({ id: config.id, label: `browse.comcol.by.${config.id}`, routerLink: `/browse/${config.id}`, From 581ed432f9843c8f5a417a93e80494e2125bcffd Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 11:09:41 +0200 Subject: [PATCH 600/833] [CST-9636] Use show thumbnail flag for community and collection list elements --- .../collection-search-result-list-element.component.ts | 2 +- .../community-search-result-list-element.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts index 60415f649e..23e9e5ee57 100644 --- a/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts +++ b/src/app/shared/object-list/search-result-list-element/collection-search-result/collection-search-result-list-element.component.ts @@ -23,7 +23,7 @@ export class CollectionSearchResultListElementComponent extends SearchResultList ngOnInit(): void { super.ngOnInit(); - this.showThumbnails = this.appConfig.browseBy.showThumbnails; + this.showThumbnails = this.showThumbnails ?? this.appConfig.browseBy.showThumbnails; } } diff --git a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.ts b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.ts index 4cc25b8b76..f31e36ce82 100644 --- a/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.ts +++ b/src/app/shared/object-list/search-result-list-element/community-search-result/community-search-result-list-element.component.ts @@ -23,6 +23,6 @@ export class CommunitySearchResultListElementComponent extends SearchResultListE ngOnInit(): void { super.ngOnInit(); - this.showThumbnails = this.appConfig.browseBy.showThumbnails; + this.showThumbnails = this.showThumbnails ?? this.appConfig.browseBy.showThumbnails; } } From c2f2cb5b3abecdd358876a4462efaea7ae686be4 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Wed, 10 May 2023 11:01:15 +0200 Subject: [PATCH 601/833] 101623: Add HierarchicalBrowseDefinition model + base BrowseDefinition class --- src/app/core/shared/browse-definition.ts | 10 ++++ .../shared/flat-browse-definition.model.ts | 7 ++- .../hierarchical-browse-definition.model.ts | 47 +++++++++++++++++++ ...rchical-browse-definition.resource-type.ts | 9 ++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/app/core/shared/browse-definition.ts create mode 100644 src/app/core/shared/hierarchical-browse-definition.model.ts create mode 100644 src/app/core/shared/hierarchical-browse-definition.resource-type.ts diff --git a/src/app/core/shared/browse-definition.ts b/src/app/core/shared/browse-definition.ts new file mode 100644 index 0000000000..788ef65739 --- /dev/null +++ b/src/app/core/shared/browse-definition.ts @@ -0,0 +1,10 @@ +/** + * Base class for BrowseDefinition models + */ +export abstract class BrowseDefinition { + + /** + * Get the render type of the BrowseDefinition model + */ + abstract getRenderType(): string; +} diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 38df4a562d..2002d6bbab 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -7,9 +7,10 @@ import { ResourceType } from './resource-type'; import { SortOption } from './sort-option.model'; import { CacheableObject } from '../cache/cacheable-object.model'; import { BrowseByDataType } from '../../browse-by/browse-by-switcher/browse-by-decorator'; +import { BrowseDefinition } from './browse-definition'; @typedObject -export class FlatBrowseDefinition extends CacheableObject { +export class FlatBrowseDefinition extends CacheableObject implements BrowseDefinition { static type = FLAT_BROWSE_DEFINITION; /** @@ -46,4 +47,8 @@ export class FlatBrowseDefinition extends CacheableObject { entries: HALLink; items: HALLink; }; + + getRenderType(): string { + return this.dataType; + } } diff --git a/src/app/core/shared/hierarchical-browse-definition.model.ts b/src/app/core/shared/hierarchical-browse-definition.model.ts new file mode 100644 index 0000000000..a57550e1b3 --- /dev/null +++ b/src/app/core/shared/hierarchical-browse-definition.model.ts @@ -0,0 +1,47 @@ +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { typedObject } from '../cache/builders/build-decorators'; +import { excludeFromEquals } from '../utilities/equals.decorators'; +import { HIERARCHICAL_BROWSE_DEFINITION } from './hierarchical-browse-definition.resource-type'; +import { HALLink } from './hal-link.model'; +import { ResourceType } from './resource-type'; +import { CacheableObject } from '../cache/cacheable-object.model'; +import { BrowseDefinition } from './browse-definition'; + +@typedObject +export class HierarchicalBrowseDefinition extends CacheableObject implements BrowseDefinition { + static type = HIERARCHICAL_BROWSE_DEFINITION; + + /** + * The object type + */ + @excludeFromEquals + type: ResourceType = HIERARCHICAL_BROWSE_DEFINITION; + + @autoserialize + id: string; + + @autoserialize + facetType: string; + + @autoserialize + vocabulary: string; + + @autoserializeAs('metadata') + metadataKeys: string[]; + + get self(): string { + return this._links.self.href; + } + + @deserialize + _links: { + self: HALLink; + entries: HALLink; + items: HALLink; + vocabulary: HALLink; + }; + + getRenderType(): string { + return 'hierarchy'; + } +} diff --git a/src/app/core/shared/hierarchical-browse-definition.resource-type.ts b/src/app/core/shared/hierarchical-browse-definition.resource-type.ts new file mode 100644 index 0000000000..df06d67c7a --- /dev/null +++ b/src/app/core/shared/hierarchical-browse-definition.resource-type.ts @@ -0,0 +1,9 @@ +import { ResourceType } from './resource-type'; + +/** + * The resource type for HierarchicalBrowseDefinition + * + * Needs to be in a separate file to prevent circular + * dependencies in webpack. + */ +export const HIERARCHICAL_BROWSE_DEFINITION = new ResourceType('hierarchicalBrowse'); From 3924a820482944055d8ac6d3f7efab95f433050e Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 13:08:08 +0200 Subject: [PATCH 602/833] [CST-9636] Provide possibility to paginate a full list of elements --- .../object-list/object-list.component.html | 59 +++++++++++++------ .../object-list/object-list.component.ts | 5 ++ .../themed-object-list.component.ts | 6 ++ .../pagination/pagination.component.html | 4 +- src/app/shared/shared.module.ts | 4 +- 5 files changed, 57 insertions(+), 21 deletions(-) diff --git a/src/app/shared/object-list/object-list.component.html b/src/app/shared/object-list/object-list.component.html index 8e0482b1f7..541a4794b0 100644 --- a/src/app/shared/object-list/object-list.component.html +++ b/src/app/shared/object-list/object-list.component.html @@ -16,23 +16,46 @@ (prev)="goPrev()" (next)="goNext()">
      -
    • - - - -
    • + +
    • + + + +
    • +
      + +
    • + + + +
    • +
    diff --git a/src/app/shared/object-list/object-list.component.ts b/src/app/shared/object-list/object-list.component.ts index 5161b75459..72bff54f59 100644 --- a/src/app/shared/object-list/object-list.component.ts +++ b/src/app/shared/object-list/object-list.component.ts @@ -76,6 +76,11 @@ export class ObjectListComponent { */ @Input() importConfig: { buttonLabel: string }; + /** + * If true the object list provided needs to be paginated using the `paginate` pipe + */ + @Input() listToPaginate = false; + /** * Whether or not the pagination should be rendered as simple previous and next buttons instead of the normal pagination */ diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts index 4a04061a5c..9448ed5939 100644 --- a/src/app/shared/object-list/themed-object-list.component.ts +++ b/src/app/shared/object-list/themed-object-list.component.ts @@ -44,6 +44,11 @@ export class ThemedObjectListComponent extends ThemedComponent - - - - - diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts index 35ba6076f9..4192fe5a9a 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.ts @@ -1,64 +1,24 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { shareReplay } from 'rxjs'; -import { - AccessControlArrayFormComponent -} from '../../../shared/access-control-array-form/access-control-array-form.component'; -import { CollectionAccessControlService } from './collection-access-control.service'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RemoteData } from '../../../core/data/remote-data'; +import { Community } from '../../../core/shared/community.model'; +import { ActivatedRoute } from '@angular/router'; +import { map } from 'rxjs/operators'; +import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; @Component({ selector: 'ds-collection-access-control', templateUrl: './collection-access-control.component.html', styleUrls: ['./collection-access-control.component.scss'], - providers: [CollectionAccessControlService] }) export class CollectionAccessControlComponent implements OnInit { + itemRD$: Observable>; - @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; - @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; - - constructor(private collectionAccessControlService: CollectionAccessControlService) {} - - state = initialState; - - dropdownData$ = this.collectionAccessControlService.dropdownData$.pipe( - shareReplay(1) - ); + constructor(private route: ActivatedRoute) {} ngOnInit(): void { - + this.itemRD$ = this.route.parent.parent.data.pipe( + map((data) => data.dso) + ).pipe(getFirstSucceededRemoteData()) as Observable>; } - - reset() { - this.bitstreamAccessCmp.reset(); - this.itemAccessCmp.reset(); - this.state = initialState; - } - - submit() { - const bitstreamAccess = this.bitstreamAccessCmp.getValue(); - const itemAccess = this.itemAccessCmp.getValue(); - - console.log('bitstreamAccess', bitstreamAccess); - console.log('itemAccess', itemAccess); - } - - handleStatusChange(type: 'item' | 'bitstream', active: boolean) { - if (type === 'bitstream') { - active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); - } else if (type === 'item') { - active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); - } - } - } - -const initialState = { - item: { - toggleStatus: false, - accessMode: '', - }, - bitstream: { - toggleStatus: false, - accessMode: '', - }, -}; diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts deleted file mode 100644 index 3267461fe6..0000000000 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Injectable } from '@angular/core'; -import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-options.model'; -import { Observable, of } from 'rxjs'; - -export interface AccessControlDropdownDataResponse { - id: string; - itemAccessConditionOptions: AccessControlItem[]; - bitstreamAccessConditionOptions: AccessControlItem[]; -} - -@Injectable() -export class CollectionAccessControlService { - dropdownData$: Observable = of(accessControlDropdownData); -} - -const accessControlDropdownData: AccessControlDropdownDataResponse = { - 'id': 'default', - 'itemAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ], - 'bitstreamAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ] -}; diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 5af7d3189a..9d703c0cf4 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -18,6 +18,9 @@ import { AccessControlArrayFormModule } from '../../shared/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; +import { + AccessControlFormContainerModule +} from '../../shared/access-control-form-container/access-control-form-container.component'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -33,6 +36,7 @@ import { UiSwitchModule } from 'ngx-ui-switch'; ComcolModule, AccessControlArrayFormModule, UiSwitchModule, + AccessControlFormContainerModule, ], declarations: [ EditCollectionPageComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html index 26f394620a..89999955eb 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -1,120 +1,6 @@ -
    -
    -
    -

    {{ 'community-access-control-title' | translate }}

    - -
    -
    -
    -

    - {{ 'access-control-item-header-toggle' | translate }} -

    - - -
    - -
    -
    - {{'access-control-mode' | translate}} -
    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    -
    {{'access-control-access-conditions' | translate}}
    - -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    - - - - -
    -
    -
    -

    - {{ 'access-control-bitstream-header-toggle' | translate }} -

    - -
    - -
    -
    - {{'access-control-mode' | translate}} -
    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    -
    {{'access-control-access-conditions' | translate}}
    - -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    - - - - -
    -
    - -
    - -
    - - -
    -
    -
    -
    + +

    {{'community-access-control-title' | translate }}

    +
    diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts index a25adb177c..b24069b9ac 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -1,63 +1,26 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { CommunityAccessControlService } from './community-access-control.service'; -import { shareReplay } from 'rxjs'; -import { - AccessControlArrayFormComponent -} from '../../../shared/access-control-array-form/access-control-array-form.component'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; +import { RemoteData } from '../../../core/data/remote-data'; +import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { ActivatedRoute } from '@angular/router'; +import { map } from 'rxjs/operators'; +import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; +import { Community } from '../../../core/shared/community.model'; @Component({ selector: 'ds-community-access-control', templateUrl: './community-access-control.component.html', styleUrls: ['./community-access-control.component.scss'], - providers: [CommunityAccessControlService] }) export class CommunityAccessControlComponent implements OnInit { + itemRD$: Observable>; - @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; - @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; - - constructor(private communityAccessControlService: CommunityAccessControlService) {} - - state = initialState; - - dropdownData$ = this.communityAccessControlService.dropdownData$.pipe( - shareReplay(1) - ); + constructor(private route: ActivatedRoute) {} ngOnInit(): void { - - } - - reset() { - this.bitstreamAccessCmp.reset(); - this.itemAccessCmp.reset(); - this.state = initialState; - } - - submit() { - const bitstreamAccess = this.bitstreamAccessCmp.getValue(); - const itemAccess = this.itemAccessCmp.getValue(); - - console.log('bitstreamAccess', bitstreamAccess); - console.log('itemAccess', itemAccess); - } - - handleStatusChange(type: 'item' | 'bitstream', active: boolean) { - if (type === 'bitstream') { - active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); - } else if (type === 'item') { - active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); - } + this.itemRD$ = this.route.parent.parent.data.pipe( + map((data) => data.dso) + ).pipe(getFirstSucceededRemoteData()) as Observable>; } } - -const initialState = { - item: { - toggleStatus: false, - accessMode: '', - }, - bitstream: { - toggleStatus: false, - accessMode: '', - }, -}; diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index 8aa52086ee..5ed2e401c6 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -15,6 +15,9 @@ import { UiSwitchModule } from 'ngx-ui-switch'; import { AccessControlArrayFormModule } from '../../shared/access-control-array-form/access-control-array-form.component'; +import { + AccessControlFormContainerModule +} from '../../shared/access-control-form-container/access-control-form-container.component'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -29,6 +32,7 @@ import { ResourcePoliciesModule, UiSwitchModule, AccessControlArrayFormModule, + AccessControlFormContainerModule, ], declarations: [ EditCommunityPageComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index fb46697c7d..322c6c6999 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { NgbTooltipModule, NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; import { SharedModule } from '../../shared/shared.module'; import { EditItemPageRoutingModule } from './edit-item-page.routing.module'; @@ -20,14 +20,22 @@ import { SearchPageModule } from '../../search-page/search-page.module'; import { ItemCollectionMapperComponent } from './item-collection-mapper/item-collection-mapper.component'; import { ItemRelationshipsComponent } from './item-relationships/item-relationships.component'; import { EditRelationshipComponent } from './item-relationships/edit-relationship/edit-relationship.component'; -import { EditRelationshipListComponent } from './item-relationships/edit-relationship-list/edit-relationship-list.component'; +import { + EditRelationshipListComponent +} from './item-relationships/edit-relationship-list/edit-relationship-list.component'; import { AbstractItemUpdateComponent } from './abstract-item-update/abstract-item-update.component'; import { ItemMoveComponent } from './item-move/item-move.component'; -import { ItemEditBitstreamBundleComponent } from './item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component'; +import { + ItemEditBitstreamBundleComponent +} from './item-bitstreams/item-edit-bitstream-bundle/item-edit-bitstream-bundle.component'; import { BundleDataService } from '../../core/data/bundle-data.service'; import { DragDropModule } from '@angular/cdk/drag-drop'; -import { ItemEditBitstreamDragHandleComponent } from './item-bitstreams/item-edit-bitstream-drag-handle/item-edit-bitstream-drag-handle.component'; -import { PaginatedDragAndDropBitstreamListComponent } from './item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component'; +import { + ItemEditBitstreamDragHandleComponent +} from './item-bitstreams/item-edit-bitstream-drag-handle/item-edit-bitstream-drag-handle.component'; +import { + PaginatedDragAndDropBitstreamListComponent +} from './item-bitstreams/item-edit-bitstream-bundle/paginated-drag-and-drop-bitstream-list/paginated-drag-and-drop-bitstream-list.component'; import { VirtualMetadataComponent } from './virtual-metadata/virtual-metadata.component'; import { ItemVersionHistoryComponent } from './item-version-history/item-version-history.component'; import { ItemAuthorizationsComponent } from './item-authorizations/item-authorizations.component'; @@ -43,10 +51,10 @@ import { AccessControlArrayFormModule } from '../../shared/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; -import { - ItemAccessControlSelectBitstreamsModalComponent -} from './item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module'; +import { + AccessControlFormContainerModule +} from '../../shared/access-control-form-container/access-control-form-container.component'; /** @@ -67,6 +75,7 @@ import { ResultsBackButtonModule } from '../../shared/results-back-button/result AccessControlArrayFormModule, UiSwitchModule, ResultsBackButtonModule, + AccessControlFormContainerModule, ], declarations: [ EditItemPageComponent, @@ -95,7 +104,6 @@ import { ResultsBackButtonModule } from '../../shared/results-back-button/result IdentifierDataComponent, ItemRegisterDoiComponent, ItemAccessControlComponent, - ItemAccessControlSelectBitstreamsModalComponent ], providers: [ BundleDataService, diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html index 6b65f2fe8b..7bef310717 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -1,159 +1,6 @@ -
    -
    -
    -

    {{ 'item-access-control-title' | translate }}

    - -
    -
    -
    -

    - {{ 'access-control-item-header-toggle' | translate }} -

    - - -
    - -
    -
    - {{ 'access-control-mode' | translate }} -
    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    -
    {{'access-control-access-conditions' | translate}}
    -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    - - - - -
    -
    -
    -

    - {{'access-control-bitstream-header-toggle' | translate}} -

    - - -
    - -
    -
    - {{'access-control-limit-to-specific' | translate}} -
    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    -
    - {{'access-control-mode' | translate}} -
    -
    -
    - - -
    -
    - - -
    -
    -
    - -
    -
    - {{'access-control-access-conditions' | translate}} -
    - -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    - - - - -
    -
    - -
    - -
    - - -
    -
    -
    -
    + +

    {{ 'item-access-control-title' | translate }}

    +
    diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts index 29f1d55ada..096c66577a 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -1,48 +1,24 @@ -import { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { - AccessControlArrayFormComponent -} from '../../../shared/access-control-array-form/access-control-array-form.component'; -import { concatMap, Observable, shareReplay } from 'rxjs'; +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs'; import { ItemAccessControlService } from './item-access-control.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { - ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, - ItemAccessControlSelectBitstreamsModalComponent -} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; -import { map, take } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { Item } from '../../../core/shared/item.model'; import { ActivatedRoute } from '@angular/router'; import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; -import { ListableObject } from '../../../shared/object-collection/shared/listable-object.model'; @Component({ selector: 'ds-item-access-control', templateUrl: './item-access-control.component.html', styleUrls: [ './item-access-control.component.scss' ], - providers: [ ItemAccessControlService ] }) -export class ItemAccessControlComponent implements OnInit, OnDestroy { +export class ItemAccessControlComponent implements OnInit { itemRD$: Observable>; - @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; - @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; - - constructor( - private itemAccessControlService: ItemAccessControlService, - private selectableListService: SelectableListService, - protected modalService: NgbModal, - private route: ActivatedRoute, - private cdr: ChangeDetectorRef - ) {} - - state = initialState; - - dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( - shareReplay(1) - ); + constructor(private route: ActivatedRoute) {} ngOnInit(): void { this.itemRD$ = this.route.parent.parent.data.pipe( @@ -50,59 +26,4 @@ export class ItemAccessControlComponent implements OnInit, OnDestroy { ).pipe(getFirstSucceededRemoteData()) as Observable>; } - reset() { - this.bitstreamAccessCmp.reset(); - this.itemAccessCmp.reset(); - this.state = initialState; - } - - submit() { - const bitstreamAccess = this.bitstreamAccessCmp.getValue(); - const itemAccess = this.itemAccessCmp.getValue(); - - this.itemAccessControlService.execute({ - bitstreamAccess, - itemAccess, - state: this.state - }); - } - - handleStatusChange(type: 'item' | 'bitstream', active: boolean) { - if (type === 'bitstream') { - active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); - } else if (type === 'item') { - active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); - } - } - - openSelectBitstreamsModal(item: Item) { - const ref = this.modalService.open(ItemAccessControlSelectBitstreamsModalComponent); - ref.componentInstance.selectedBitstreams = this.state.bitstream.selectedBitstreams; - ref.componentInstance.item = item; - - ref.closed.pipe( - concatMap(() => this.selectableListService.getSelectableList(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID)), - take(1) - ).subscribe((list) => { - this.state.bitstream.selectedBitstreams = list.selection; - this.cdr.detectChanges(); - }); - } - - ngOnDestroy(): void { - this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); - } } - -const initialState = { - item: { - toggleStatus: false, - accessMode: '', - }, - bitstream: { - toggleStatus: false, - accessMode: '', - changesLimit: '', // 'all' | 'selected' - selectedBitstreams: [] as ListableObject[], - }, -}; diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts index 57b28f81b0..6bdc523aa8 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts @@ -8,7 +8,7 @@ export interface AccessControlDropdownDataResponse { bitstreamAccessConditionOptions: AccessControlItem[]; } -@Injectable() +@Injectable({ providedIn: 'root' }) export class ItemAccessControlService { dropdownData$: Observable = of(accessControlDropdownData); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html new file mode 100644 index 0000000000..bcf385f0d4 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -0,0 +1,163 @@ +
    +
    +
    + + + + + + +
    +
    +
    +

    + {{ 'access-control-item-header-toggle' | translate }} +

    + + +
    + +
    +
    + {{ 'access-control-mode' | translate }} +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    {{'access-control-access-conditions' | translate}}
    +
    + {{'access-control-no-access-conditions-warning-message' | translate}} +
    +
    + + + + +
    +
    +
    +

    + {{'access-control-bitstream-header-toggle' | translate}} +

    + + +
    + +
    +
    + {{'access-control-limit-to-specific' | translate}} +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + {{'access-control-mode' | translate}} +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + {{'access-control-access-conditions' | translate}} +
    + +
    + {{'access-control-no-access-conditions-warning-message' | translate}} +
    +
    + + + + +
    +
    + +
    + +
    + + +
    +
    +
    +
    diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss b/src/app/shared/access-control-form-container/access-control-form-container.component.scss similarity index 100% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss rename to src/app/shared/access-control-form-container/access-control-form-container.component.scss diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts new file mode 100644 index 0000000000..871e301209 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccessControlFormContainerComponent } from './access-control-form-container.component'; + +describe('AccessControlFormContainerComponent', () => { + let component: AccessControlFormContainerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AccessControlFormContainerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccessControlFormContainerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts new file mode 100644 index 0000000000..00030f8474 --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -0,0 +1,119 @@ +import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; +import { concatMap, shareReplay } from 'rxjs'; +import { RemoteData } from '../../core/data/remote-data'; +import { Item } from '../../core/shared/item.model'; +import { + AccessControlArrayFormComponent, + AccessControlArrayFormModule +} from '../access-control-array-form/access-control-array-form.component'; +import { + ItemAccessControlService +} from '../../item-page/edit-item-page/item-access-control/item-access-control.service'; +import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { take } from 'rxjs/operators'; +import { CommonModule } from '@angular/common'; +import { ListableObject } from '../object-collection/shared/listable-object.model'; +import { SharedModule } from '../shared.module'; +import { TranslateModule } from '@ngx-translate/core'; +import { UiSwitchModule } from 'ngx-ui-switch'; +import { DSpaceObject } from '../../core/shared/dspace-object.model'; +import { + ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, + ItemAccessControlSelectBitstreamsModalComponent +} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; + +@Component({ + selector: 'ds-access-control-form-container', + templateUrl: './access-control-form-container.component.html', + styleUrls: ['./access-control-form-container.component.scss'] +}) +export class AccessControlFormContainerComponent { + + @Input() showLimitToSpecificBitstreams = false; + @Input() itemRD: RemoteData; + + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; + @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + + constructor( + private itemAccessControlService: ItemAccessControlService, + private selectableListService: SelectableListService, + protected modalService: NgbModal, + private cdr: ChangeDetectorRef + ) {} + + state = initialState; + + dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( + shareReplay(1) + ); + + reset() { + this.bitstreamAccessCmp.reset(); + this.itemAccessCmp.reset(); + this.state = initialState; + } + + submit() { + const bitstreamAccess = this.bitstreamAccessCmp.getValue(); + const itemAccess = this.itemAccessCmp.getValue(); + + this.itemAccessControlService.execute({ + bitstreamAccess, + itemAccess, + state: this.state + }); + } + + handleStatusChange(type: 'item' | 'bitstream', active: boolean) { + if (type === 'bitstream') { + active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); + } else if (type === 'item') { + active ? this.itemAccessCmp.enable() : this.itemAccessCmp.disable(); + } + } + + openSelectBitstreamsModal(item: Item) { + const ref = this.modalService.open(ItemAccessControlSelectBitstreamsModalComponent); + ref.componentInstance.selectedBitstreams = this.state.bitstream.selectedBitstreams; + ref.componentInstance.item = item; + + ref.closed.pipe( + concatMap(() => this.selectableListService.getSelectableList(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID)), + take(1) + ).subscribe((list) => { + this.state.bitstream.selectedBitstreams = list.selection; + this.cdr.detectChanges(); + }); + } + + // eslint-disable-next-line @angular-eslint/use-lifecycle-interface + ngOnDestroy(): void { + this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); + } +} + + +const initialState = { + item: { + toggleStatus: false, + accessMode: '', + }, + bitstream: { + toggleStatus: false, + accessMode: '', + changesLimit: '', // 'all' | 'selected' + selectedBitstreams: [] as ListableObject[], + }, +}; + + +@NgModule({ + imports: [ CommonModule, AccessControlArrayFormModule, SharedModule, TranslateModule, UiSwitchModule ], + exports: [AccessControlFormContainerComponent], + declarations: [ AccessControlFormContainerComponent, ItemAccessControlSelectBitstreamsModalComponent ], +}) +export class AccessControlFormContainerModule {} + + diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html similarity index 100% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html rename to src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html diff --git a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts similarity index 100% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts rename to src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.spec.ts diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts similarity index 69% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts rename to src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts index dbae803c44..171b1d59c1 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts +++ b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts @@ -1,17 +1,17 @@ import { Component, Input, OnInit } from '@angular/core'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { PaginationService } from '../../../../core/pagination/pagination.service'; -import { TranslateService } from '@ngx-translate/core'; -import { BitstreamDataService } from '../../../../core/data/bitstream-data.service'; import { BehaviorSubject } from 'rxjs'; -import { Item } from '../../../../core/shared/item.model'; -import { getFirstCompletedRemoteData } from '../../../../core/shared/operators'; -import { PaginatedList } from '../../../../core/data/paginated-list.model'; -import { Bitstream } from '../../../../core/shared/bitstream.model'; -import { RemoteData } from '../../../../core/data/remote-data'; -import { PaginationComponentOptions } from '../../../../shared/pagination/pagination-component-options.model'; -import { hasValue } from '../../../../shared/empty.util'; -import { Context } from '../../../../core/shared/context.model'; +import { PaginatedList } from 'src/app/core/data/paginated-list.model'; +import { RemoteData } from 'src/app/core/data/remote-data'; +import { Bitstream } from 'src/app/core/shared/bitstream.model'; +import { Context } from 'src/app/core/shared/context.model'; +import { PaginationComponentOptions } from '../../pagination/pagination-component-options.model'; +import { Item } from '../../../core/shared/item.model'; +import { BitstreamDataService } from '../../../core/data/bitstream-data.service'; +import { PaginationService } from '../../../core/pagination/pagination.service'; +import { TranslateService } from '@ngx-translate/core'; +import { hasValue } from '../../empty.util'; +import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; export const ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID = 'item-access-control-select-bitstreams' From 723e1e1278a3c5a12f02d5b0375cc53da3999614 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 15:11:44 +0200 Subject: [PATCH 606/833] [CST-9636] Make access control form container reusable --- .../browse/bulk-access-browse.component.ts | 54 +++++++++++++++++-- .../item-access-control.component.ts | 3 -- ...cess-control-form-container.component.html | 11 ++-- ...access-control-form-container.component.ts | 45 ++++++++++++---- .../bulk-access-control.service.ts} | 25 +++++++-- 5 files changed, 110 insertions(+), 28 deletions(-) rename src/app/{item-page/edit-item-page/item-access-control/item-access-control.service.ts => shared/access-control-form-container/bulk-access-control.service.ts} (66%) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index a91cdf35df..e6dba0cafe 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -16,7 +16,56 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio @Component({ selector: 'ds-bulk-access-browse', - templateUrl: './bulk-access-browse.component.html', + template: ` + + + +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + `, styleUrls: ['./bulk-access-browse.component.scss'], providers: [ { @@ -44,8 +93,7 @@ export class BulkAccessBrowseComponent implements OnInit { paginationOptions: PaginationComponentOptions; private subs: Subscription[] = []; - constructor(private selectableListService: SelectableListService) { - } + constructor(private selectableListService: SelectableListService) {} ngOnInit(): void { this.paginationOptions = Object.assign(new PaginationComponentOptions(), { diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts index 096c66577a..874b624494 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.ts @@ -1,13 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { ItemAccessControlService } from './item-access-control.service'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; import { RemoteData } from '../../../core/data/remote-data'; import { Item } from '../../../core/shared/item.model'; import { ActivatedRoute } from '@angular/router'; -import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; @Component({ selector: 'ds-item-access-control', diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index bcf385f0d4..71175ce588 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -3,10 +3,6 @@
    - - - -
    @@ -95,7 +91,8 @@ @@ -148,9 +145,9 @@
    -
    +
    -
    +
    diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 00030f8474..a2e9cb08ab 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -6,9 +6,7 @@ import { AccessControlArrayFormComponent, AccessControlArrayFormModule } from '../access-control-array-form/access-control-array-form.component'; -import { - ItemAccessControlService -} from '../../item-page/edit-item-page/item-access-control/item-access-control.service'; +import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { take } from 'rxjs/operators'; @@ -26,18 +24,21 @@ import { @Component({ selector: 'ds-access-control-form-container', templateUrl: './access-control-form-container.component.html', - styleUrls: ['./access-control-form-container.component.scss'] + styleUrls: [ './access-control-form-container.component.scss' ], + exportAs: 'dsAccessControlForm' }) export class AccessControlFormContainerComponent { @Input() showLimitToSpecificBitstreams = false; @Input() itemRD: RemoteData; + @Input() hideSubmit = false; + @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; constructor( - private itemAccessControlService: ItemAccessControlService, + private bulkAccessControlService: BulkAccessControlService, private selectableListService: SelectableListService, protected modalService: NgbModal, private cdr: ChangeDetectorRef @@ -45,10 +46,18 @@ export class AccessControlFormContainerComponent { state = initialState; - dropdownData$ = this.itemAccessControlService.dropdownData$.pipe( + dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( shareReplay(1) ); + getFormValue() { + return { + bitstream: this.bitstreamAccessCmp.getValue(), + item: this.itemAccessCmp.getValue(), + state: this.state + }; + } + reset() { this.bitstreamAccessCmp.reset(); this.itemAccessCmp.reset(); @@ -59,11 +68,18 @@ export class AccessControlFormContainerComponent { const bitstreamAccess = this.bitstreamAccessCmp.getValue(); const itemAccess = this.itemAccessCmp.getValue(); - this.itemAccessControlService.execute({ + const { file } = this.bulkAccessControlService.createPayloadFile({ bitstreamAccess, itemAccess, state: this.state }); + + this.bulkAccessControlService.executeScript( + [ this.itemRD.payload.uuid ], + file + ).pipe(take(1)).subscribe((res) => { + console.log('success', res); + }); } handleStatusChange(type: 'item' | 'bitstream', active: boolean) { @@ -110,9 +126,18 @@ const initialState = { @NgModule({ - imports: [ CommonModule, AccessControlArrayFormModule, SharedModule, TranslateModule, UiSwitchModule ], - exports: [AccessControlFormContainerComponent], - declarations: [ AccessControlFormContainerComponent, ItemAccessControlSelectBitstreamsModalComponent ], + imports: [ + CommonModule, + AccessControlArrayFormModule, + SharedModule, + TranslateModule, + UiSwitchModule + ], + declarations: [ + AccessControlFormContainerComponent, + ItemAccessControlSelectBitstreamsModalComponent + ], + exports: [ AccessControlFormContainerComponent ], }) export class AccessControlFormContainerModule {} diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts similarity index 66% rename from src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts rename to src/app/shared/access-control-form-container/bulk-access-control.service.ts index 6bdc523aa8..85ec05cd60 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -1,6 +1,8 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; -import { AccessControlItem } from '../../../core/shared/bulk-access-condition-options.model'; +import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; +import { ScriptDataService } from '../../core/data/processes/script-data.service'; +import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; export interface AccessControlDropdownDataResponse { id: string; @@ -9,11 +11,12 @@ export interface AccessControlDropdownDataResponse { } @Injectable({ providedIn: 'root' }) -export class ItemAccessControlService { +export class BulkAccessControlService { + constructor(private scriptService: ScriptDataService) {} + dropdownData$: Observable = of(accessControlDropdownData); - - execute(payload: any) { + createPayloadFile(payload: any) { console.log('execute', payload); const blob = new Blob([JSON.stringify(payload, null, 2)], { @@ -25,7 +28,19 @@ export class ItemAccessControlService { }); const url = URL.createObjectURL(file); - window.open(url, '_blank'); + window.open(url, '_blank'); // remove this later + + return { url, file }; + } + + executeScript(uuids: string[], file: File) { + console.log('execute', { uuids, file }); + + const params: ProcessParameter[] = [ + { name: 'uuid', value: uuids.join(',') }, + ]; + + return this.scriptService.invoke('bulk-access-control', params, [file]); } } From 35d4561d53f75c40c307c01a084d50fb780020b0 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 15:12:55 +0200 Subject: [PATCH 607/833] [CST-9636] WIP improve bulk access page --- .../browse/bulk-access-browse.component.html | 23 +++-- .../browse/bulk-access-browse.component.ts | 89 +++++++++++++++---- .../bulk-access/bulk-access.component.html | 4 +- .../bulk-access/bulk-access.component.ts | 6 ++ .../bulk-access-settings.component.ts | 7 +- 5 files changed, 100 insertions(+), 29 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html index 760134aba5..9851aab835 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -22,7 +22,7 @@ {{'admin.access-control.bulk-access-browse.search.header' | translate}}
    - @@ -30,15 +30,20 @@
  • - {{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }} + + {{'admin.access-control.bulk-access-browse.selected.header' | translate: {number: ((objectsSelected$ | async)?.payload?.totalElements) ? (objectsSelected$ | async)?.payload?.totalElements : '0'} }} + - +
  • diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index a91cdf35df..ed94398f6d 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; @@ -13,6 +13,7 @@ import { ListableObject } from '../../../shared/object-collection/shared/listabl import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; import { PageInfo } from '../../../core/shared/page-info.model'; import { PaginationComponentOptions } from '../../../shared/pagination/pagination-component-options.model'; +import { hasValue } from '../../../shared/empty.util'; @Component({ selector: 'ds-bulk-access-browse', @@ -25,43 +26,97 @@ import { PaginationComponentOptions } from '../../../shared/pagination/paginatio } ] }) -export class BulkAccessBrowseComponent implements OnInit { +export class BulkAccessBrowseComponent implements OnInit, OnDestroy { + + /** + * The selection list id + */ + @Input() listId!: string; + /** * The active nav id */ activateId = 'search'; - /** - * The selection list id - */ - listId: string = 'bulk-access-list'; - /** * The list of the objects already selected */ objectsSelected$: BehaviorSubject>> = new BehaviorSubject>>(null); - paginationOptions: PaginationComponentOptions; + /** + * The pagination options object used for the list of selected elements + */ + paginationOptions$: BehaviorSubject = new BehaviorSubject(Object.assign(new PaginationComponentOptions(), { + id: 'bas', + pageSize: 5, + currentPage: 1 + })); + + /** + * Array to track all subscriptions and unsubscribe them onDestroy + */ private subs: Subscription[] = []; constructor(private selectableListService: SelectableListService) { } + /** + * Subscribe to selectable list updates + */ ngOnInit(): void { - this.paginationOptions = Object.assign(new PaginationComponentOptions(), { - id: 'elp', - pageSize: 10, - currentPage: 1 - }); + this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - map((list: SelectableListState) => { - console.log(list); - return createSuccessfulRemoteDataObject(buildPaginatedList(new PageInfo(), list?.selection || [])) - }) + map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) ).subscribe(this.objectsSelected$) ) } + pageNext() { + this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { + currentPage: this.paginationOptions$.value.currentPage + 1 + })); + console.log(this.paginationOptions$.value); + } + + pagePrev() { + this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { + currentPage: this.paginationOptions$.value.currentPage - 1 + })); + console.log(this.paginationOptions$.value); + } + + private calculatePageCount(pageSize, totalCount = 0) { + // we suppose that if we have 0 items we want 1 empty page + return totalCount < pageSize ? 1 : Math.ceil(totalCount / pageSize); + }; + + /** + * Generate The RemoteData object containing the list of the selected elements + * @param list + * @private + */ + private generatePaginatedListBySelectedElements(list: SelectableListState): RemoteData> { + const pageInfo = new PageInfo({ + elementsPerPage: this.paginationOptions$.value.pageSize, + totalElements: list?.selection.length, + totalPages: this.calculatePageCount(this.paginationOptions$.value.pageSize, list?.selection.length), + currentPage: this.paginationOptions$.value.currentPage + }); + if (pageInfo.currentPage > pageInfo.totalPages) { + pageInfo.currentPage = pageInfo.totalPages; + this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { + currentPage: pageInfo.currentPage + })); + } + return createSuccessfulRemoteDataObject(buildPaginatedList(pageInfo, list?.selection || [])); + } + + ngOnDestroy(): void { + this.subs + .filter((sub) => hasValue(sub)) + .forEach((sub) => sub.unsubscribe()); + this.selectableListService.deselectAll(this.listId) + } } diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html index e0eafb6e36..12ab88cd1a 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.html +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -1,8 +1,8 @@
    - +
    - +
    diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index 9e45b2c59b..bc0d293e61 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -7,6 +7,12 @@ import { Component, OnInit } from '@angular/core'; }) export class BulkAccessComponent implements OnInit { + + /** + * The selection list id + */ + listId: string = 'bulk-access-list'; + constructor() { } ngOnInit(): void { diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts index 631b786b01..cad9e5b981 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ selector: 'ds-bulk-access-settings', @@ -7,6 +7,11 @@ import { Component, OnInit } from '@angular/core'; }) export class BulkAccessSettingsComponent implements OnInit { + /** + * The selection list id + */ + @Input() listId!: string; + constructor() { } ngOnInit(): void { From 5455c79563d75b69e80240ad981f4e7c684d541d Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 15:53:00 +0200 Subject: [PATCH 608/833] [CST-9636] WIP add bulk-access-config-data.service --- .../browse/bulk-access-browse.component.ts | 51 +--------------- .../community-access-control.service.ts | 59 ------------------- .../bulk-access-config-data.service.ts} | 18 +++--- src/app/core/config/config-data.service.ts | 8 ++- .../bulk-access-condition-options.model.ts | 38 ++++++++++++ .../bulk-access-condition-options.model.ts | 45 -------------- .../access-control-array-form.component.html | 6 +- .../access-control-array-form.component.ts | 29 ++++++--- .../control-max-end-date.pipe.ts | 4 +- .../control-max-start-date.pipe.ts | 5 +- ...cess-control-form-container.component.html | 10 +--- ...access-control-form-container.component.ts | 17 ++++-- .../bulk-access-control.service.ts | 51 +--------------- 13 files changed, 97 insertions(+), 244 deletions(-) delete mode 100644 src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts rename src/app/core/{data/bulk-access-condition-options.service.ts => config/bulk-access-config-data.service.ts} (53%) create mode 100644 src/app/core/config/models/bulk-access-condition-options.model.ts delete mode 100644 src/app/core/shared/bulk-access-condition-options.model.ts diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 43adae7ec0..7cbb8740a7 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -17,56 +17,7 @@ import { hasValue } from '../../../shared/empty.util'; @Component({ selector: 'ds-bulk-access-browse', - template: ` - - - -
    - -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    - `, + templateUrl: 'bulk-access-browse.component.html', styleUrls: ['./bulk-access-browse.component.scss'], providers: [ { diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts deleted file mode 100644 index 89534683b7..0000000000 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.service.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Injectable } from '@angular/core'; -import { of } from 'rxjs'; -import { BulkAccessConditionOptionsService } from '../../../core/data/bulk-access-condition-options.service'; -import { BulkAccessConditionOptions } from '../../../core/shared/bulk-access-condition-options.model'; - - -@Injectable() -export class CommunityAccessControlService { - constructor(private service: BulkAccessConditionOptionsService) {} - - dropdownData$ = of(accessControlDropdownData); - - // dropdownData$ = this.service.getAll().pipe( - // getAllSucceededRemoteData(), - // filter((data) => data.hasSucceeded), - // map((data) => data.payload) - // ); -} - -const accessControlDropdownData: BulkAccessConditionOptions = { - _links: { self: undefined }, type: undefined, uuid: '', - 'id': 'default', - 'itemAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ], - 'bitstreamAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ] -}; diff --git a/src/app/core/data/bulk-access-condition-options.service.ts b/src/app/core/config/bulk-access-config-data.service.ts similarity index 53% rename from src/app/core/data/bulk-access-condition-options.service.ts rename to src/app/core/config/bulk-access-config-data.service.ts index 30e0402dbf..f27b59eee1 100644 --- a/src/app/core/data/bulk-access-condition-options.service.ts +++ b/src/app/core/config/bulk-access-config-data.service.ts @@ -3,16 +3,16 @@ import { Observable } from 'rxjs'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { RemoteData } from './remote-data'; -import { RequestService } from './request.service'; -import { IdentifiableDataService } from './base/identifiable-data.service'; -import { BulkAccessConditionOptions } from '../shared/bulk-access-condition-options.model'; +import { RemoteData } from '../data/remote-data'; +import { RequestService } from '../data/request.service'; +import { BulkAccessConditionOptions } from './models/bulk-access-condition-options.model'; +import { ConfigDataService } from './config-data.service'; @Injectable({ providedIn: 'root' }) /** * Data Service responsible for retrieving Bulk Access Condition Options from the REST API */ -export class BulkAccessConditionOptionsService extends IdentifiableDataService { +export class BulkAccessConfigDataService extends ConfigDataService { constructor( protected requestService: RequestService, @@ -23,11 +23,7 @@ export class BulkAccessConditionOptionsService extends IdentifiableDataService> { - return this.findByHref(this.halService.getEndpoint(this.linkPath)); + findByPropertyName(name: string): Observable> { + return this.findById(name) as Observable>; } - - // findByPropertyName(name: string): Observable> { - // return this.findById(name); - // } } diff --git a/src/app/core/config/config-data.service.ts b/src/app/core/config/config-data.service.ts index 9ef2f11ad1..f8f46435c5 100644 --- a/src/app/core/config/config-data.service.ts +++ b/src/app/core/config/config-data.service.ts @@ -4,13 +4,13 @@ import { RemoteData } from '../data/remote-data'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; import { map } from 'rxjs/operators'; -import { BaseDataService } from '../data/base/base-data.service'; +import { IdentifiableDataService } from '../data/base/identifiable-data.service'; /** * Abstract data service to retrieve configuration objects from the REST server. * Common logic for configuration objects should be implemented here. */ -export abstract class ConfigDataService extends BaseDataService { +export abstract class ConfigDataService extends IdentifiableDataService { /** * Returns an observable of {@link RemoteData} of an object, based on an href, with a list of * {@link FollowLinkConfig}, to automatically resolve {@link HALLink}s of the object @@ -37,4 +37,8 @@ export abstract class ConfigDataService extends BaseDataService { }), ); } + + findByName(name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { + return super.findById(name, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); + } } diff --git a/src/app/core/config/models/bulk-access-condition-options.model.ts b/src/app/core/config/models/bulk-access-condition-options.model.ts new file mode 100644 index 0000000000..f10965ea31 --- /dev/null +++ b/src/app/core/config/models/bulk-access-condition-options.model.ts @@ -0,0 +1,38 @@ +import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { typedObject } from '../../cache/builders/build-decorators'; +import { excludeFromEquals } from '../../utilities/equals.decorators'; +import { ResourceType } from '../../shared/resource-type'; +import { HALLink } from '../../shared/hal-link.model'; +import { ConfigObject } from './config.model'; +import { AccessesConditionOption } from './config-accesses-conditions-options.model'; + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); + +/** + * Model class for a bulk access condition options + */ +@typedObject +export class BulkAccessConditionOptions extends ConfigObject { + static type = BULK_ACCESS_CONDITION_OPTIONS; + + /** + * The object type + */ + @excludeFromEquals + @autoserialize + type: ResourceType; + + @autoserializeAs(String, 'name') + uuid: string; + + @autoserialize + id: string; + + @deserialize + itemAccessConditionOptions: AccessesConditionOption[]; + + @deserialize + bitstreamAccessConditionOptions: AccessesConditionOption[]; + + _links: { self: HALLink }; +} diff --git a/src/app/core/shared/bulk-access-condition-options.model.ts b/src/app/core/shared/bulk-access-condition-options.model.ts deleted file mode 100644 index a1c8fe0702..0000000000 --- a/src/app/core/shared/bulk-access-condition-options.model.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; -import { typedObject } from '../cache/builders/build-decorators'; -import { excludeFromEquals } from '../utilities/equals.decorators'; -import { ResourceType } from './resource-type'; -import { CacheableObject } from '../cache/cacheable-object.model'; -import { HALLink } from './hal-link.model'; - -export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); - -/** - * Model class for a bulk access condition options - */ -@typedObject -export class BulkAccessConditionOptions implements CacheableObject { - static type = BULK_ACCESS_CONDITION_OPTIONS; - - /** - * The object type - */ - @excludeFromEquals - @autoserialize - type: ResourceType; - - @autoserializeAs(String, 'name') - uuid: string; - - @autoserialize - id: string; - - @deserialize - itemAccessConditionOptions: AccessControlItem[]; - - @deserialize - bitstreamAccessConditionOptions: AccessControlItem[]; - - _links: { self: HALLink }; -} - -export interface AccessControlItem { - name: string - hasStartDate?: boolean - maxStartDate?: string - hasEndDate?: boolean - maxEndDate?: string -} diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-array-form/access-control-array-form.component.html index 24dcc11120..5d0fb6d97e 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.html @@ -7,7 +7,7 @@
    @@ -20,7 +20,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="startDate" - [minDate]="control | maxStartDate: dropdownOptions" + [minDate]="control | maxStartDate: (dropdownData$ | async)" ngbDatepicker #d="ngbDatepicker" /> @@ -40,7 +40,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="endDate" - [maxDate]="control | maxEndDate: dropdownOptions" + [maxDate]="control | maxEndDate: (dropdownData$ | async)" ngbDatepicker #d1="ngbDatepicker" /> diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index ace507a3a6..13d13375b2 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, NgModule, OnDestroy, OnInit } from '@angular/core'; +import { Component, NgModule, OnDestroy, OnInit } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormArray, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; @@ -6,9 +6,13 @@ import { TranslateModule } from '@ngx-translate/core'; import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; -import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; -import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; + +import { distinctUntilChanged, map, shareReplay, takeUntil, tap } from 'rxjs/operators'; import { Subject } from 'rxjs'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { RemoteData } from '../../core/data/remote-data'; +import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; +import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; // will be used on the form value @@ -25,8 +29,6 @@ export interface AccessControlItemValue { exportAs: 'accessControlArrayForm' }) export class AccessControlArrayFormComponent implements OnInit, OnDestroy { - @Input() dropdownOptions: AccessControlItem[] = []; - @Input() accessControlItems: AccessControlItemValue[] = []; private destroy$ = new Subject(); @@ -34,17 +36,28 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { accessControl: this.fb.array([]) }); - constructor(private fb: FormBuilder) { + constructor(private bulkAccessConfigService: BulkAccessConfigDataService, + private fb: FormBuilder) { } + dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( + getFirstCompletedRemoteData(), + map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), + shareReplay(1), + tap(console.log) + ); + ngOnInit(): void { - if (this.accessControlItems.length === 0) { + // console.log(this.dropdownOptions); +/* if (this.accessControlItems.length === 0) { this.addAccessControlItem(); } else { for (const item of this.accessControlItems) { this.addAccessControlItem(item.itemName); } - } + }*/ + + this.addAccessControlItem(); this.accessControl.valueChanges .pipe( diff --git a/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts index 810f3e71d0..86ba3b996a 100644 --- a/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts +++ b/src/app/shared/access-control-array-form/control-max-end-date.pipe.ts @@ -1,7 +1,7 @@ import { Pipe, PipeTransform } from '@angular/core'; import { AbstractControl } from '@angular/forms'; import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; -import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-options.model'; +import { AccessesConditionOption } from '../../core/config/models/config-accesses-conditions-options.model'; @Pipe({ // eslint-disable-next-line @angular-eslint/pipe-prefix @@ -9,7 +9,7 @@ import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-opt pure: false }) export class ControlMaxEndDatePipe implements PipeTransform { - transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + transform(control: AbstractControl, dropdownOptions: AccessesConditionOption[]): NgbDateStruct | null { const { itemName } = control.value; const item = dropdownOptions.find((x) => x.name === itemName); if (!item?.hasEndDate) { diff --git a/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts index 458cb36465..77be77b029 100644 --- a/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts +++ b/src/app/shared/access-control-array-form/control-max-start-date.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; import { AbstractControl } from '@angular/forms'; import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap/datepicker/ngb-date-struct'; -import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-options.model'; +import { AccessesConditionOption } from '../../core/config/models/config-accesses-conditions-options.model'; + @Pipe({ // eslint-disable-next-line @angular-eslint/pipe-prefix @@ -9,7 +10,7 @@ import { AccessControlItem } from 'src/app/core/shared/bulk-access-condition-opt pure: false }) export class ControlMaxStartDatePipe implements PipeTransform { - transform(control: AbstractControl, dropdownOptions: AccessControlItem[]): NgbDateStruct | null { + transform(control: AbstractControl, dropdownOptions: AccessesConditionOption[]): NgbDateStruct | null { const { itemName } = control.value; const item = dropdownOptions.find((x) => x.name === itemName); if (!item?.hasStartDate) { diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 71175ce588..70f1b1e6cd 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -48,10 +48,7 @@
    - - +
    @@ -137,10 +134,7 @@
    - - +
    diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index a2e9cb08ab..0807236796 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; -import { concatMap, shareReplay } from 'rxjs'; +import { concatMap } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; import { @@ -20,6 +20,7 @@ import { ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, ItemAccessControlSelectBitstreamsModalComponent } from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; +import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; @Component({ selector: 'ds-access-control-form-container', @@ -27,7 +28,7 @@ import { styleUrls: [ './access-control-form-container.component.scss' ], exportAs: 'dsAccessControlForm' }) -export class AccessControlFormContainerComponent { +export class AccessControlFormContainerComponent implements OnInit { @Input() showLimitToSpecificBitstreams = false; @Input() itemRD: RemoteData; @@ -38,6 +39,7 @@ export class AccessControlFormContainerComponent { @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; constructor( + private bulkAccessConfigService: BulkAccessConfigDataService, private bulkAccessControlService: BulkAccessControlService, private selectableListService: SelectableListService, protected modalService: NgbModal, @@ -46,9 +48,16 @@ export class AccessControlFormContainerComponent { state = initialState; - dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( +/* dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( + getFirstCompletedRemoteData(), + map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), + shareReplay(1), + tap(console.log) + );*/ + +/* dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( shareReplay(1) - ); + );*/ getFormValue() { return { diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 85ec05cd60..1cce44d828 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -1,21 +1,12 @@ import { Injectable } from '@angular/core'; -import { Observable, of } from 'rxjs'; -import { AccessControlItem } from '../../core/shared/bulk-access-condition-options.model'; + import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; -export interface AccessControlDropdownDataResponse { - id: string; - itemAccessConditionOptions: AccessControlItem[]; - bitstreamAccessConditionOptions: AccessControlItem[]; -} - @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor(private scriptService: ScriptDataService) {} - dropdownData$: Observable = of(accessControlDropdownData); - createPayloadFile(payload: any) { console.log('execute', payload); @@ -43,43 +34,3 @@ export class BulkAccessControlService { return this.scriptService.invoke('bulk-access-control', params, [file]); } } - -const accessControlDropdownData: AccessControlDropdownDataResponse = { - 'id': 'default', - 'itemAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2023-05-12T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ], - 'bitstreamAccessConditionOptions': [ - { - 'name': 'openaccess' - }, - { - 'name': 'administrator' - }, - { - 'name': 'embargo', - 'hasStartDate': true, - 'maxStartDate': '2018-06-24T00:40:54.970+0000' - }, - { - 'name': 'lease', - 'hasEndDate': true, - 'maxEndDate': '2017-12-24T00:40:54.970+0000' - } - ] -}; From 4bf10c880a4b4ace19b1ea692fc85f18981ed512 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 16:02:01 +0200 Subject: [PATCH 609/833] [CST-9636] Refactor access control array form to accept dropdown options --- .../access-control-array-form.component.html | 6 +-- .../access-control-array-form.component.ts | 37 +++---------------- ...cess-control-form-container.component.html | 18 +++++---- ...access-control-form-container.component.ts | 20 +++++----- 4 files changed, 28 insertions(+), 53 deletions(-) diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-array-form/access-control-array-form.component.html index 5d0fb6d97e..24dcc11120 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.html @@ -7,7 +7,7 @@
    @@ -20,7 +20,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="startDate" - [minDate]="control | maxStartDate: (dropdownData$ | async)" + [minDate]="control | maxStartDate: dropdownOptions" ngbDatepicker #d="ngbDatepicker" /> @@ -40,7 +40,7 @@ placeholder="yyyy-mm-dd" name="dp" formControlName="endDate" - [maxDate]="control | maxEndDate: (dropdownData$ | async)" + [maxDate]="control | maxEndDate: dropdownOptions" ngbDatepicker #d1="ngbDatepicker" /> diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index 13d13375b2..090b22d94c 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -1,4 +1,4 @@ -import { Component, NgModule, OnDestroy, OnInit } from '@angular/core'; +import { Component, Input, NgModule, OnDestroy, OnInit } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormArray, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; @@ -7,21 +7,11 @@ import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; -import { distinctUntilChanged, map, shareReplay, takeUntil, tap } from 'rxjs/operators'; +import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; -import { getFirstCompletedRemoteData } from '../../core/shared/operators'; -import { RemoteData } from '../../core/data/remote-data'; -import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; -import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; +import { AccessesConditionOption } from '../../core/config/models/config-accesses-conditions-options.model'; -// will be used on the form value -export interface AccessControlItemValue { - itemName: string | null; // item name - startDate?: string; - endDate?: string; -} - @Component({ selector: 'ds-access-control-array-form', templateUrl: './access-control-array-form.component.html', @@ -29,6 +19,7 @@ export interface AccessControlItemValue { exportAs: 'accessControlArrayForm' }) export class AccessControlArrayFormComponent implements OnInit, OnDestroy { + @Input() dropdownOptions: AccessesConditionOption[] = []; private destroy$ = new Subject(); @@ -36,27 +27,9 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { accessControl: this.fb.array([]) }); - constructor(private bulkAccessConfigService: BulkAccessConfigDataService, - private fb: FormBuilder) { - } - - dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( - getFirstCompletedRemoteData(), - map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), - shareReplay(1), - tap(console.log) - ); + constructor(private fb: FormBuilder) {} ngOnInit(): void { - // console.log(this.dropdownOptions); -/* if (this.accessControlItems.length === 0) { - this.addAccessControlItem(); - } else { - for (const item of this.accessControlItems) { - this.addAccessControlItem(item.itemName); - } - }*/ - this.addAccessControlItem(); this.accessControl.valueChanges diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 70f1b1e6cd..c45774dcf9 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -48,7 +48,10 @@
    - + +
    @@ -125,23 +128,24 @@
    -
    - {{'access-control-access-conditions' | translate}} -
    +
    {{'access-control-access-conditions' | translate}}
    {{'access-control-no-access-conditions-warning-message' | translate}}
    - + + -
    +
    -
    +
    diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 0807236796..9efc90a3f2 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; -import { concatMap } from 'rxjs'; +import { concatMap, Observable, shareReplay } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; import { @@ -9,7 +9,7 @@ import { import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { take } from 'rxjs/operators'; +import { map, take, tap } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; import { SharedModule } from '../shared.module'; @@ -21,6 +21,8 @@ import { ItemAccessControlSelectBitstreamsModalComponent } from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; @Component({ selector: 'ds-access-control-form-container', @@ -28,12 +30,12 @@ import { BulkAccessConfigDataService } from '../../core/config/bulk-access-confi styleUrls: [ './access-control-form-container.component.scss' ], exportAs: 'dsAccessControlForm' }) -export class AccessControlFormContainerComponent implements OnInit { +export class AccessControlFormContainerComponent { @Input() showLimitToSpecificBitstreams = false; @Input() itemRD: RemoteData; - @Input() hideSubmit = false; + @Input() showSubmit = true; @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; @@ -48,16 +50,12 @@ export class AccessControlFormContainerComponent impleme state = initialState; -/* dropdownData$ = this.bulkAccessConfigService.findByPropertyName('default').pipe( + dropdownData$: Observable = this.bulkAccessConfigService.findByPropertyName('default').pipe( getFirstCompletedRemoteData(), map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), shareReplay(1), - tap(console.log) - );*/ - -/* dropdownData$ = this.bulkAccessControlService.dropdownData$.pipe( - shareReplay(1) - );*/ + tap(x => console.log('options', x)) + ); getFormValue() { return { From b279b97c37b4e6682f89d71fdaf9ecc9a2de3893 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 16:23:27 +0200 Subject: [PATCH 610/833] [CST-9636] WIP Fix bulk-access-config-data.service --- .../config/bulk-access-config-data.service.ts | 11 ++++------- src/app/core/config/config-data.service.ts | 18 ++++++++++++++++-- .../bulk-access-condition-options.model.ts | 10 +++++----- src/app/core/config/models/config-type.ts | 2 ++ src/app/core/core.module.ts | 2 ++ .../access-control-form-container.component.ts | 7 +++---- 6 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/app/core/config/bulk-access-config-data.service.ts b/src/app/core/config/bulk-access-config-data.service.ts index f27b59eee1..28b4029ea2 100644 --- a/src/app/core/config/bulk-access-config-data.service.ts +++ b/src/app/core/config/bulk-access-config-data.service.ts @@ -1,17 +1,17 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; import { RemoteDataBuildService } from '../cache/builders/remote-data-build.service'; import { ObjectCacheService } from '../cache/object-cache.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; -import { RemoteData } from '../data/remote-data'; import { RequestService } from '../data/request.service'; -import { BulkAccessConditionOptions } from './models/bulk-access-condition-options.model'; import { ConfigDataService } from './config-data.service'; +import { dataService } from '../data/base/data-service.decorator'; +import { BULK_ACCESS_CONDITION_OPTIONS } from './models/config-type'; -@Injectable({ providedIn: 'root' }) /** * Data Service responsible for retrieving Bulk Access Condition Options from the REST API */ +@Injectable({ providedIn: 'root' }) +@dataService(BULK_ACCESS_CONDITION_OPTIONS) export class BulkAccessConfigDataService extends ConfigDataService { constructor( @@ -23,7 +23,4 @@ export class BulkAccessConfigDataService extends ConfigDataService { super('bulkaccessconditionoptions', requestService, rdbService, objectCache, halService); } - findByPropertyName(name: string): Observable> { - return this.findById(name) as Observable>; - } } diff --git a/src/app/core/config/config-data.service.ts b/src/app/core/config/config-data.service.ts index f8f46435c5..58b023e62c 100644 --- a/src/app/core/config/config-data.service.ts +++ b/src/app/core/config/config-data.service.ts @@ -1,9 +1,10 @@ import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + import { ConfigObject } from './models/config.model'; import { RemoteData } from '../data/remote-data'; import { FollowLinkConfig } from '../../shared/utils/follow-link-config.model'; import { getFirstCompletedRemoteData } from '../shared/operators'; -import { map } from 'rxjs/operators'; import { IdentifiableDataService } from '../data/base/identifiable-data.service'; /** @@ -38,7 +39,20 @@ export abstract class ConfigDataService extends IdentifiableDataService[]): Observable> { + /** + * Returns a config object by given name + * + * Throws an error if a configuration object cannot be retrieved. + * + * @param name The name of configuration to retrieve + * @param useCachedVersionIfAvailable If this is true, the request will only be sent if there's + * no valid cached version. Defaults to true + * @param reRequestOnStale Whether or not the request should automatically be re- + * requested after the response becomes stale + * @param linksToFollow List of {@link FollowLinkConfig} that indicate which + * {@link HALLink}s should be automatically resolved + */ + public findByName(name: string, useCachedVersionIfAvailable = true, reRequestOnStale = true, ...linksToFollow: FollowLinkConfig[]): Observable> { return super.findById(name, useCachedVersionIfAvailable, reRequestOnStale, ...linksToFollow); } } diff --git a/src/app/core/config/models/bulk-access-condition-options.model.ts b/src/app/core/config/models/bulk-access-condition-options.model.ts index f10965ea31..d84e14b95d 100644 --- a/src/app/core/config/models/bulk-access-condition-options.model.ts +++ b/src/app/core/config/models/bulk-access-condition-options.model.ts @@ -1,17 +1,17 @@ -import { autoserialize, autoserializeAs, deserialize } from 'cerialize'; +import { autoserialize, autoserializeAs, inheritSerialization } from 'cerialize'; import { typedObject } from '../../cache/builders/build-decorators'; import { excludeFromEquals } from '../../utilities/equals.decorators'; import { ResourceType } from '../../shared/resource-type'; import { HALLink } from '../../shared/hal-link.model'; import { ConfigObject } from './config.model'; import { AccessesConditionOption } from './config-accesses-conditions-options.model'; - -export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkAccessConditionOptions'); +import { BULK_ACCESS_CONDITION_OPTIONS } from './config-type'; /** * Model class for a bulk access condition options */ @typedObject +@inheritSerialization(ConfigObject) export class BulkAccessConditionOptions extends ConfigObject { static type = BULK_ACCESS_CONDITION_OPTIONS; @@ -28,10 +28,10 @@ export class BulkAccessConditionOptions extends ConfigObject { @autoserialize id: string; - @deserialize + @autoserialize itemAccessConditionOptions: AccessesConditionOption[]; - @deserialize + @autoserialize bitstreamAccessConditionOptions: AccessesConditionOption[]; _links: { self: HALLink }; diff --git a/src/app/core/config/models/config-type.ts b/src/app/core/config/models/config-type.ts index 19864536f0..5733f5bfad 100644 --- a/src/app/core/config/models/config-type.ts +++ b/src/app/core/config/models/config-type.ts @@ -17,3 +17,5 @@ export const SUBMISSION_UPLOADS_TYPE = new ResourceType('submissionuploads'); export const SUBMISSION_UPLOAD_TYPE = new ResourceType('submissionupload'); export const SUBMISSION_ACCESSES_TYPE = new ResourceType('submissionaccessoption'); + +export const BULK_ACCESS_CONDITION_OPTIONS = new ResourceType('bulkaccessconditionoption'); diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 319b42d58b..7d540ccfcf 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -177,6 +177,7 @@ import { IdentifierData } from '../shared/object-list/identifier-data/identifier import { Subscription } from '../shared/subscriptions/models/subscription.model'; import { SupervisionOrderDataService } from './supervision-order/supervision-order-data.service'; import { ItemRequest } from './shared/item-request.model'; +import { BulkAccessConditionOptions } from './config/models/bulk-access-condition-options.model'; /** * When not in production, endpoint responses can be mocked for testing purposes @@ -371,6 +372,7 @@ export const models = IdentifierData, Subscription, ItemRequest, + BulkAccessConditionOptions ]; @NgModule({ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 9efc90a3f2..d09911a9d6 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -9,7 +9,7 @@ import { import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { map, take, tap } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; import { SharedModule } from '../shared.module'; @@ -50,11 +50,10 @@ export class AccessControlFormContainerComponent { state = initialState; - dropdownData$: Observable = this.bulkAccessConfigService.findByPropertyName('default').pipe( + dropdownData$: Observable = this.bulkAccessConfigService.findByName('default').pipe( getFirstCompletedRemoteData(), map((configRD: RemoteData) => configRD.hasSucceeded ? configRD.payload : null), - shareReplay(1), - tap(x => console.log('options', x)) + shareReplay(1) ); getFormValue() { From 5f74446bf50ac07a3e6ece2b6cf437a2d733f6da Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 16:27:53 +0200 Subject: [PATCH 611/833] [CST-9636] Added jsdoc comments --- ...ccess-control-array-form.component.spec.ts | 8 +- .../access-control-array-form.component.ts | 126 ++++++++++++------ ...s-control-form-container.component.spec.ts | 4 +- ...access-control-form-container.component.ts | 39 +++++- 4 files changed, 124 insertions(+), 53 deletions(-) diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts index 7c3ed06be1..b99a0fff8e 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AccessControlArrayFormComponent, AccessControlItemValue } from './access-control-array-form.component'; +import { AccessControlArrayFormComponent } from './access-control-array-form.component'; import { ReactiveFormsModule } from '@angular/forms'; import { SharedBrowseByModule } from '../browse-by/shared-browse-by.module'; import { CommonModule } from '@angular/common'; @@ -26,7 +26,7 @@ fdescribe('AccessControlArrayFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(AccessControlArrayFormComponent); component = fixture.componentInstance; - component.dropdownOptions = [{name: 'Option1'}, {name: 'Option2'}]; + component.dropdownOptions = [{name: 'Option1'}, {name: 'Option2'}] as any; fixture.detectChanges(); }); @@ -54,14 +54,14 @@ fdescribe('AccessControlArrayFormComponent', () => { }); it('should set access control item value', () => { - const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + const item = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; component.addAccessControlItem(item.itemName); component.accessControl.controls[0].patchValue(item); expect(component.form.value.accessControl[0]).toEqual(item); }); it('should reset form value', () => { - const item: AccessControlItemValue = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; + const item = { itemName: 'item1', startDate: '2022-01-01', endDate: '2022-02-01' }; component.addAccessControlItem(item.itemName); component.accessControl.controls[1].patchValue(item); component.reset(); diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-array-form/access-control-array-form.component.ts index 090b22d94c..60060dec16 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-array-form/access-control-array-form.component.ts @@ -31,7 +31,89 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { ngOnInit(): void { this.addAccessControlItem(); + this.handleValidationOnFormArrayChanges(); + } + /** + * Get the access control form array. + */ + get accessControl() { + return this.form.get('accessControl') as FormArray; + } + + /** + * Add a new access control item to the form. + * Start and end date are disabled by default. + * @param itemName The name of the item to add + */ + addAccessControlItem(itemName: string = null) { + this.accessControl.push(this.fb.group({ + itemName, + startDate: new FormControl({ value: null, disabled: true }), + endDate: new FormControl({ value: null, disabled: true }) + })); + } + + /** + * Remove an access control item from the form. + * @param index + */ + removeAccessControlItem(index: number) { + this.accessControl.removeAt(index); + } + + /** + * Get the value of the form. + * This will be used to read the form value from the parent component. + * @return The form value + */ + getValue() { + return this.form.value; + } + + /** + * Set the value of the form from the parent component. + */ + reset() { + this.accessControl.reset([]); + } + + /** + * Disable the form. + * This will be used to disable the form from the parent component. + * This will also disable all date controls. + */ + disable() { + this.form.disable(); + + // disable all date controls + for (const control of this.accessControl.controls) { + control.get('startDate').disable(); + control.get('endDate').disable(); + } + } + + /** + * Enable the form. + * This will be used to enable the form from the parent component. + * This will also enable all date controls. + */ + enable() { + this.form.enable(); + + // enable date controls + for (const control of this.accessControl.controls) { + control.get('startDate').enable(); + control.get('endDate').enable(); + } + } + + /** + * Handle validation on form array changes. + * This will be used to enable/disable date controls based on the selected item. + * @private + */ + private handleValidationOnFormArrayChanges() { this.accessControl.valueChanges .pipe( distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), @@ -61,50 +143,6 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { }); } - get accessControl() { - return this.form.get('accessControl') as FormArray; - } - - addAccessControlItem(itemName: string = null) { - this.accessControl.push(this.fb.group({ - itemName, - startDate: new FormControl({ value: null, disabled: true }), - endDate: new FormControl({ value: null, disabled: true }) - })); - } - - removeAccessControlItem(index: number) { - this.accessControl.removeAt(index); - } - - getValue() { - return this.form.value; - } - - reset() { - this.accessControl.reset([]); - } - - disable() { - this.form.disable(); - - // disable all date controls - for (const control of this.accessControl.controls) { - control.get('startDate').disable(); - control.get('endDate').disable(); - } - } - - enable() { - this.form.enable(); - - // enable date controls - for (const control of this.accessControl.controls) { - control.get('startDate').enable(); - control.get('endDate').enable(); - } - } - ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts index 871e301209..7412b9569f 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -3,8 +3,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AccessControlFormContainerComponent } from './access-control-form-container.component'; describe('AccessControlFormContainerComponent', () => { - let component: AccessControlFormContainerComponent; - let fixture: ComponentFixture; + let component: AccessControlFormContainerComponent; + let fixture: ComponentFixture>; beforeEach(async () => { await TestBed.configureTestingModule({ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 9efc90a3f2..23ba64c4f6 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectorRef, Component, Input, NgModule, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, NgModule, OnDestroy, ViewChild } from '@angular/core'; import { concatMap, Observable, shareReplay } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; @@ -30,11 +30,23 @@ import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access styleUrls: [ './access-control-form-container.component.scss' ], exportAs: 'dsAccessControlForm' }) -export class AccessControlFormContainerComponent { +export class AccessControlFormContainerComponent implements OnDestroy { + /** + * Will be used to determine if we need to show the limit changes to specific bitstreams radio buttons + */ @Input() showLimitToSpecificBitstreams = false; + + /** + * The item to which the access control form applies + */ @Input() itemRD: RemoteData; + /** + * Whether to show the submit and cancel button + * We want to hide these buttons when the form is + * used in an accordion, and we want to show buttons somewhere else + */ @Input() showSubmit = true; @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @@ -57,6 +69,9 @@ export class AccessControlFormContainerComponent { tap(x => console.log('options', x)) ); + /** + * Will be used from a parent component to read the value of the form + */ getFormValue() { return { bitstream: this.bitstreamAccessCmp.getValue(), @@ -65,12 +80,20 @@ export class AccessControlFormContainerComponent { }; } + /** + * Reset the form to its initial state + * This will also reset the state of the child components (bitstream and item access) + */ reset() { this.bitstreamAccessCmp.reset(); this.itemAccessCmp.reset(); this.state = initialState; } + /** + * Submit the form + * This will create a payload file and execute the script + */ submit() { const bitstreamAccess = this.bitstreamAccessCmp.getValue(); const itemAccess = this.itemAccessCmp.getValue(); @@ -89,6 +112,12 @@ export class AccessControlFormContainerComponent { }); } + /** + * Handle the status change of the access control form (item or bitstream) + * This will enable/disable the access control form for the item or bitstream + * @param type The type of the access control form (item or bitstream) + * @param active boolean indicating whether the access control form should be enabled or disabled + */ handleStatusChange(type: 'item' | 'bitstream', active: boolean) { if (type === 'bitstream') { active ? this.bitstreamAccessCmp.enable() : this.bitstreamAccessCmp.disable(); @@ -97,6 +126,11 @@ export class AccessControlFormContainerComponent { } } + /** + * Open the modal to select bitstreams for which to change the access control + * This will open the modal and pass the currently selected bitstreams + * @param item The item for which to change the access control + */ openSelectBitstreamsModal(item: Item) { const ref = this.modalService.open(ItemAccessControlSelectBitstreamsModalComponent); ref.componentInstance.selectedBitstreams = this.state.bitstream.selectedBitstreams; @@ -111,7 +145,6 @@ export class AccessControlFormContainerComponent { }); } - // eslint-disable-next-line @angular-eslint/use-lifecycle-interface ngOnDestroy(): void { this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); } From 628732b93238bceff518eea93f66872925e4d804 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Wed, 10 May 2023 16:45:17 +0200 Subject: [PATCH 612/833] [CST-9636] Show warning only when there are no controls and form is not disabled --- .../edit-collection-page.module.ts | 2 +- .../edit-community-page.module.ts | 2 +- .../edit-item-page/edit-item-page.module.ts | 4 ---- .../access-control-array-form.component.html | 4 ++++ .../access-control-array-form.component.scss | 0 .../access-control-array-form.component.spec.ts | 2 +- .../access-control-array-form.component.ts | 4 ++-- .../control-max-end-date.pipe.ts | 2 +- .../control-max-start-date.pipe.ts | 2 +- .../access-control-form-container.component.html | 15 ++------------- .../access-control-form-container.component.ts | 4 ++-- 11 files changed, 15 insertions(+), 26 deletions(-) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.html (92%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.scss (100%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.spec.ts (98%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/access-control-array-form.component.ts (96%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/control-max-end-date.pipe.ts (87%) rename src/app/shared/{ => access-control-form-container}/access-control-array-form/control-max-start-date.pipe.ts (87%) diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 9d703c0cf4..58563f440b 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -16,7 +16,7 @@ import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; import { AccessControlArrayFormModule -} from '../../shared/access-control-array-form/access-control-array-form.component'; +} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; import { AccessControlFormContainerModule diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index 5ed2e401c6..d88aadfd8e 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -14,7 +14,7 @@ import { CommunityAccessControlComponent } from './community-access-control/comm import { UiSwitchModule } from 'ngx-ui-switch'; import { AccessControlArrayFormModule -} from '../../shared/access-control-array-form/access-control-array-form.component'; +} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; import { AccessControlFormContainerModule } from '../../shared/access-control-form-container/access-control-form-container.component'; diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 322c6c6999..9d132abe53 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -47,9 +47,6 @@ import { IdentifierDataComponent } from '../../shared/object-list/identifier-dat import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; -import { - AccessControlArrayFormModule -} from '../../shared/access-control-array-form/access-control-array-form.component'; import { UiSwitchModule } from 'ngx-ui-switch'; import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module'; import { @@ -72,7 +69,6 @@ import { NgbModule, ItemVersionsModule, DsoSharedModule, - AccessControlArrayFormModule, UiSwitchModule, ResultsBackButtonModule, AccessControlFormContainerModule, diff --git a/src/app/shared/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html similarity index 92% rename from src/app/shared/access-control-array-form/access-control-array-form.component.html rename to src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 24dcc11120..9b1f018ffb 100644 --- a/src/app/shared/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,4 +1,8 @@
    +
    + {{'access-control-no-access-conditions-warning-message' | translate}} +
    +
    -
    -
    {{'access-control-access-conditions' | translate}}
    -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    +
    {{'access-control-access-conditions' | translate}}
    -
    -
    {{'access-control-access-conditions' | translate}}
    - -
    - {{'access-control-no-access-conditions-warning-message' | translate}} -
    -
    +
    {{'access-control-access-conditions' | translate}}
    Date: Wed, 10 May 2023 17:12:53 +0200 Subject: [PATCH 613/833] [CST-9636] Added state transformer to file model, added tests for bulk access control service --- .../access-control-array-form.component.ts | 4 +- ...s-control-form-container.component.spec.ts | 63 +++++++++++-------- ...access-control-form-container.component.ts | 14 ++++- .../bulk-access-control.service.spec.ts | 51 +++++++++++++++ .../bulk-access-control.service.ts | 47 +++++++++++++- 5 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 171bec8395..41b51d73dc 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -68,7 +68,9 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { * @return The form value */ getValue() { - return this.form.value; + return this.form.value.accessControl + .filter(x => x.itemName !== null && x.itemName !== '') + .map(x => ({ name: x.itemName, startDate: x.startDate || null, endDate: x.endDate || null })); } /** diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts index 7412b9569f..66ef20444e 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.spec.ts @@ -1,25 +1,38 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { AccessControlFormContainerComponent } from './access-control-form-container.component'; - -describe('AccessControlFormContainerComponent', () => { - let component: AccessControlFormContainerComponent; - let fixture: ComponentFixture>; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ AccessControlFormContainerComponent ] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(AccessControlFormContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); +// +// describe('AccessControlFormContainerComponent', () => { +// let component: AccessControlFormContainerComponent; +// let fixture: ComponentFixture>; +// +// let bulkAccessConfigDataServiceMock: BulkAccessConfigDataService; +// +// beforeEach(async () => { +// +// bulkAccessConfigDataServiceMock = jasmine.createSpyObj('BulkAccessConfigDataService', { +// findByName: jasmine.createSpy('findByName'), +// }); +// +// +// await TestBed.configureTestingModule({ +// declarations: [ AccessControlFormContainerComponent ], +// imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], +// providers: [ +// { provide: BulkAccessConfigDataService, useValue: bulkAccessConfigDataServiceMock }, +// // private bulkAccessControlService: BulkAccessControlService, +// // private selectableListService: SelectableListService, +// // protected modalService: NgbModal, +// // private cdr: ChangeDetectorRef +// ] +// }) +// .compileComponents(); +// }); +// +// beforeEach(() => { +// fixture = TestBed.createComponent(AccessControlFormContainerComponent); +// component = fixture.componentInstance; +// fixture.detectChanges(); +// }); +// +// it('should create', () => { +// expect(component).toBeTruthy(); +// }); +// }); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index eec4996073..e34928361f 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -150,7 +150,7 @@ export class AccessControlFormContainerComponent impleme } -const initialState = { +const initialState: AccessControlFormState = { item: { toggleStatus: false, accessMode: '', @@ -163,6 +163,18 @@ const initialState = { }, }; +export interface AccessControlFormState { + item: { + toggleStatus: boolean, + accessMode: string, + }, + bitstream: { + toggleStatus: boolean, + accessMode: string, + changesLimit: string, + selectedBitstreams: ListableObject[], + } +} @NgModule({ imports: [ diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts new file mode 100644 index 0000000000..9e733b5694 --- /dev/null +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts @@ -0,0 +1,51 @@ +import { TestBed } from '@angular/core/testing'; +import { BulkAccessControlService } from './bulk-access-control.service'; +import { ScriptDataService } from '../../core/data/processes/script-data.service'; +import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; + +fdescribe('BulkAccessControlService', () => { + let service: BulkAccessControlService; + let scriptServiceSpy: jasmine.SpyObj; + + beforeEach(() => { + const spy = jasmine.createSpyObj('ScriptDataService', ['invoke']); + TestBed.configureTestingModule({ + providers: [ + BulkAccessControlService, + { provide: ScriptDataService, useValue: spy } + ] + }); + service = TestBed.inject(BulkAccessControlService); + scriptServiceSpy = TestBed.inject(ScriptDataService) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + describe('createPayloadFile', () => { + it('should create a file and return the URL and file object', () => { + const payload = { data: 'test' }; + const result = service.createPayloadFile(payload); + + expect(result.url).toBeTruthy(); + expect(result.file).toBeTruthy(); + }); + }); + + describe('executeScript', () => { + it('should invoke the script service with the correct parameters', () => { + const uuids = ['123', '456']; + const file = new File(['test'], 'data.json', { type: 'application/json' }); + const expectedParams: ProcessParameter[] = [{ name: 'uuid', value: '123,456' }]; + + // @ts-ignore + scriptServiceSpy.invoke.and.returnValue(Promise.resolve({})); + + const result = service.executeScript(uuids, file); + + expect(scriptServiceSpy.invoke).toHaveBeenCalledWith('bulk-access-control', expectedParams, [file]); + expect(result).toBeTruthy(); + }); + }); +}); diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 1cce44d828..f5afe338dd 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -2,15 +2,16 @@ import { Injectable } from '@angular/core'; import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; +import { AccessControlFormState } from './access-control-form-container.component'; @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor(private scriptService: ScriptDataService) {} - createPayloadFile(payload: any) { - console.log('execute', payload); + createPayloadFile(payload: { state: AccessControlFormState, bitstreamAccess, itemAccess }) { + const content = convertToBulkAccessControlFileModel(payload); - const blob = new Blob([JSON.stringify(payload, null, 2)], { + const blob = new Blob([JSON.stringify(content, null, 2)], { type: 'application/json', }); @@ -34,3 +35,43 @@ export class BulkAccessControlService { return this.scriptService.invoke('bulk-access-control', params, [file]); } } + +export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { + const constraints = { uuid: [] }; + + if (payload.state.bitstream.changesLimit === 'selected') { + // @ts-ignore + constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); + } + + return { + item: { + mode: payload.state.item.accessMode, + accessConditions: payload.itemAccess + }, + bitstream: { + constraints, + mode: payload.state.bitstream.accessMode, + accessConditions: payload.bitstreamAccess + } + }; +}; + + +export interface BulkAccessControlFileModel { + item: { + mode: string; + accessConditions: AccessCondition[]; + }, + bitstream: { + constraints: { uuid: string[] }; + mode: string; + accessConditions: AccessCondition[]; + } +} + +interface AccessCondition { + name: string; + startDate?: string; + endDate?: string; +} From e31fc562c5ab4006ffb8a6220f6001a4b0fb929f Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 18:25:41 +0200 Subject: [PATCH 614/833] [CST-9636] WIP Create the access-control.module --- .../edit-collection-page.module.ts | 16 +++------ .../community-access-control.component.ts | 2 -- .../edit-community-page.module.ts | 12 ++----- .../edit-item-page/edit-item-page.module.ts | 9 ++--- .../access-control-array-form.component.ts | 19 ++-------- ...access-control-form-container.component.ts | 29 ++------------- .../access-control-form.module.ts | 36 +++++++++++++++++++ 7 files changed, 51 insertions(+), 72 deletions(-) create mode 100644 src/app/shared/access-control-form-container/access-control-form.module.ts diff --git a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts index 58563f440b..8d0cb179f1 100644 --- a/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts +++ b/src/app/collection-page/edit-collection-page/edit-collection-page.module.ts @@ -9,18 +9,14 @@ import { CollectionCurateComponent } from './collection-curate/collection-curate import { CollectionSourceComponent } from './collection-source/collection-source.component'; import { CollectionAuthorizationsComponent } from './collection-authorizations/collection-authorizations.component'; import { CollectionFormModule } from '../collection-form/collection-form.module'; -import { CollectionSourceControlsComponent } from './collection-source/collection-source-controls/collection-source-controls.component'; +import { + CollectionSourceControlsComponent +} from './collection-source/collection-source-controls/collection-source-controls.component'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { FormModule } from '../../shared/form/form.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CollectionAccessControlComponent } from './collection-access-control/collection-access-control.component'; -import { - AccessControlArrayFormModule -} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; -import { UiSwitchModule } from 'ngx-ui-switch'; -import { - AccessControlFormContainerModule -} from '../../shared/access-control-form-container/access-control-form-container.component'; +import { AccessControlFormModule } from '../../shared/access-control-form-container/access-control-form.module'; /** * Module that contains all components related to the Edit Collection page administrator functionality @@ -34,9 +30,7 @@ import { ResourcePoliciesModule, FormModule, ComcolModule, - AccessControlArrayFormModule, - UiSwitchModule, - AccessControlFormContainerModule, + AccessControlFormModule, ], declarations: [ EditCollectionPageComponent, diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts index b24069b9ac..8a216e38df 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.ts @@ -1,8 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { RemoteData } from '../../../core/data/remote-data'; -import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { ActivatedRoute } from '@angular/router'; import { map } from 'rxjs/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; diff --git a/src/app/community-page/edit-community-page/edit-community-page.module.ts b/src/app/community-page/edit-community-page/edit-community-page.module.ts index d88aadfd8e..5190d6a008 100644 --- a/src/app/community-page/edit-community-page/edit-community-page.module.ts +++ b/src/app/community-page/edit-community-page/edit-community-page.module.ts @@ -11,13 +11,9 @@ import { CommunityFormModule } from '../community-form/community-form.module'; import { ResourcePoliciesModule } from '../../shared/resource-policies/resource-policies.module'; import { ComcolModule } from '../../shared/comcol/comcol.module'; import { CommunityAccessControlComponent } from './community-access-control/community-access-control.component'; -import { UiSwitchModule } from 'ngx-ui-switch'; import { - AccessControlArrayFormModule -} from '../../shared/access-control-form-container/access-control-array-form/access-control-array-form.component'; -import { - AccessControlFormContainerModule -} from '../../shared/access-control-form-container/access-control-form-container.component'; + AccessControlFormModule +} from '../../shared/access-control-form-container/access-control-form.module'; /** * Module that contains all components related to the Edit Community page administrator functionality @@ -30,9 +26,7 @@ import { CommunityFormModule, ComcolModule, ResourcePoliciesModule, - UiSwitchModule, - AccessControlArrayFormModule, - AccessControlFormContainerModule, + AccessControlFormModule, ], declarations: [ EditCommunityPageComponent, diff --git a/src/app/item-page/edit-item-page/edit-item-page.module.ts b/src/app/item-page/edit-item-page/edit-item-page.module.ts index 9d132abe53..ef6abf4a84 100644 --- a/src/app/item-page/edit-item-page/edit-item-page.module.ts +++ b/src/app/item-page/edit-item-page/edit-item-page.module.ts @@ -47,12 +47,10 @@ import { IdentifierDataComponent } from '../../shared/object-list/identifier-dat import { ItemRegisterDoiComponent } from './item-register-doi/item-register-doi.component'; import { DsoSharedModule } from '../../dso-shared/dso-shared.module'; import { ItemAccessControlComponent } from './item-access-control/item-access-control.component'; -import { UiSwitchModule } from 'ngx-ui-switch'; import { ResultsBackButtonModule } from '../../shared/results-back-button/results-back-button.module'; import { - AccessControlFormContainerModule -} from '../../shared/access-control-form-container/access-control-form-container.component'; - + AccessControlFormModule +} from '../../shared/access-control-form-container/access-control-form.module'; /** * Module that contains all components related to the Edit Item page administrator functionality @@ -69,9 +67,8 @@ import { NgbModule, ItemVersionsModule, DsoSharedModule, - UiSwitchModule, ResultsBackButtonModule, - AccessControlFormContainerModule, + AccessControlFormModule, ], declarations: [ EditItemPageComponent, diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 41b51d73dc..1e978d9aa9 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -1,17 +1,10 @@ -import { Component, Input, NgModule, OnDestroy, OnInit } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormArray, FormBuilder, FormControl, ReactiveFormsModule } from '@angular/forms'; -import { SharedBrowseByModule } from '../../browse-by/shared-browse-by.module'; -import { TranslateModule } from '@ngx-translate/core'; -import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; -import { ControlMaxStartDatePipe } from './control-max-start-date.pipe'; -import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; +import { FormArray, FormBuilder, FormControl } from '@angular/forms'; import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { Subject } from 'rxjs'; import { AccessesConditionOption } from '../../../core/config/models/config-accesses-conditions-options.model'; - @Component({ selector: 'ds-access-control-array-form', templateUrl: './access-control-array-form.component.html', @@ -151,11 +144,3 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { } } - -@NgModule({ - imports: [ CommonModule, ReactiveFormsModule, SharedBrowseByModule, TranslateModule, NgbDatepickerModule ], - declarations: [ AccessControlArrayFormComponent, ControlMaxStartDatePipe, ControlMaxEndDatePipe ], - exports: [ AccessControlArrayFormComponent ], -}) -export class AccessControlArrayFormModule { -} diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index e34928361f..10ce81d6fc 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -1,20 +1,13 @@ -import { ChangeDetectorRef, Component, Input, NgModule, OnDestroy, ViewChild } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnDestroy, ViewChild } from '@angular/core'; import { concatMap, Observable, shareReplay } from 'rxjs'; import { RemoteData } from '../../core/data/remote-data'; import { Item } from '../../core/shared/item.model'; -import { - AccessControlArrayFormComponent, - AccessControlArrayFormModule -} from './access-control-array-form/access-control-array-form.component'; +import { AccessControlArrayFormComponent } from './access-control-array-form/access-control-array-form.component'; import { BulkAccessControlService } from './bulk-access-control.service'; import { SelectableListService } from '../object-list/selectable-list/selectable-list.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { map, take } from 'rxjs/operators'; -import { CommonModule } from '@angular/common'; import { ListableObject } from '../object-collection/shared/listable-object.model'; -import { SharedModule } from '../shared.module'; -import { TranslateModule } from '@ngx-translate/core'; -import { UiSwitchModule } from 'ngx-ui-switch'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID, @@ -175,21 +168,3 @@ export interface AccessControlFormState { selectedBitstreams: ListableObject[], } } - -@NgModule({ - imports: [ - CommonModule, - AccessControlArrayFormModule, - SharedModule, - TranslateModule, - UiSwitchModule - ], - declarations: [ - AccessControlFormContainerComponent, - ItemAccessControlSelectBitstreamsModalComponent - ], - exports: [ AccessControlFormContainerComponent, AccessControlArrayFormModule ], -}) -export class AccessControlFormContainerModule {} - - diff --git a/src/app/shared/access-control-form-container/access-control-form.module.ts b/src/app/shared/access-control-form-container/access-control-form.module.ts new file mode 100644 index 0000000000..4bba26033f --- /dev/null +++ b/src/app/shared/access-control-form-container/access-control-form.module.ts @@ -0,0 +1,36 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { TranslateModule } from '@ngx-translate/core'; +import { UiSwitchModule } from 'ngx-ui-switch'; + +import { + AccessControlArrayFormComponent +} from './access-control-array-form/access-control-array-form.component'; +import { SharedModule } from '../shared.module'; +import { + ItemAccessControlSelectBitstreamsModalComponent +} from './item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component'; +import { AccessControlFormContainerComponent } from './access-control-form-container.component'; +import { ControlMaxStartDatePipe } from './access-control-array-form/control-max-start-date.pipe'; +import { ControlMaxEndDatePipe } from './access-control-array-form/control-max-end-date.pipe'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + TranslateModule, + UiSwitchModule, + NgbDatepickerModule + ], + declarations: [ + AccessControlFormContainerComponent, + AccessControlArrayFormComponent, + ItemAccessControlSelectBitstreamsModalComponent, + ControlMaxStartDatePipe, + ControlMaxEndDatePipe + ], + exports: [ AccessControlFormContainerComponent, AccessControlArrayFormComponent ], +}) +export class AccessControlFormModule {} From 64c0fff37010897427ecd72323378050bf0858a6 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Wed, 10 May 2023 20:18:20 +0200 Subject: [PATCH 615/833] [CST-9636] WIP Create unit tests --- .../access-control/access-control.module.ts | 20 ++-- .../browse/bulk-access-browse.component.html | 3 - .../bulk-access-browse.component.spec.ts | 75 ++++++++++++-- .../browse/bulk-access-browse.component.ts | 7 +- .../bulk-access/bulk-access.component.html | 14 ++- .../bulk-access/bulk-access.component.spec.ts | 96 +++++++++++++++++- .../bulk-access/bulk-access.component.ts | 98 ++++++++++++++++++- .../bulk-access-settings.component.html | 2 +- .../bulk-access-settings.component.spec.ts | 65 +++++++++++- .../bulk-access-settings.component.ts | 30 ++++-- ...ccess-control-array-form.component.spec.ts | 2 +- ...access-control-form-container.component.ts | 5 + .../bulk-access-control.service.spec.ts | 8 +- .../bulk-access-control.service.ts | 8 +- .../selectable-list.service.spec.ts | 2 +- 15 files changed, 382 insertions(+), 53 deletions(-) diff --git a/src/app/access-control/access-control.module.ts b/src/app/access-control/access-control.module.ts index ba7334d24f..3dc4b6cedc 100644 --- a/src/app/access-control/access-control.module.ts +++ b/src/app/access-control/access-control.module.ts @@ -17,6 +17,7 @@ import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; import { BulkAccessBrowseComponent } from './bulk-access/browse/bulk-access-browse.component'; import { BulkAccessSettingsComponent } from './bulk-access/settings/bulk-access-settings.component'; import { SearchModule } from '../shared/search/search.module'; +import { AccessControlFormModule } from '../shared/access-control-form-container/access-control-form.module'; /** * Condition for displaying error messages on email form field @@ -27,15 +28,16 @@ export const ValidateEmailErrorStateMatcher: DynamicErrorMessagesMatcher = }; @NgModule({ - imports: [ - CommonModule, - SharedModule, - RouterModule, - AccessControlRoutingModule, - FormModule, - NgbAccordionModule, - SearchModule, - ], + imports: [ + CommonModule, + SharedModule, + RouterModule, + AccessControlRoutingModule, + FormModule, + NgbAccordionModule, + SearchModule, + AccessControlFormModule, + ], exports: [ MembersListComponent, ], diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html index 9851aab835..6ef45cdd5b 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.html @@ -51,6 +51,3 @@ - - - diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index 12cfabae08..c8379b06ee 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -1,25 +1,82 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; + +import { of } from 'rxjs'; +import { NgbAccordionModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; import { BulkAccessBrowseComponent } from './bulk-access-browse.component'; +import { SelectableListService } from '../../../shared/object-list/selectable-list/selectable-list.service'; +import { SelectableObject } from '../../../shared/object-list/selectable-list/selectable-list.service.spec'; +import { PageInfo } from '../../../core/shared/page-info.model'; +import { buildPaginatedList } from '../../../core/data/paginated-list.model'; +import { createSuccessfulRemoteDataObject } from '../../../shared/remote-data.utils'; -describe('BrowseComponent', () => { +describe('BulkAccessBrowseComponent', () => { let component: BulkAccessBrowseComponent; let fixture: ComponentFixture; - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [ BulkAccessBrowseComponent ] - }) - .compileComponents(); - }); + const listID1 = 'id1'; + const value1 = 'Selected object'; + const value2 = 'Another selected object'; + + const selected1 = new SelectableObject(value1); + const selected2 = new SelectableObject(value2); + + const testSelection = { id: listID1, selection: [selected1, selected2] } ; + + const selectableListService = jasmine.createSpyObj('SelectableListService', ['getSelectableList', 'deselectAll']); + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + imports: [ + NgbAccordionModule, + NgbNavModule, + TranslateModule.forRoot() + ], + declarations: [BulkAccessBrowseComponent], + providers: [ { provide: SelectableListService, useValue: selectableListService }, ], + schemas: [ + NO_ERRORS_SCHEMA + ] + }).compileComponents(); + })); beforeEach(() => { fixture = TestBed.createComponent(BulkAccessBrowseComponent); component = fixture.componentInstance; + (component as any).selectableListService.getSelectableList.and.returnValue(of(testSelection)); fixture.detectChanges(); }); - it('should create', () => { + afterEach(() => { + fixture.destroy(); + component = null; + }); + + it('should create the component', () => { expect(component).toBeTruthy(); }); + + it('should have an initial active nav id of "search"', () => { + expect(component.activateId).toEqual('search'); + }); + + it('should have an initial pagination options object with default values', () => { + expect(component.paginationOptions$.getValue().id).toEqual('bas'); + expect(component.paginationOptions$.getValue().pageSize).toEqual(5); + expect(component.paginationOptions$.getValue().currentPage).toEqual(1); + }); + + it('should have an initial remote data with a paginated list as value', () => { + const list = buildPaginatedList(new PageInfo({ + "elementsPerPage": 5, + "totalElements": 2, + "totalPages": 1, + "currentPage": 1 + }), [selected1, selected2]) ; + const rd = createSuccessfulRemoteDataObject(list); + + expect(component.objectsSelected$.value).toEqual(rd); + }); + }); diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 7cbb8740a7..53a7302b46 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; -import { distinctUntilChanged, map } from 'rxjs/operators'; +import { distinctUntilChanged, map, tap } from 'rxjs/operators'; import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component'; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; @@ -67,7 +67,8 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) + map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)), + tap(console.log) ).subscribe(this.objectsSelected$) ) } @@ -76,14 +77,12 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { currentPage: this.paginationOptions$.value.currentPage + 1 })); - console.log(this.paginationOptions$.value); } pagePrev() { this.paginationOptions$.next(Object.assign(new PaginationComponentOptions(), this.paginationOptions$.value, { currentPage: this.paginationOptions$.value.currentPage - 1 })); - console.log(this.paginationOptions$.value); } private calculatePageCount(pageSize, totalCount = 0) { diff --git a/src/app/access-control/bulk-access/bulk-access.component.html b/src/app/access-control/bulk-access/bulk-access.component.html index 12ab88cd1a..aa6c82e133 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.html +++ b/src/app/access-control/bulk-access/bulk-access.component.html @@ -1,8 +1,18 @@ -
    - + + +
    + +
    + + +
    diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 61fab1e5a9..3372f98dab 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -1,25 +1,115 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; + +import { TranslateModule } from '@ngx-translate/core'; +import { of } from 'rxjs'; import { BulkAccessComponent } from './bulk-access.component'; +import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; +import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; +import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; +import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; +import { Process } from '../../process-page/processes/process.model'; -describe('BulkAccessComponent', () => { +fdescribe('BulkAccessComponent', () => { let component: BulkAccessComponent; let fixture: ComponentFixture; + let bulkAccessControlService: any; + let selectableListService: any; + + const selectableListServiceMock = jasmine.createSpyObj('SelectableListService', ['getSelectableList', 'deselectAll']); + const bulkAccessControlServiceMock = jasmine.createSpyObj('bulkAccessControlService', ['createPayloadFile', 'executeScript']); + + const mockFormState = { + "bitstream": [], + "item": [ + { + "name": "embargo", + "startDate": { + "year": 2026, + "month": 5, + "day": 31 + }, + "endDate": null + } + ], + "state": { + "item": { + "toggleStatus": true, + "accessMode": "replace" + }, + "bitstream": { + "toggleStatus": false, + "accessMode": "", + "changesLimit": "", + "selectedBitstreams": [] + } + } + }; + + const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { + getValue: jasmine.createSpy('getValue'), + reset: jasmine.createSpy('reset') + }); + const selection: any[] = [{ indexableObject: { uuid: '1234' } }, { indexableObject: { uuid: '5678' } }]; + const selectableListState: SelectableListState = { id: 'test', selection }; + const expectedIdList = ['1234', '5678']; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BulkAccessComponent ] + imports: [ TranslateModule.forRoot() ], + declarations: [ BulkAccessComponent ], + providers: [ + { provide: BulkAccessControlService, useValue: bulkAccessControlServiceMock }, + { provide: SelectableListService, useValue: selectableListServiceMock } + ], + schemas: [NO_ERRORS_SCHEMA] }) - .compileComponents(); + .compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(BulkAccessComponent); component = fixture.componentInstance; + bulkAccessControlService = TestBed.inject(BulkAccessControlService); + selectableListService = TestBed.inject(SelectableListService); + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); fixture.detectChanges(); + component.settings = mockSettings; + }); + + afterEach(() => { + fixture.destroy(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should generate the id list by selected elements', () => { + expect(component.objectsSelected$.value).toEqual(expectedIdList); + }); + + it('should disable the execute button when there are no objects selected', () => { + expect(component.canExport()).toBe(false); + }); + + it('should enable the execute button when there are objects selected', () => { + component.objectsSelected$.next(['1234']); + expect(component.canExport()).toBe(true); + }); + + it('should call the settings reset method when reset is called', () => { + spyOn(component.settings, 'reset'); + component.reset(); + expect(component.settings.reset).toHaveBeenCalled(); + }); + + it('should call the bulkAccessControlService executeScript method when submit is called', () => { + (component.settings as any).getValue.and.returnValue(mockFormState) + bulkAccessControlService.executeScript.and.returnValue(createSuccessfulRemoteDataObject$(new Process())); + component.objectsSelected$.next(['1234']); + component.submit(); + expect(bulkAccessControlService.executeScript).toHaveBeenCalled(); + }); }); diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index bc0d293e61..8a82edb273 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -1,8 +1,31 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; + +import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.component'; +import { distinctUntilChanged, map, take, tap } from 'rxjs/operators'; +import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; +import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; @Component({ selector: 'ds-bulk-access', - templateUrl: './bulk-access.component.html', + // templateUrl: './bulk-access.component.html', + template: `
    + +
    + + +
    + +
    + + +
    +
    `, styleUrls: ['./bulk-access.component.scss'] }) export class BulkAccessComponent implements OnInit { @@ -13,9 +36,78 @@ export class BulkAccessComponent implements OnInit { */ listId: string = 'bulk-access-list'; - constructor() { } + /** + * The list of the objects already selected + */ + objectsSelected$: BehaviorSubject = new BehaviorSubject([]); + + /** + * Array to track all subscriptions and unsubscribe them onDestroy + */ + private subs: Subscription[] = []; + + /** + * The SectionsDirective reference + */ + @ViewChild('dsBulkSettings') settings: BulkAccessSettingsComponent; + + constructor( + private bulkAccessControlService: BulkAccessControlService, + private selectableListService: SelectableListService + ) { } ngOnInit(): void { + this.subs.push( + this.selectableListService.getSelectableList(this.listId).pipe( + distinctUntilChanged(), + tap(console.log), + map((list: SelectableListState) => this.generateIdListBySelectedElements(list)), + tap(console.log) + ).subscribe(this.objectsSelected$) + ) } + canExport(): boolean { + return this.objectsSelected$.value?.length > 0; + } + + /** + * Reset the form to its initial state + * This will also reset the state of the child components (bitstream and item access) + */ + reset(): void { + this.settings.reset() + } + + /** + * Submit the form + * This will create a payload file and execute the script + */ + submit(): void { + const settings = this.settings.getValue(); + const bitstreamAccess = settings.bitstream; + const itemAccess = settings.item; + + const { file } = this.bulkAccessControlService.createPayloadFile({ + bitstreamAccess, + itemAccess, + state: settings.state + }); + + this.bulkAccessControlService.executeScript( + this.objectsSelected$.value || [], + file + ).pipe(take(1)).subscribe((res) => { + console.log('success', res); + }); + } + + /** + * Generate The RemoteData object containing the list of the selected elements + * @param list + * @private + */ + private generateIdListBySelectedElements(list: SelectableListState): string[] { + return list?.selection?.map((entry: any) => entry.indexableObject.uuid); + } } diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html index a5c292eddd..01f36ef03f 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.html @@ -15,7 +15,7 @@
    -

    bulk-access-settings works!

    +
    diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts index 435f2828b9..306d4eebde 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts @@ -1,25 +1,80 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - +import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { TranslateModule } from '@ngx-translate/core'; import { BulkAccessSettingsComponent } from './bulk-access-settings.component'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; describe('BulkAccessSettingsComponent', () => { let component: BulkAccessSettingsComponent; let fixture: ComponentFixture; + const mockFormState = { + "bitstream": [], + "item": [ + { + "name": "embargo", + "startDate": { + "year": 2026, + "month": 5, + "day": 31 + }, + "endDate": null + } + ], + "state": { + "item": { + "toggleStatus": true, + "accessMode": "replace" + }, + "bitstream": { + "toggleStatus": false, + "accessMode": "", + "changesLimit": "", + "selectedBitstreams": [] + } + } + }; + + const mockControl: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { + getFormValue: jasmine.createSpy('getFormValue'), + reset: jasmine.createSpy('reset') + }); beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BulkAccessSettingsComponent ] - }) - .compileComponents(); + imports: [NgbAccordionModule, TranslateModule.forRoot()], + declarations: [BulkAccessSettingsComponent], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(BulkAccessSettingsComponent); component = fixture.componentInstance; fixture.detectChanges(); + component.controlForm = mockControl; }); - it('should create', () => { + it('should create the component', () => { expect(component).toBeTruthy(); }); + + it('should have a method to get the form value', () => { + expect(component.getValue).toBeDefined(); + }); + + it('should have a method to reset the form', () => { + expect(component.reset).toBeDefined(); + }); + + it('should return the correct form value', () => { + const expectedValue = mockFormState; + (component.controlForm as any).getFormValue.and.returnValue(mockFormState) + const actualValue = component.getValue(); + expect(actualValue).toEqual(expectedValue); + }); + + it('should call reset on the control form', () => { + component.reset(); + expect(component.controlForm.reset).toHaveBeenCalled(); + }); }); diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts index cad9e5b981..978fc41ed8 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -1,20 +1,34 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, ViewChild } from '@angular/core'; +import { + AccessControlFormContainerComponent +} from '../../../shared/access-control-form-container/access-control-form-container.component'; @Component({ selector: 'ds-bulk-access-settings', - templateUrl: './bulk-access-settings.component.html', - styleUrls: ['./bulk-access-settings.component.scss'] + templateUrl: 'bulk-access-settings.component.html', + styleUrls: ['./bulk-access-settings.component.scss'], + exportAs: 'dsBulkSettings' }) -export class BulkAccessSettingsComponent implements OnInit { +export class BulkAccessSettingsComponent { /** - * The selection list id + * The SectionsDirective reference */ - @Input() listId!: string; + @ViewChild('dsAccessControlForm') controlForm: AccessControlFormContainerComponent; - constructor() { } + /** + * Will be used from a parent component to read the value of the form + */ + getValue() { + return this.controlForm.getFormValue(); + } - ngOnInit(): void { + /** + * Reset the form to its initial state + * This will also reset the state of the child components (bitstream and item access) + */ + reset() { + this.controlForm.reset() } } diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts index 5c97e3abc5..ca715a238c 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.spec.ts @@ -11,7 +11,7 @@ import { ControlMaxEndDatePipe } from './control-max-end-date.pipe'; import { DebugElement } from '@angular/core'; import { By } from '@angular/platform-browser'; -fdescribe('AccessControlArrayFormComponent', () => { +describe('AccessControlArrayFormComponent', () => { let component: AccessControlArrayFormComponent; let fixture: ComponentFixture; diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 10ce81d6fc..7e46a53ed5 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -65,6 +65,11 @@ export class AccessControlFormContainerComponent impleme * Will be used from a parent component to read the value of the form */ getFormValue() { + console.log({ + bitstream: this.bitstreamAccessCmp.getValue(), + item: this.itemAccessCmp.getValue(), + state: this.state + }); return { bitstream: this.bitstreamAccessCmp.getValue(), item: this.itemAccessCmp.getValue(), diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts index 9e733b5694..1bd2efcfef 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.spec.ts @@ -1,12 +1,14 @@ import { TestBed } from '@angular/core/testing'; -import { BulkAccessControlService } from './bulk-access-control.service'; +import { BulkAccessControlService, BulkAccessPayload } from './bulk-access-control.service'; import { ScriptDataService } from '../../core/data/processes/script-data.service'; import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; -fdescribe('BulkAccessControlService', () => { +describe('BulkAccessControlService', () => { let service: BulkAccessControlService; let scriptServiceSpy: jasmine.SpyObj; + + beforeEach(() => { const spy = jasmine.createSpyObj('ScriptDataService', ['invoke']); TestBed.configureTestingModule({ @@ -25,7 +27,7 @@ fdescribe('BulkAccessControlService', () => { describe('createPayloadFile', () => { it('should create a file and return the URL and file object', () => { - const payload = { data: 'test' }; + const payload: BulkAccessPayload = { state: null, bitstreamAccess: null, itemAccess: null }; const result = service.createPayloadFile(payload); expect(result.url).toBeTruthy(); diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index f5afe338dd..77fbcbffb2 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -4,11 +4,17 @@ import { ScriptDataService } from '../../core/data/processes/script-data.service import { ProcessParameter } from '../../process-page/processes/process-parameter.model'; import { AccessControlFormState } from './access-control-form-container.component'; +export interface BulkAccessPayload { + state: AccessControlFormState; + bitstreamAccess: any; + itemAccess: any; +} + @Injectable({ providedIn: 'root' }) export class BulkAccessControlService { constructor(private scriptService: ScriptDataService) {} - createPayloadFile(payload: { state: AccessControlFormState, bitstreamAccess, itemAccess }) { + createPayloadFile(payload: BulkAccessPayload) { const content = convertToBulkAccessControlFileModel(payload); const blob = new Blob([JSON.stringify(content, null, 2)], { diff --git a/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts b/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts index 1535671f79..496ef28761 100644 --- a/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts +++ b/src/app/shared/object-list/selectable-list/selectable-list.service.spec.ts @@ -11,7 +11,7 @@ import { } from './selectable-list.actions'; import { AppState } from '../../../app.reducer'; -class SelectableObject extends ListableObject { +export class SelectableObject extends ListableObject { constructor(private value: string) { super(); } From f3aa2d47a6dc5b1397a3f683452b90d6fe1f4784 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 11 May 2023 11:10:00 +0200 Subject: [PATCH 616/833] [CST-9636] finalize implementation --- .../browse/bulk-access-browse.component.ts | 5 +- .../bulk-access/bulk-access.component.spec.ts | 97 +++++++++++++------ .../bulk-access/bulk-access.component.ts | 65 +++++++------ 3 files changed, 109 insertions(+), 58 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index 53a7302b46..eff5942d4e 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; -import { distinctUntilChanged, map, tap } from 'rxjs/operators'; +import { distinctUntilChanged, map } from 'rxjs/operators'; import { SEARCH_CONFIG_SERVICE } from '../../../my-dspace-page/my-dspace-page.component'; import { SearchConfigurationService } from '../../../core/shared/search/search-configuration.service'; @@ -67,8 +67,7 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)), - tap(console.log) + map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) ).subscribe(this.objectsSelected$) ) } diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 3372f98dab..8a64d01df4 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -10,6 +10,9 @@ import { SelectableListService } from '../../shared/object-list/selectable-list/ import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; import { createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { Process } from '../../process-page/processes/process.model'; +import { RouterTestingModule } from '@angular/router/testing'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; +import { NotificationsServiceStub } from '../../shared/testing/notifications-service.stub'; fdescribe('BulkAccessComponent', () => { let component: BulkAccessComponent; @@ -47,6 +50,13 @@ fdescribe('BulkAccessComponent', () => { } }; + const mockFile = { + "uuids": [ + '1234', '5678' + ], + "file": { } + } + const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { getValue: jasmine.createSpy('getValue'), reset: jasmine.createSpy('reset') @@ -55,12 +65,18 @@ fdescribe('BulkAccessComponent', () => { const selectableListState: SelectableListState = { id: 'test', selection }; const expectedIdList = ['1234', '5678']; + const selectableListStateEmpty: SelectableListState = { id: 'test', selection: [] }; + beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ TranslateModule.forRoot() ], + imports: [ + RouterTestingModule, + TranslateModule.forRoot() + ], declarations: [ BulkAccessComponent ], providers: [ { provide: BulkAccessControlService, useValue: bulkAccessControlServiceMock }, + { provide: NotificationsService, useValue: NotificationsServiceStub }, { provide: SelectableListService, useValue: selectableListServiceMock } ], schemas: [NO_ERRORS_SCHEMA] @@ -73,43 +89,70 @@ fdescribe('BulkAccessComponent', () => { component = fixture.componentInstance; bulkAccessControlService = TestBed.inject(BulkAccessControlService); selectableListService = TestBed.inject(SelectableListService); - (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); - fixture.detectChanges(); - component.settings = mockSettings; + }); afterEach(() => { fixture.destroy(); }); - it('should create', () => { - expect(component).toBeTruthy(); + describe('when there are no elements selected', () => { + + beforeEach(() => { + + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListStateEmpty)); + fixture.detectChanges(); + component.settings = mockSettings; + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should generate the id list by selected elements', () => { + expect(component.objectsSelected$.value).toEqual([]); + }); + + it('should disable the execute button when there are no objects selected', () => { + expect(component.canExport()).toBe(false); + }); + }); - it('should generate the id list by selected elements', () => { - expect(component.objectsSelected$.value).toEqual(expectedIdList); - }); + describe('when there are elements selected', () => { - it('should disable the execute button when there are no objects selected', () => { - expect(component.canExport()).toBe(false); - }); + beforeEach(() => { - it('should enable the execute button when there are objects selected', () => { - component.objectsSelected$.next(['1234']); - expect(component.canExport()).toBe(true); - }); + (component as any).selectableListService.getSelectableList.and.returnValue(of(selectableListState)); + fixture.detectChanges(); + component.settings = mockSettings; + }); - it('should call the settings reset method when reset is called', () => { - spyOn(component.settings, 'reset'); - component.reset(); - expect(component.settings.reset).toHaveBeenCalled(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); - it('should call the bulkAccessControlService executeScript method when submit is called', () => { - (component.settings as any).getValue.and.returnValue(mockFormState) - bulkAccessControlService.executeScript.and.returnValue(createSuccessfulRemoteDataObject$(new Process())); - component.objectsSelected$.next(['1234']); - component.submit(); - expect(bulkAccessControlService.executeScript).toHaveBeenCalled(); + it('should generate the id list by selected elements', () => { + expect(component.objectsSelected$.value).toEqual(expectedIdList); + }); + + it('should enable the execute button when there are objects selected', () => { + component.objectsSelected$.next(['1234']); + expect(component.canExport()).toBe(true); + }); + + it('should call the settings reset method when reset is called', () => { + component.reset(); + expect(component.settings.reset).toHaveBeenCalled(); + }); + + it('should call the bulkAccessControlService executeScript method when submit is called', () => { + (component.settings as any).getValue.and.returnValue(mockFormState); + bulkAccessControlService.createPayloadFile.and.returnValue(mockFile); + bulkAccessControlService.executeScript.and.returnValue(createSuccessfulRemoteDataObject$(new Process())); + component.objectsSelected$.next(['1234']); + component.submit(); + expect(bulkAccessControlService.executeScript).toHaveBeenCalled(); + }); }); }); diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index 8a82edb273..b928f3da4a 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -1,36 +1,28 @@ import { Component, OnInit, ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; + +import { BehaviorSubject, Subscription } from 'rxjs'; +import { distinctUntilChanged, map } from 'rxjs/operators'; +import { TranslateService } from '@ngx-translate/core'; import { BulkAccessSettingsComponent } from './settings/bulk-access-settings.component'; -import { distinctUntilChanged, map, take, tap } from 'rxjs/operators'; import { BulkAccessControlService } from '../../shared/access-control-form-container/bulk-access-control.service'; import { SelectableListState } from '../../shared/object-list/selectable-list/selectable-list.reducer'; -import { BehaviorSubject, Subscription } from 'rxjs'; import { SelectableListService } from '../../shared/object-list/selectable-list/selectable-list.service'; +import { getFirstCompletedRemoteData } from '../../core/shared/operators'; +import { RemoteData } from '../../core/data/remote-data'; +import { Process } from '../../process-page/processes/process.model'; +import { isNotEmpty } from '../../shared/empty.util'; +import { getProcessDetailRoute } from '../../process-page/process-page-routing.paths'; +import { NotificationsService } from '../../shared/notifications/notifications.service'; @Component({ selector: 'ds-bulk-access', - // templateUrl: './bulk-access.component.html', - template: `
    - -
    - - -
    - -
    - - -
    -
    `, + templateUrl: './bulk-access.component.html', styleUrls: ['./bulk-access.component.scss'] }) export class BulkAccessComponent implements OnInit { - /** * The selection list id */ @@ -53,16 +45,18 @@ export class BulkAccessComponent implements OnInit { constructor( private bulkAccessControlService: BulkAccessControlService, - private selectableListService: SelectableListService - ) { } + private notificationsService: NotificationsService, + private router: Router, + private selectableListService: SelectableListService, + private translationService: TranslateService + ) { + } ngOnInit(): void { this.subs.push( this.selectableListService.getSelectableList(this.listId).pipe( distinctUntilChanged(), - tap(console.log), - map((list: SelectableListState) => this.generateIdListBySelectedElements(list)), - tap(console.log) + map((list: SelectableListState) => this.generateIdListBySelectedElements(list)) ).subscribe(this.objectsSelected$) ) } @@ -97,9 +91,24 @@ export class BulkAccessComponent implements OnInit { this.bulkAccessControlService.executeScript( this.objectsSelected$.value || [], file - ).pipe(take(1)).subscribe((res) => { - console.log('success', res); - }); + ).pipe( + getFirstCompletedRemoteData(), + map((rd: RemoteData) => { + if (rd.hasSucceeded) { + const title = this.translationService.get('process.new.notification.success.title'); + const content = this.translationService.get('process.new.notification.success.content'); + this.notificationsService.success(title, content); + if (isNotEmpty(rd.payload)) { + this.router.navigateByUrl(getProcessDetailRoute(rd.payload.processId)); + } + return true; + } else { + const title = this.translationService.get('process.new.notification.error.title'); + const content = this.translationService.get('process.new.notification.error.content'); + this.notificationsService.error(title, content); + return false; + } + })).subscribe(); } /** From 3221621e6cab233c2efdf217c6dc06c011ee48fe Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 May 2023 11:17:19 +0200 Subject: [PATCH 617/833] 100414: Missing search result statistics - renaming object to clickedObject --- src/app/search-page/search-tracker.component.ts | 6 +++--- src/app/statistics/angulartics/dspace-provider.ts | 2 +- src/app/statistics/statistics.service.ts | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/search-page/search-tracker.component.ts b/src/app/search-page/search-tracker.component.ts index 6aa043cb54..1912b237ec 100644 --- a/src/app/search-page/search-tracker.component.ts +++ b/src/app/search-page/search-tracker.component.ts @@ -80,7 +80,7 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit, O this.getSearchOptionsAndObjects().pipe( take(1), map((options) => this.transformOptionsToEventProperties(Object.assign({}, options, { - object: uuid, + clickedObject: uuid, }))) ) ), @@ -112,7 +112,7 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit, O * that can be sent to Angularitics for triggering a search event * @param options */ - transformOptionsToEventProperties(options: { config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, object?: string }): any { + transformOptionsToEventProperties(options: { config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, clickedObject?: string }): any { const filters: { filter: string, operator: string, value: string, label: string; }[] = []; const appliedFilters = options.searchQueryResponse.appliedFilters || []; for (let i = 0, filtersLength = appliedFilters.length; i < filtersLength; i++) { @@ -134,7 +134,7 @@ export class SearchTrackerComponent extends SearchComponent implements OnInit, O order: options.config.sort.direction }, filters: filters, - object: options.object, + clickedObject: options.clickedObject, }, }; } diff --git a/src/app/statistics/angulartics/dspace-provider.ts b/src/app/statistics/angulartics/dspace-provider.ts index 30a56ad505..5297f6fc38 100644 --- a/src/app/statistics/angulartics/dspace-provider.ts +++ b/src/app/statistics/angulartics/dspace-provider.ts @@ -32,7 +32,7 @@ export class Angulartics2DSpace { event.properties.page, event.properties.sort, event.properties.filters, - event.properties.object, + event.properties.clickedObject, ); } } diff --git a/src/app/statistics/statistics.service.ts b/src/app/statistics/statistics.service.ts index b9d078ad22..e9c21aa37d 100644 --- a/src/app/statistics/statistics.service.ts +++ b/src/app/statistics/statistics.service.ts @@ -45,14 +45,14 @@ export class StatisticsService { * @param page: An object that describes the pagination status * @param sort: An object that describes the sort status * @param filters: An array of search filters used to filter the result set - * @param object: Object clicked + * @param clickedObject: UUID of object clicked */ trackSearchEvent( searchOptions: SearchOptions, page: { size: number, totalElements: number, totalPages: number, number: number }, sort: { by: string, order: string }, filters?: { filter: string, operator: string, value: string, label: string }[], - object?: string, + clickedObject?: string, ) { const body = { query: searchOptions.query, @@ -89,8 +89,8 @@ export class StatisticsService { } Object.assign(body, { appliedFilters: bodyFilters }); } - if (hasValue(object)) { - Object.assign(body, { object }); + if (hasValue(clickedObject)) { + Object.assign(body, { clickedObject }); } this.sendEvent('/statistics/searchevents', body); } From 0f0847c069388e92472e6dbc91be74a15de0db79 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 20 Apr 2023 11:48:16 +0200 Subject: [PATCH 618/833] 100414: Refactor SearchTrackerComponent to SearchComponent --- src/app/core/shared/search/search.service.ts | 4 +- src/app/search-page/search-page.module.ts | 2 - .../search-page/search-tracker.component.html | 1 - .../search-page/search-tracker.component.scss | 3 - .../search-page/search-tracker.component.ts | 171 ------------------ src/app/shared/search/search.component.ts | 74 ++++++-- 6 files changed, 66 insertions(+), 189 deletions(-) delete mode 100644 src/app/search-page/search-tracker.component.html delete mode 100644 src/app/search-page/search-tracker.component.scss delete mode 100644 src/app/search-page/search-tracker.component.ts diff --git a/src/app/core/shared/search/search.service.ts b/src/app/core/shared/search/search.service.ts index c8ce4b0348..2f3d3bd184 100644 --- a/src/app/core/shared/search/search.service.ts +++ b/src/app/core/shared/search/search.service.ts @@ -334,8 +334,9 @@ export class SearchService implements OnDestroy { * Send search event to rest api using angularitics * @param config Paginated search options used * @param searchQueryResponse The response objects of the performed search + * @param object Optional UUID of an object a search was performed and clicked for */ - trackSearch(config: PaginatedSearchOptions, searchQueryResponse: SearchObjects) { + trackSearch(config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, object?: string) { const filters: { filter: string, operator: string, value: string, label: string; }[] = []; const appliedFilters = searchQueryResponse.appliedFilters || []; for (let i = 0, filtersLength = appliedFilters.length; i < filtersLength; i++) { @@ -357,6 +358,7 @@ export class SearchService implements OnDestroy { order: config.sort.direction }, filters: filters, + object, }, }); } diff --git a/src/app/search-page/search-page.module.ts b/src/app/search-page/search-page.module.ts index 758eca15c0..82d4dbbe67 100644 --- a/src/app/search-page/search-page.module.ts +++ b/src/app/search-page/search-page.module.ts @@ -4,7 +4,6 @@ import { CoreModule } from '../core/core.module'; import { SharedModule } from '../shared/shared.module'; import { SidebarService } from '../shared/sidebar/sidebar.service'; import { ConfigurationSearchPageGuard } from './configuration-search-page.guard'; -import { SearchTrackerComponent } from './search-tracker.component'; import { StatisticsModule } from '../statistics/statistics.module'; import { SearchPageComponent } from './search-page.component'; import { SidebarFilterService } from '../shared/sidebar/filter/sidebar-filter.service'; @@ -17,7 +16,6 @@ import { SearchModule } from '../shared/search/search.module'; const components = [ SearchPageComponent, - SearchTrackerComponent, ThemedSearchPageComponent ]; diff --git a/src/app/search-page/search-tracker.component.html b/src/app/search-page/search-tracker.component.html deleted file mode 100644 index c0c0ffe181..0000000000 --- a/src/app/search-page/search-tracker.component.html +++ /dev/null @@ -1 +0,0 @@ -  diff --git a/src/app/search-page/search-tracker.component.scss b/src/app/search-page/search-tracker.component.scss deleted file mode 100644 index c76cafbe44..0000000000 --- a/src/app/search-page/search-tracker.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -:host { - display: none -} diff --git a/src/app/search-page/search-tracker.component.ts b/src/app/search-page/search-tracker.component.ts deleted file mode 100644 index c33496eaaa..0000000000 --- a/src/app/search-page/search-tracker.component.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { Component, Inject, OnDestroy, OnInit } from '@angular/core'; -import { Angulartics2 } from 'angulartics2'; -import { filter, map, switchMap, take } from 'rxjs/operators'; -import { SearchComponent } from '../shared/search/search.component'; -import { SidebarService } from '../shared/sidebar/sidebar.service'; -import { HostWindowService } from '../shared/host-window.service'; -import { SEARCH_CONFIG_SERVICE } from '../my-dspace-page/my-dspace-page.component'; -import { RouteService } from '../core/services/route.service'; -import { SearchConfigurationService } from '../core/shared/search/search-configuration.service'; -import { SearchService } from '../core/shared/search/search.service'; -import { PaginatedSearchOptions } from '../shared/search/models/paginated-search-options.model'; -import { SearchObjects } from '../shared/search/models/search-objects.model'; -import { NavigationStart, Router } from '@angular/router'; -import { RemoteData } from '../core/data/remote-data'; -import { DSpaceObject } from '../core/shared/dspace-object.model'; -import { getFirstSucceededRemoteData } from '../core/shared/operators'; -import { inspect } from 'util'; -import { hasValue, hasValueOperator, isNotEmpty } from '../shared/empty.util'; -import { Subscription } from 'rxjs/internal/Subscription'; -import { Observable } from 'rxjs/internal/Observable'; -import { ITEM_MODULE_PATH } from '../item-page/item-page-routing-paths'; -import { COLLECTION_MODULE_PATH } from '../collection-page/collection-page-routing-paths'; -import { COMMUNITY_MODULE_PATH } from '../community-page/community-page-routing-paths'; - -/** - * This component triggers a page view statistic - */ -@Component({ - selector: 'ds-search-tracker', - styleUrls: ['./search-tracker.component.scss'], - templateUrl: './search-tracker.component.html', - providers: [ - { - provide: SEARCH_CONFIG_SERVICE, - useClass: SearchConfigurationService - } - ] -}) -export class SearchTrackerComponent extends SearchComponent implements OnInit, OnDestroy { - /** - * Regex to match UUIDs - */ - uuidRegex = /\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g; - - /** - * List of paths that are considered to be the start of a route to an object page (excluding "/", e.g. "items") - * These are expected to end on an object UUID - * If they match the route we're navigating to, an object property will be added to the search event sent - */ - allowedObjectPaths: string[] = ['entities', ITEM_MODULE_PATH, COLLECTION_MODULE_PATH, COMMUNITY_MODULE_PATH]; - - /** - * Array to track all subscriptions and unsubscribe them onDestroy - * @type {Array} - */ - subs: Subscription[] = []; - - constructor( - protected service: SearchService, - protected sidebarService: SidebarService, - protected windowService: HostWindowService, - @Inject(SEARCH_CONFIG_SERVICE) public searchConfigService: SearchConfigurationService, - protected routeService: RouteService, - public angulartics2: Angulartics2, - protected router: Router - ) { - super(service, sidebarService, windowService, searchConfigService, routeService, router); - } - - ngOnInit(): void { - this.subs.push( - this.getSearchOptionsAndObjects().subscribe((options) => { - this.trackEvent(this.transformOptionsToEventProperties(options)); - }), - this.router.events.pipe( - filter((event) => event instanceof NavigationStart), - map((event: NavigationStart) => this.getDsoUUIDFromUrl(event.url)), - hasValueOperator(), - switchMap((uuid) => - this.getSearchOptionsAndObjects().pipe( - take(1), - map((options) => this.transformOptionsToEventProperties(Object.assign({}, options, { - clickedObject: uuid, - }))) - ) - ), - ).subscribe((options) => { - this.trackEvent(options); - }), - ); - } - - /** - * Get a combination of the currently applied search options and search query response - */ - getSearchOptionsAndObjects(): Observable<{ config: PaginatedSearchOptions, searchQueryResponse: SearchObjects }> { - return this.getSearchOptions().pipe( - switchMap((options: PaginatedSearchOptions) => - this.service.searchEntries(options).pipe( - getFirstSucceededRemoteData(), - map((rd: RemoteData>) => ({ - config: options, - searchQueryResponse: rd.payload - })) - ) - ), - ); - } - - /** - * Transform the given options containing search-options, query-response and optional object UUID into properties - * that can be sent to Angularitics for triggering a search event - * @param options - */ - transformOptionsToEventProperties(options: { config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, clickedObject?: string }): any { - const filters: { filter: string, operator: string, value: string, label: string; }[] = []; - const appliedFilters = options.searchQueryResponse.appliedFilters || []; - for (let i = 0, filtersLength = appliedFilters.length; i < filtersLength; i++) { - const appliedFilter = appliedFilters[i]; - filters.push(appliedFilter); - } - return { - action: 'search', - properties: { - searchOptions: options.config, - page: { - size: options.config.pagination.size, // same as searchQueryResponse.page.elementsPerPage - totalElements: options.searchQueryResponse.pageInfo.totalElements, - totalPages: options.searchQueryResponse.pageInfo.totalPages, - number: options.config.pagination.currentPage, // same as searchQueryResponse.page.currentPage - }, - sort: { - by: options.config.sort.field, - order: options.config.sort.direction - }, - filters: filters, - clickedObject: options.clickedObject, - }, - }; - } - - /** - * Track an event with given properties - * @param properties - */ - trackEvent(properties: any) { - this.angulartics2.eventTrack.next(properties); - } - - /** - * Get the UUID from a DSO url - * Return null if the url isn't an object page (allowedObjectPaths) or the UUID couldn't be found - * @param url - */ - getDsoUUIDFromUrl(url: string): string { - if (isNotEmpty(url)) { - if (this.allowedObjectPaths.some((path) => url.startsWith(`/${path}`))) { - const uuid = url.substring(url.lastIndexOf('/') + 1); - if (uuid.match(this.uuidRegex)) { - return uuid; - } - } - } - return null; - } - - ngOnDestroy() { - super.ngOnDestroy(); - this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); - } -} diff --git a/src/app/shared/search/search.component.ts b/src/app/shared/search/search.component.ts index 2abd5290cb..1d1a6a5f2f 100644 --- a/src/app/shared/search/search.component.ts +++ b/src/app/shared/search/search.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnInit, Output } from '@angular/core'; -import { Router } from '@angular/router'; +import { NavigationStart, Router } from '@angular/router'; import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; -import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; +import { debounceTime, distinctUntilChanged, filter, map, switchMap, take } from 'rxjs/operators'; import { uniqueId } from 'lodash'; import { PaginatedList } from '../../core/data/paginated-list.model'; @@ -11,7 +11,7 @@ import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { pushInOut } from '../animations/push'; import { HostWindowService } from '../host-window.service'; import { SidebarService } from '../sidebar/sidebar.service'; -import { hasValue } from '../empty.util'; +import { hasValue, hasValueOperator, isNotEmpty } from '../empty.util'; import { RouteService } from '../../core/services/route.service'; import { SEARCH_CONFIG_SERVICE } from '../../my-dspace-page/my-dspace-page.component'; import { PaginatedSearchOptions } from './models/paginated-search-options.model'; @@ -34,6 +34,9 @@ import { CollectionElementLinkType } from '../object-collection/collection-eleme import { environment } from 'src/environments/environment'; import { SubmissionObject } from '../../core/submission/models/submission-object.model'; import { SearchFilterConfig } from './models/search-filter-config.model'; +import { ITEM_MODULE_PATH } from '../../item-page/item-page-routing-paths'; +import { COLLECTION_MODULE_PATH } from '../../collection-page/collection-page-routing-paths'; +import { COMMUNITY_MODULE_PATH } from '../../community-page/community-page-routing-paths'; @Component({ selector: 'ds-search', @@ -218,9 +221,21 @@ export class SearchComponent implements OnInit { searchLink: string; /** - * Subscription to unsubscribe from + * Regex to match UUIDs */ - sub: Subscription; + uuidRegex = /\b[0-9a-f]{8}\b-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-\b[0-9a-f]{12}\b/g; + + /** + * List of paths that are considered to be the start of a route to an object page (excluding "/", e.g. "items") + * These are expected to end on an object UUID + * If they match the route we're navigating to, an object property will be added to the search event sent + */ + allowedObjectPaths: string[] = ['entities', ITEM_MODULE_PATH, COLLECTION_MODULE_PATH, COMMUNITY_MODULE_PATH]; + + /** + * Subscriptions to unsubscribe from + */ + subs: Subscription[] = []; /** * Emits an event with the current search result entries @@ -290,7 +305,7 @@ export class SearchComponent implements OnInit { ); const searchOptions$: Observable = this.getSearchOptions().pipe(distinctUntilChanged()); - this.sub = combineLatest([configuration$, searchSortOptions$, searchOptions$, sortOption$]).pipe( + this.subs.push(combineLatest([configuration$, searchSortOptions$, searchOptions$, sortOption$]).pipe( filter(([configuration, searchSortOptions, searchOptions, sortOption]: [string, SortOptions[], PaginatedSearchOptions, SortOptions]) => { // filter for search options related to instanced paginated id return searchOptions.pagination.id === this.paginationId; @@ -318,7 +333,9 @@ export class SearchComponent implements OnInit { this.retrieveSearchResults(newSearchOptions); this.retrieveFilters(searchOptions); } - }); + })); + + this.subscribeToRoutingEvents(); } /** @@ -360,12 +377,10 @@ export class SearchComponent implements OnInit { } /** - * Unsubscribe from the subscription + * Unsubscribe from the subscriptions */ ngOnDestroy(): void { - if (hasValue(this.sub)) { - this.sub.unsubscribe(); - } + this.subs.filter((sub) => hasValue(sub)).forEach((sub) => sub.unsubscribe()); } /** @@ -420,6 +435,43 @@ export class SearchComponent implements OnInit { }); } + /** + * Subscribe to routing events to detect when a user moves away from the search page + * When the user is routing to an object page, it needs to send out a separate search event containing that object's UUID + * This method should only be called once and is essentially what SearchTrackingComponent used to do (now removed) + * @private + */ + private subscribeToRoutingEvents() { + this.subs.push( + this.router.events.pipe( + filter((event) => event instanceof NavigationStart), + map((event: NavigationStart) => this.getDsoUUIDFromUrl(event.url)), + hasValueOperator(), + ).subscribe((uuid) => { + if (this.resultsRD$.value.hasSucceeded) { + this.service.trackSearch(this.searchOptions$.value, this.resultsRD$.value.payload as SearchObjects, uuid); + } + }), + ); + } + + /** + * Get the UUID from a DSO url + * Return null if the url isn't an object page (allowedObjectPaths) or the UUID couldn't be found + * @param url + */ + private getDsoUUIDFromUrl(url: string): string { + if (isNotEmpty(url)) { + if (this.allowedObjectPaths.some((path) => url.startsWith(`/${path}`))) { + const uuid = url.substring(url.lastIndexOf('/') + 1); + if (uuid.match(this.uuidRegex)) { + return uuid; + } + } + } + return null; + } + /** * Check if the sidebar is collapsed * @returns {Observable} emits true if the sidebar is currently collapsed, false if it is expanded From 540ce4d7c4454f47a06c79e48893430e90da4136 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 May 2023 12:29:07 +0200 Subject: [PATCH 619/833] 100414: Rename object to clickedObject --- src/app/core/shared/search/search.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/core/shared/search/search.service.ts b/src/app/core/shared/search/search.service.ts index 2f3d3bd184..fc433d8dd8 100644 --- a/src/app/core/shared/search/search.service.ts +++ b/src/app/core/shared/search/search.service.ts @@ -334,9 +334,9 @@ export class SearchService implements OnDestroy { * Send search event to rest api using angularitics * @param config Paginated search options used * @param searchQueryResponse The response objects of the performed search - * @param object Optional UUID of an object a search was performed and clicked for + * @param clickedObject Optional UUID of an object a search was performed and clicked for */ - trackSearch(config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, object?: string) { + trackSearch(config: PaginatedSearchOptions, searchQueryResponse: SearchObjects, clickedObject?: string) { const filters: { filter: string, operator: string, value: string, label: string; }[] = []; const appliedFilters = searchQueryResponse.appliedFilters || []; for (let i = 0, filtersLength = appliedFilters.length; i < filtersLength; i++) { @@ -358,7 +358,7 @@ export class SearchService implements OnDestroy { order: config.sort.direction }, filters: filters, - object, + clickedObject, }, }); } From e8ff0fbf3638f419a0673ccd7ab6838a53ebe88c Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Thu, 11 May 2023 12:53:18 +0200 Subject: [PATCH 620/833] [CST-5729] implemented functionality to add link tags in head html section when on item page --- server.ts | 12 ++-- .../data/signposting-data.service.spec.ts | 16 +++++ src/app/core/data/signposting-data.service.ts | 52 ++++++++++++++ src/app/core/data/signposting-data.ts | 5 ++ .../core/dspace-rest/dspace-rest.service.ts | 15 +++- .../metadata-item.service.spec.ts | 16 ----- .../metadata-item/metadata-item.service.ts | 70 ------------------- src/app/core/metadata/metadata.service.ts | 56 ++++++++++++--- src/app/init.service.ts | 4 +- src/modules/app/browser-init.service.ts | 3 - src/modules/app/server-init.service.ts | 3 - 11 files changed, 139 insertions(+), 113 deletions(-) create mode 100644 src/app/core/data/signposting-data.service.spec.ts create mode 100644 src/app/core/data/signposting-data.service.ts create mode 100644 src/app/core/data/signposting-data.ts delete mode 100644 src/app/core/metadata-item/metadata-item.service.spec.ts delete mode 100644 src/app/core/metadata-item/metadata-item.service.ts diff --git a/server.ts b/server.ts index 5a3660e4de..b8796eb05d 100644 --- a/server.ts +++ b/server.ts @@ -180,14 +180,14 @@ export function app() { changeOrigin: true })); - /** + /** * Proxy the linksets */ - router.use('/linksets**', createProxyMiddleware({ - target: `${environment.rest.baseUrl}/linksets`, - pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), - changeOrigin: true - })); + router.use('/linkset**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}/signposting/linksets`, + pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), + changeOrigin: true + })); /** * Checks if the rateLimiter property is present diff --git a/src/app/core/data/signposting-data.service.spec.ts b/src/app/core/data/signposting-data.service.spec.ts new file mode 100644 index 0000000000..45c0abb29b --- /dev/null +++ b/src/app/core/data/signposting-data.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SignpostingDataService } from './signposting-data.service'; + +describe('SignpostingDataService', () => { + let service: SignpostingDataService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SignpostingDataService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts new file mode 100644 index 0000000000..25bac49f17 --- /dev/null +++ b/src/app/core/data/signposting-data.service.ts @@ -0,0 +1,52 @@ +import { Injectable } from '@angular/core'; +import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; +// import { HttpHeaders, HttpResponse } from '@angular/common/http'; +import { catchError, map } from 'rxjs/operators'; +// import { throwError } from 'rxjs'; +import { Observable, of as observableOf } from 'rxjs'; +import { HALEndpointService } from '../shared/hal-endpoint.service'; +import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; +import { HttpHeaders } from '@angular/common/http'; + +@Injectable({ + providedIn: 'root' +}) +export class SignpostingDataService { + + constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } + + getLinks(uuid: string): Observable { + const url = this.halService.getRootHref().split('/'); + const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + + return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( + catchError((err ) => { + console.error(err); + return observableOf(false); + }), + map((res: RawRestResponse) => res) + ); + } + + getLinksets(uuid: string): Observable { + const url = this.halService.getRootHref().split('/'); + const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + + const requestOptions = { + observe: 'response' as any, + headers: new HttpHeaders({ + 'accept': 'application/linkset', + 'Content-Type': 'application/linkset' + }), + responseType: 'text' + } as any; + + return this.restService.getWithHeaders(`${baseUrl}/signposting/linksets/${uuid}`, requestOptions).pipe( + catchError((err ) => { + console.error(err); + return observableOf(false); + }), + map((res: RawRestResponse) => res) + ); + } +} diff --git a/src/app/core/data/signposting-data.ts b/src/app/core/data/signposting-data.ts new file mode 100644 index 0000000000..5734d324ec --- /dev/null +++ b/src/app/core/data/signposting-data.ts @@ -0,0 +1,5 @@ +export interface SignpostingDataLink { + href: string, + rel: string, + type: string +} diff --git a/src/app/core/dspace-rest/dspace-rest.service.ts b/src/app/core/dspace-rest/dspace-rest.service.ts index ea4e8c2831..737714869d 100644 --- a/src/app/core/dspace-rest/dspace-rest.service.ts +++ b/src/app/core/dspace-rest/dspace-rest.service.ts @@ -1,4 +1,4 @@ -import { Observable, throwError as observableThrowError } from 'rxjs'; +import { Observable, throwError as observableThrowError, throwError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; @@ -58,6 +58,19 @@ export class DspaceRestService { })); } + getWithHeaders(absoluteURL: string, reqOptions: any): Observable { + const requestOptions = reqOptions; + + return this.http.get(absoluteURL, requestOptions).pipe( + map((res) => ({ + payload: res + })), + catchError((err) => { + console.log('Error: ', err); + return throwError(() => new Error(err.error)); + })); + } + /** * Performs a request to the REST API. * diff --git a/src/app/core/metadata-item/metadata-item.service.spec.ts b/src/app/core/metadata-item/metadata-item.service.spec.ts deleted file mode 100644 index 89ca15658d..0000000000 --- a/src/app/core/metadata-item/metadata-item.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { MetadataItemService } from './metadata-item.service'; - -describe('MetadataItemService', () => { - let service: MetadataItemService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(MetadataItemService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/core/metadata-item/metadata-item.service.ts b/src/app/core/metadata-item/metadata-item.service.ts deleted file mode 100644 index a4fbcf587b..0000000000 --- a/src/app/core/metadata-item/metadata-item.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Inject, Injectable } from '@angular/core'; -import { MetadataService } from '../metadata/metadata.service'; -import { ActivatedRoute, NavigationEnd, Event as NavigationEvent, NavigationStart, Router } from '@angular/router'; -import { TranslateService } from '@ngx-translate/core'; -import { Meta, Title } from '@angular/platform-browser'; -import { DSONameService } from '../breadcrumbs/dso-name.service'; -import { BundleDataService } from '../data/bundle-data.service'; -import { BitstreamDataService } from '../data/bitstream-data.service'; -import { BitstreamFormatDataService } from '../data/bitstream-format-data.service'; -import { RootDataService } from '../data/root-data.service'; -import { CoreState } from '../core-state.model'; -import { Store } from '@ngrx/store'; -import { HardRedirectService } from '../services/hard-redirect.service'; -import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; -import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; -import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators'; -import { DOCUMENT } from '@angular/common'; - -@Injectable({ - providedIn: 'root' -}) -export class MetadataItemService extends MetadataService { - - constructor( - private router1: ActivatedRoute, - router: Router, - translate: TranslateService, - meta: Meta, - title: Title, - dsoNameService: DSONameService, - bundleDataService: BundleDataService, - bitstreamDataService: BitstreamDataService, - bitstreamFormatDataService: BitstreamFormatDataService, - rootService: RootDataService, - store: Store, - hardRedirectService: HardRedirectService, - @Inject(APP_CONFIG) appConfig: AppConfig, - authorizationService: AuthorizationDataService, - @Inject(DOCUMENT) private document: Document - ) { - super(router, translate, meta, title, dsoNameService, bundleDataService, bitstreamDataService, bitstreamFormatDataService, rootService, store, hardRedirectService, appConfig, authorizationService); - } - - public checkCurrentRoute(){ - - console.log(this.router); - - this.router1.url.subscribe(url => { - console.log(url); - console.log(url[0].path); - }); - - // this.router.events.subscribe((event: NavigationEvent) => { - // if(event instanceof NavigationStart) { - // if(event.url.startsWith('/entities')){ - // console.log('We are on ENTITIES!'); - // } - // } - // }); - } - - setLinkTag(){ - this.clearMetaTags(); - - let link: HTMLLinkElement = this.document.createElement('link'); - link.setAttribute('rel', ''); - link.setAttribute('href', ''); - this.document.head.appendChild(link); - } -} diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index c46f8b1d6e..6d5ca91b8d 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -45,6 +45,7 @@ import { CoreState } from '../core-state.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { getDownloadableBitstream } from '../shared/bitstream.operators'; import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; +import { SignpostingDataService } from '../data/signposting-data.service'; /** * The base selector function to select the metaTag section in the store @@ -96,7 +97,8 @@ export class MetadataService { private store: Store, private hardRedirectService: HardRedirectService, @Inject(APP_CONFIG) private appConfig: AppConfig, - private authorizationService: AuthorizationDataService + private authorizationService: AuthorizationDataService, + private signpostginDataService: SignpostingDataService ) { } @@ -138,7 +140,7 @@ export class MetadataService { } } - private getCurrentRoute(route: ActivatedRoute): ActivatedRoute { + public getCurrentRoute(route: ActivatedRoute): ActivatedRoute { while (route.firstChild) { route = route.firstChild; } @@ -162,6 +164,8 @@ export class MetadataService { this.setCitationAbstractUrlTag(); this.setCitationPdfUrlTag(); this.setCitationPublisherTag(); + this.setSignpostingLinks(); + this.setSignpostingLinksets(); if (this.isDissertation()) { this.setCitationDissertationNameTag(); @@ -184,6 +188,45 @@ export class MetadataService { } + /** + * Add to the + */ + private setSignpostingLinks() { + if (this.currentObject.value instanceof Item){ + const value = this.signpostginDataService.getLinks(this.currentObject.getValue().id); + value.subscribe(links => { + links.payload.forEach(link => { + this.setLinkTag(link.href, link.rel, link.type); + }); + }); + } + } + + setLinkTag(href: string, rel: string, type: string){ + let link: HTMLLinkElement = document.createElement('link'); + link.href = href; + link.rel = rel; + link.type = type; + document.head.appendChild(link); + console.log(link); + } + + private setSignpostingLinksets() { + if (this.currentObject.value instanceof Item){ + const value = this.signpostginDataService.getLinksets(this.currentObject.getValue().id); + value.subscribe(linksets => { + this.setLinkAttribute(linksets); + }); + } + } + + setLinkAttribute(linksets){ + console.log('ANDREA', linksets); + const linkAttribute = `Link: ${linksets.payload.body}`; + const textNode = document.createTextNode(linkAttribute); + document.head.appendChild(textNode); + } + /** * Add to the */ @@ -363,15 +406,6 @@ export class MetadataService { } } - /** - * Add to the - */ - // private setLinkTag(): void { - // const value = this.getMetaTagValue('dc.link'); - // this.meta.addTag({ name: 'Link', content: value }); - // this.addMetaTag('Link', value); - // } - getBitLinkIfDownloadable(bitstream: Bitstream, bitstreamRd: RemoteData>): Observable { return observableOf(bitstream).pipe( getDownloadableBitstream(this.authorizationService), diff --git a/src/app/init.service.ts b/src/app/init.service.ts index d5978d782d..2bbc589cc0 100644 --- a/src/app/init.service.ts +++ b/src/app/init.service.ts @@ -24,7 +24,6 @@ import { isAuthenticationBlocking } from './core/auth/selectors'; import { distinctUntilChanged, find } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { MenuService } from './shared/menu/menu.service'; -import { MetadataItemService } from './core/metadata-item/metadata-item.service'; /** * Performs the initialization of the app. @@ -51,7 +50,6 @@ export abstract class InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, - protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, protected menuService: MenuService, @@ -190,7 +188,7 @@ export abstract class InitService { this.breadcrumbsService.listenForRouteChanges(); this.themeService.listenForRouteChanges(); this.menuService.listenForRouteChanges(); - this.metadataItem.checkCurrentRoute(); + // this.metadataItem.checkCurrentRoute(); } /** diff --git a/src/modules/app/browser-init.service.ts b/src/modules/app/browser-init.service.ts index f38883be1e..61d57f10f9 100644 --- a/src/modules/app/browser-init.service.ts +++ b/src/modules/app/browser-init.service.ts @@ -32,7 +32,6 @@ import { logStartupMessage } from '../../../startup-message'; import { MenuService } from '../../app/shared/menu/menu.service'; import { RootDataService } from '../../app/core/data/root-data.service'; import { firstValueFrom, Subscription } from 'rxjs'; -import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs client-side initialization. @@ -52,7 +51,6 @@ export class BrowserInitService extends InitService { protected angulartics2DSpace: Angulartics2DSpace, protected googleAnalyticsService: GoogleAnalyticsService, protected metadata: MetadataService, - protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected klaroService: KlaroService, protected authService: AuthService, @@ -68,7 +66,6 @@ export class BrowserInitService extends InitService { localeService, angulartics2DSpace, metadata, - metadataItem, breadcrumbsService, themeService, menuService, diff --git a/src/modules/app/server-init.service.ts b/src/modules/app/server-init.service.ts index 074efc31e7..715f872cd9 100644 --- a/src/modules/app/server-init.service.ts +++ b/src/modules/app/server-init.service.ts @@ -21,7 +21,6 @@ import { BreadcrumbsService } from '../../app/breadcrumbs/breadcrumbs.service'; import { ThemeService } from '../../app/shared/theme-support/theme.service'; import { take } from 'rxjs/operators'; import { MenuService } from '../../app/shared/menu/menu.service'; -import { MetadataItemService } from 'src/app/core/metadata-item/metadata-item.service'; /** * Performs server-side initialization. @@ -37,7 +36,6 @@ export class ServerInitService extends InitService { protected localeService: LocaleService, protected angulartics2DSpace: Angulartics2DSpace, protected metadata: MetadataService, - protected metadataItem: MetadataItemService, protected breadcrumbsService: BreadcrumbsService, protected themeService: ThemeService, protected menuService: MenuService @@ -50,7 +48,6 @@ export class ServerInitService extends InitService { localeService, angulartics2DSpace, metadata, - metadataItem, breadcrumbsService, themeService, menuService, From 9ddd75dbdf2f3db1eafd4bd132ea5cdc6216d463 Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Thu, 11 May 2023 11:50:28 +0000 Subject: [PATCH 621/833] Use more semantically appropriate elements and explicit names --- .../view-mode-switch.component.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/app/shared/view-mode-switch/view-mode-switch.component.html b/src/app/shared/view-mode-switch/view-mode-switch.component.html index 5f70bc699c..45d219eb91 100644 --- a/src/app/shared/view-mode-switch/view-mode-switch.component.html +++ b/src/app/shared/view-mode-switch/view-mode-switch.component.html @@ -1,5 +1,5 @@ From cc34e27c20db7947ea2be87f438fde1e4a827f2e Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 May 2023 13:56:54 +0200 Subject: [PATCH 622/833] 100414: test cases --- .../shared/search/search.component.spec.ts | 73 ++++++++++++++++++- 1 file changed, 69 insertions(+), 4 deletions(-) diff --git a/src/app/shared/search/search.component.spec.ts b/src/app/shared/search/search.component.spec.ts index 3f00cf354f..85d4111b78 100644 --- a/src/app/shared/search/search.component.spec.ts +++ b/src/app/shared/search/search.component.spec.ts @@ -13,7 +13,7 @@ import { PaginationComponentOptions } from '../pagination/pagination-component-o import { SearchComponent } from './search.component'; import { SearchService } from '../../core/shared/search/search.service'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, NavigationStart } from '@angular/router'; import { By } from '@angular/platform-browser'; import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; import { SidebarService } from '../sidebar/sidebar.service'; @@ -31,6 +31,10 @@ import { SearchObjects } from './models/search-objects.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { SearchFilterConfig } from './models/search-filter-config.model'; import { FilterType } from './models/filter-type.model'; +import { createPaginatedList } from '../testing/utils.test'; +import { COMMUNITY_MODULE_PATH, getCommunityPageRoute } from '../../community-page/community-page-routing-paths'; +import { getCollectionPageRoute } from '../../collection-page/collection-page-routing-paths'; +import { getItemPageRoute } from '../../item-page/item-page-routing-paths'; let comp: SearchComponent; let fixture: ComponentFixture; @@ -101,8 +105,9 @@ const searchServiceStub = jasmine.createSpyObj('SearchService', { search: mockResultsRD$, getSearchLink: '/search', getScopes: observableOf(['test-scope']), - getSearchConfigurationFor: createSuccessfulRemoteDataObject$(searchConfig) -}); + getSearchConfigurationFor: createSuccessfulRemoteDataObject$(searchConfig), + trackSearch: {}, +}) as SearchService; const configurationParam = 'default'; const queryParam = 'test query'; const scopeParam = '7669c72a-3f2a-451f-a3b9-9210e7a4c02f'; @@ -237,7 +242,7 @@ export function configureSearchComponentTestingModule(compType, additionalDeclar }).compileComponents(); } -describe('SearchComponent', () => { +fdescribe('SearchComponent', () => { beforeEach(waitForAsync(() => { configureSearchComponentTestingModule(SearchComponent); })); @@ -327,4 +332,64 @@ describe('SearchComponent', () => { })); }); + + describe('getDsoUUIDFromUrl', () => { + let url: string; + let result: string; + + describe('when the navigated URL is an entity route', () => { + beforeEach(() => { + url = '/entities/publication/9a364471-3f19-4e7b-916a-a24a44ff48e3'; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is a community route', () => { + beforeEach(() => { + url = `${getCommunityPageRoute('9a364471-3f19-4e7b-916a-a24a44ff48e3')}`; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is a collection route', () => { + beforeEach(() => { + url = `${getCollectionPageRoute('9a364471-3f19-4e7b-916a-a24a44ff48e3')}`; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is an item route', () => { + beforeEach(() => { + url = '/items/9a364471-3f19-4e7b-916a-a24a44ff48e3'; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is an invalid route', () => { + beforeEach(() => { + url = '/invalid/object/route/9a364471-3f19-4e7b-916a-a24a44ff48e3'; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return null', () => { + expect(result).toBeNull(); + }); + }); + }); }); From 6675b61f81220b8ee46566182567f0bf764accb8 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 May 2023 13:56:54 +0200 Subject: [PATCH 623/833] 100414: test cases --- .../shared/search/search.component.spec.ts | 73 ++++++++++++++++++- 1 file changed, 69 insertions(+), 4 deletions(-) diff --git a/src/app/shared/search/search.component.spec.ts b/src/app/shared/search/search.component.spec.ts index 3f00cf354f..85d4111b78 100644 --- a/src/app/shared/search/search.component.spec.ts +++ b/src/app/shared/search/search.component.spec.ts @@ -13,7 +13,7 @@ import { PaginationComponentOptions } from '../pagination/pagination-component-o import { SearchComponent } from './search.component'; import { SearchService } from '../../core/shared/search/search.service'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, NavigationStart } from '@angular/router'; import { By } from '@angular/platform-browser'; import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; import { SidebarService } from '../sidebar/sidebar.service'; @@ -31,6 +31,10 @@ import { SearchObjects } from './models/search-objects.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { SearchFilterConfig } from './models/search-filter-config.model'; import { FilterType } from './models/filter-type.model'; +import { createPaginatedList } from '../testing/utils.test'; +import { COMMUNITY_MODULE_PATH, getCommunityPageRoute } from '../../community-page/community-page-routing-paths'; +import { getCollectionPageRoute } from '../../collection-page/collection-page-routing-paths'; +import { getItemPageRoute } from '../../item-page/item-page-routing-paths'; let comp: SearchComponent; let fixture: ComponentFixture; @@ -101,8 +105,9 @@ const searchServiceStub = jasmine.createSpyObj('SearchService', { search: mockResultsRD$, getSearchLink: '/search', getScopes: observableOf(['test-scope']), - getSearchConfigurationFor: createSuccessfulRemoteDataObject$(searchConfig) -}); + getSearchConfigurationFor: createSuccessfulRemoteDataObject$(searchConfig), + trackSearch: {}, +}) as SearchService; const configurationParam = 'default'; const queryParam = 'test query'; const scopeParam = '7669c72a-3f2a-451f-a3b9-9210e7a4c02f'; @@ -237,7 +242,7 @@ export function configureSearchComponentTestingModule(compType, additionalDeclar }).compileComponents(); } -describe('SearchComponent', () => { +fdescribe('SearchComponent', () => { beforeEach(waitForAsync(() => { configureSearchComponentTestingModule(SearchComponent); })); @@ -327,4 +332,64 @@ describe('SearchComponent', () => { })); }); + + describe('getDsoUUIDFromUrl', () => { + let url: string; + let result: string; + + describe('when the navigated URL is an entity route', () => { + beforeEach(() => { + url = '/entities/publication/9a364471-3f19-4e7b-916a-a24a44ff48e3'; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is a community route', () => { + beforeEach(() => { + url = `${getCommunityPageRoute('9a364471-3f19-4e7b-916a-a24a44ff48e3')}`; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is a collection route', () => { + beforeEach(() => { + url = `${getCollectionPageRoute('9a364471-3f19-4e7b-916a-a24a44ff48e3')}`; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is an item route', () => { + beforeEach(() => { + url = '/items/9a364471-3f19-4e7b-916a-a24a44ff48e3'; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return the UUID', () => { + expect(result).toEqual('9a364471-3f19-4e7b-916a-a24a44ff48e3'); + }); + }); + + describe('when the navigated URL is an invalid route', () => { + beforeEach(() => { + url = '/invalid/object/route/9a364471-3f19-4e7b-916a-a24a44ff48e3'; + result = (comp as any).getDsoUUIDFromUrl(url); + }); + + it('should return null', () => { + expect(result).toBeNull(); + }); + }); + }); }); From f5b7bea3ec7fb17e15cab82ee1d37918594c3813 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 May 2023 14:08:05 +0200 Subject: [PATCH 624/833] 100414: Lint fixes --- src/app/shared/search/search.component.spec.ts | 6 ++---- src/app/shared/search/search.component.ts | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/search/search.component.spec.ts b/src/app/shared/search/search.component.spec.ts index 85d4111b78..ff849a17d2 100644 --- a/src/app/shared/search/search.component.spec.ts +++ b/src/app/shared/search/search.component.spec.ts @@ -13,7 +13,7 @@ import { PaginationComponentOptions } from '../pagination/pagination-component-o import { SearchComponent } from './search.component'; import { SearchService } from '../../core/shared/search/search.service'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { ActivatedRoute, NavigationStart } from '@angular/router'; +import { ActivatedRoute } from '@angular/router'; import { By } from '@angular/platform-browser'; import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap'; import { SidebarService } from '../sidebar/sidebar.service'; @@ -31,10 +31,8 @@ import { SearchObjects } from './models/search-objects.model'; import { DSpaceObject } from '../../core/shared/dspace-object.model'; import { SearchFilterConfig } from './models/search-filter-config.model'; import { FilterType } from './models/filter-type.model'; -import { createPaginatedList } from '../testing/utils.test'; -import { COMMUNITY_MODULE_PATH, getCommunityPageRoute } from '../../community-page/community-page-routing-paths'; +import { getCommunityPageRoute } from '../../community-page/community-page-routing-paths'; import { getCollectionPageRoute } from '../../collection-page/collection-page-routing-paths'; -import { getItemPageRoute } from '../../item-page/item-page-routing-paths'; let comp: SearchComponent; let fixture: ComponentFixture; diff --git a/src/app/shared/search/search.component.ts b/src/app/shared/search/search.component.ts index 1d1a6a5f2f..e376c4c429 100644 --- a/src/app/shared/search/search.component.ts +++ b/src/app/shared/search/search.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnInit import { NavigationStart, Router } from '@angular/router'; import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; -import { debounceTime, distinctUntilChanged, filter, map, switchMap, take } from 'rxjs/operators'; +import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; import { uniqueId } from 'lodash'; import { PaginatedList } from '../../core/data/paginated-list.model'; From c306dfd30927e5bf0f9881f26b51ca64f0498cd5 Mon Sep 17 00:00:00 2001 From: Kristof De Langhe Date: Thu, 11 May 2023 14:10:20 +0200 Subject: [PATCH 625/833] 100414: remove fdescribe --- src/app/shared/search/search.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/search/search.component.spec.ts b/src/app/shared/search/search.component.spec.ts index ff849a17d2..d0d9bdda86 100644 --- a/src/app/shared/search/search.component.spec.ts +++ b/src/app/shared/search/search.component.spec.ts @@ -240,7 +240,7 @@ export function configureSearchComponentTestingModule(compType, additionalDeclar }).compileComponents(); } -fdescribe('SearchComponent', () => { +describe('SearchComponent', () => { beforeEach(waitForAsync(() => { configureSearchComponentTestingModule(SearchComponent); })); From bd9f70acc8993912a368fd6f822cdfebc15b3b75 Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Thu, 11 May 2023 12:57:44 +0000 Subject: [PATCH 626/833] Update tests --- .../view-mode-switch/view-mode-switch.component.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts b/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts index 5780ea5cf3..248a843316 100644 --- a/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts +++ b/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts @@ -61,7 +61,7 @@ describe('ViewModeSwitchComponent', () => { searchService.setViewMode(ViewMode.ListElement); tick(); fixture.detectChanges(); - const debugElements = fixture.debugElement.queryAll(By.css('a')); + const debugElements = fixture.debugElement.queryAll(By.css('button')); listButton = debugElements[0].nativeElement; gridButton = debugElements[1].nativeElement; })); @@ -96,7 +96,7 @@ describe('ViewModeSwitchComponent', () => { searchService.setViewMode(ViewMode.ListElement); tick(); fixture.detectChanges(); - const debugElements = fixture.debugElement.queryAll(By.css('a')); + const debugElements = fixture.debugElement.queryAll(By.css('button')); listButton = debugElements[0].nativeElement; detailButton = debugElements[1].nativeElement; })); From a6897e9a6de8e2a1e1b7236453e83294ca03ccdb Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Thu, 11 May 2023 15:01:12 +0200 Subject: [PATCH 627/833] [CST-9639] Validation, translations and style fixes --- .../collection-access-control.component.html | 2 +- .../community-access-control.component.html | 2 +- .../item-access-control.component.html | 2 +- .../access-control-array-form.component.html | 2 +- .../access-control-array-form.component.ts | 7 +++++++ .../access-control-form-container.component.html | 14 +++++++++----- .../access-control-form-container.component.ts | 15 ++++++++++++--- .../bulk-access-control.service.ts | 13 ++++++++----- ...control-select-bitstreams-modal.component.html | 8 +++++--- src/assets/i18n/en.json5 | 9 +++++---- 10 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html index c53bf9c6ac..4e957cf867 100644 --- a/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html +++ b/src/app/collection-page/edit-collection-page/collection-access-control/collection-access-control.component.html @@ -1,7 +1,7 @@ -

    {{'collection-access-control-title' | translate}}

    diff --git a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html index 89999955eb..b4f2123b86 100644 --- a/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html +++ b/src/app/community-page/edit-community-page/community-access-control/community-access-control.component.html @@ -1,6 +1,6 @@ -

    {{'community-access-control-title' | translate }}

    diff --git a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html index 7bef310717..782e24fa2d 100644 --- a/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html +++ b/src/app/item-page/edit-item-page/item-access-control/item-access-control.component.html @@ -1,6 +1,6 @@ -

    {{ 'item-access-control-title' | translate }}

    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 9b1f018ffb..71f327423f 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,5 +1,5 @@ -
    +
    {{'access-control-no-access-conditions-warning-message' | translate}}
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 1e978d9aa9..d4cd923128 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -34,6 +34,13 @@ export class AccessControlArrayFormComponent implements OnInit, OnDestroy { return this.form.get('accessControl') as FormArray; } + get allControlsAreEmpty() { + if (this.accessControl.length === 0) { + return true; + } + return this.accessControl.value.every(x => x.itemName === null || x.itemName === ''); + } + /** * Add a new access control item to the form. * Start and end date are disabled by default. diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 5e5c8311c4..a5965839c1 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -1,7 +1,11 @@
    -
    +
    - + +
    @@ -75,7 +79,7 @@
    - @@ -85,9 +89,9 @@ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index 7e46a53ed5..f27fb4b5f0 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -16,6 +16,7 @@ import { import { BulkAccessConfigDataService } from '../../core/config/bulk-access-config-data.service'; import { getFirstCompletedRemoteData } from '../../core/shared/operators'; import { BulkAccessConditionOptions } from '../../core/config/models/bulk-access-condition-options.model'; +import { AlertType } from '../alert/aletr-type'; @Component({ selector: 'ds-access-control-form-container', @@ -30,6 +31,11 @@ export class AccessControlFormContainerComponent impleme */ @Input() showLimitToSpecificBitstreams = false; + /** + * The title message of the access control form (translate key) + */ + @Input() titleMessage = ''; + /** * The item to which the access control form applies */ @@ -45,6 +51,8 @@ export class AccessControlFormContainerComponent impleme @ViewChild('bitstreamAccessCmp', { static: true }) bitstreamAccessCmp: AccessControlArrayFormComponent; @ViewChild('itemAccessCmp', { static: true }) itemAccessCmp: AccessControlArrayFormComponent; + readonly AlertType = AlertType; + constructor( private bulkAccessConfigService: BulkAccessConfigDataService, private bulkAccessControlService: BulkAccessControlService, @@ -145,18 +153,19 @@ export class AccessControlFormContainerComponent impleme ngOnDestroy(): void { this.selectableListService.deselectAll(ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID); } + } const initialState: AccessControlFormState = { item: { toggleStatus: false, - accessMode: '', + accessMode: 'replace', }, bitstream: { toggleStatus: false, - accessMode: '', - changesLimit: '', // 'all' | 'selected' + accessMode: 'replace', + changesLimit: 'all', // 'all' | 'selected' selectedBitstreams: [] as ListableObject[], }, }; diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 77fbcbffb2..057a64906f 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -43,22 +43,25 @@ export class BulkAccessControlService { } export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { + const itemEnabled = payload.state.item.toggleStatus; + const bitstreamEnabled = payload.state.bitstream.toggleStatus; + const constraints = { uuid: [] }; - if (payload.state.bitstream.changesLimit === 'selected') { + if (bitstreamEnabled && payload.state.bitstream.changesLimit === 'selected') { // @ts-ignore constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); } return { item: { - mode: payload.state.item.accessMode, - accessConditions: payload.itemAccess + mode: itemEnabled ? payload.state.item.accessMode : '', + accessConditions: itemEnabled ? payload.itemAccess : [] }, bitstream: { constraints, - mode: payload.state.bitstream.accessMode, - accessConditions: payload.bitstreamAccess + mode: bitstreamEnabled ? payload.state.bitstream.accessMode : '', + accessConditions: bitstreamEnabled ? payload.bitstreamAccess : [] } }; }; diff --git a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html index e4159f3505..8cf0ecea38 100644 --- a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html +++ b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.html @@ -1,5 +1,7 @@ diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 00f2bd46b0..315b0e03fc 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -5326,7 +5326,7 @@ "admin.system-wide-alert.title": "System-wide Alerts", - "item-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", + "item-access-control-title": "This form allows you to perform changes to the access condition of all the item's metadata and all its bitstreams.", "collection-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", "community-access-control-title": "This form allows you to perform changes to the access condition of all the items owned by collection under this community. Changes can be performed on the access condition for the metadata (item) or for the content (bitstream).", "access-control-item-header-toggle": "Item's Metadata", @@ -5341,8 +5341,9 @@ "access-control-bitstreams-selected": "bitstreams selected", "access-control-reset": "Reset", "access-control-execute": "Execute", - "access-control-add-more": "Add more" - - + "access-control-add-more": "Add more", + "access-control-select-bitstreams-modal.title": "Select bitstreams", + "access-control-select-bitstreams-modal.no-items": "No items to show.", + "access-control-select-bitstreams-modal.close": "Close" } From fe8bbddac25a40be99193a98232c1bf8ba334968 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Thu, 11 May 2023 15:05:35 +0200 Subject: [PATCH 628/833] [CST-5729] Fix proxying for signposting --- server.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server.ts b/server.ts index b8796eb05d..282b1ce29a 100644 --- a/server.ts +++ b/server.ts @@ -26,7 +26,6 @@ import * as ejs from 'ejs'; import * as compression from 'compression'; import * as expressStaticGzip from 'express-static-gzip'; /* eslint-enable import/no-namespace */ - import axios from 'axios'; import LRU from 'lru-cache'; import isbot from 'isbot'; @@ -34,7 +33,7 @@ import { createCertificate } from 'pem'; import { createServer } from 'https'; import { json } from 'body-parser'; -import { existsSync, readFileSync } from 'fs'; +import { readFileSync } from 'fs'; import { join } from 'path'; import { enableProdMode } from '@angular/core'; @@ -183,8 +182,8 @@ export function app() { /** * Proxy the linksets */ - router.use('/linkset**', createProxyMiddleware({ - target: `${environment.rest.baseUrl}/signposting/linksets`, + router.use('/links**', createProxyMiddleware({ + target: `${environment.rest.baseUrl}/signposting`, pathRewrite: path => path.replace(environment.ui.nameSpace, '/'), changeOrigin: true })); From 558f8f51fb8cd6a8a0d6547b1c660e5f1d8fc917 Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Thu, 11 May 2023 18:47:01 +0200 Subject: [PATCH 629/833] [CST-5729] Implemented functionality to add Links in Response Headers on Item Page --- src/app/core/data/signposting-data.service.ts | 10 +++--- src/app/core/metadata/metadata.service.ts | 32 ++++++++++--------- .../services/server-hard-redirect.service.ts | 12 +++++++ .../core/services/server-response.service.ts | 6 ++++ .../full/full-item-page.component.ts | 8 +++-- .../item-page/simple/item-page.component.ts | 11 ++++++- 6 files changed, 55 insertions(+), 24 deletions(-) diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index 25bac49f17..0ef2b49f0f 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -16,8 +16,7 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } getLinks(uuid: string): Observable { - const url = this.halService.getRootHref().split('/'); - const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + const baseUrl = this.halService.getRootHref().replace('/api', ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err ) => { @@ -28,9 +27,8 @@ export class SignpostingDataService { ); } - getLinksets(uuid: string): Observable { - const url = this.halService.getRootHref().split('/'); - const baseUrl = `${url[0]}//${url[2]}/${url[3]}`; + getLinksets(uuid: string): Observable { + const baseUrl = this.halService.getRootHref().replace('/api', ''); const requestOptions = { observe: 'response' as any, @@ -46,7 +44,7 @@ export class SignpostingDataService { console.error(err); return observableOf(false); }), - map((res: RawRestResponse) => res) + map((res: RawRestResponse) => res.payload.body) ); } } diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index 6d5ca91b8d..3cc678fb15 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -165,7 +165,6 @@ export class MetadataService { this.setCitationPdfUrlTag(); this.setCitationPublisherTag(); this.setSignpostingLinks(); - this.setSignpostingLinksets(); if (this.isDissertation()) { this.setCitationDissertationNameTag(); @@ -211,21 +210,24 @@ export class MetadataService { console.log(link); } - private setSignpostingLinksets() { - if (this.currentObject.value instanceof Item){ - const value = this.signpostginDataService.getLinksets(this.currentObject.getValue().id); - value.subscribe(linksets => { - this.setLinkAttribute(linksets); - }); - } - } + // public setSignpostingLinksets(itemId: string) { + // let linkSet: string; - setLinkAttribute(linksets){ - console.log('ANDREA', linksets); - const linkAttribute = `Link: ${linksets.payload.body}`; - const textNode = document.createTextNode(linkAttribute); - document.head.appendChild(textNode); - } + // const value = this.signpostginDataService.getLinksets(itemId); + + // value.subscribe(linksets => { + // linkSet = linksets.payload.body; + // }); + + // return linkSet; + // } + + // setLinkAttribute(linksets){ + // console.log('ANDREA', linksets); + // const linkAttribute = `Link: ${linksets.payload.body}`; + // const textNode = document.createTextNode(linkAttribute); + // document.head.appendChild(textNode); + // } /** * Add to the diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index 94b9ed6198..a6c0e09aee 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -2,6 +2,9 @@ import { Inject, Injectable } from '@angular/core'; import { Request, Response } from 'express'; import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens'; import { HardRedirectService } from './hard-redirect.service'; +import { SignpostingDataService } from '../data/signposting-data.service'; +import { ActivatedRoute } from '@angular/router'; +import { take } from 'rxjs'; /** * Service for performing hard redirects within the server app module @@ -12,6 +15,8 @@ export class ServerHardRedirectService extends HardRedirectService { constructor( @Inject(REQUEST) protected req: Request, @Inject(RESPONSE) protected res: Response, + private signpostginDataService: SignpostingDataService, + protected route: ActivatedRoute ) { super(); } @@ -46,6 +51,13 @@ export class ServerHardRedirectService extends HardRedirectService { } console.log(`Redirecting from ${this.req.url} to ${url} with ${status}`); + + this.route.params.subscribe(params => { + this.signpostginDataService.getLinksets(params.id).pipe(take(1)).subscribe(linksets => { + this.res.setHeader('Link', linksets); + }); + }); + this.res.redirect(status, url); this.res.end(); // I haven't found a way to correctly stop Angular rendering. diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index 02e00446bc..6dd50506e9 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -35,4 +35,10 @@ export class ServerResponseService { setInternalServerError(message = 'Internal Server Error'): this { return this.setStatus(500, message); } + + setLinksetsHeader(linksets: string){ + if (this.response) { + this.response.setHeader('Link', linksets); + } + } } diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index 118e436004..44766bac7b 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -16,6 +16,8 @@ import { hasValue } from '../../shared/empty.util'; import { AuthService } from '../../core/auth/auth.service'; import { Location } from '@angular/common'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; +import { ServerResponseService } from 'src/app/core/services/server-response.service'; +import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; /** @@ -48,8 +50,10 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit, items: ItemDataService, authService: AuthService, authorizationService: AuthorizationDataService, - private _location: Location) { - super(route, router, items, authService, authorizationService); + private _location: Location, + responseService: ServerResponseService, + signpostginDataService: SignpostingDataService) { + super(route, router, items, authService, authorizationService, responseService, signpostginDataService); } /*** AoT inheritance fix, will hopefully be resolved in the near future **/ diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index 6e0db386db..058cbc667a 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -15,6 +15,8 @@ import { getItemPageRoute } from '../item-page-routing-paths'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; import { FeatureID } from '../../core/data/feature-authorization/feature-id'; +import { ServerResponseService } from '../../core/services/server-response.service'; +import { SignpostingDataService } from '../../core/data/signposting-data.service'; /** * This component renders a simple item page. @@ -62,8 +64,15 @@ export class ItemPageComponent implements OnInit { private router: Router, private items: ItemDataService, private authService: AuthService, - private authorizationService: AuthorizationDataService + private authorizationService: AuthorizationDataService, + private responseService: ServerResponseService, + private signpostginDataService: SignpostingDataService ) { + this.route.params.subscribe(params => { + this.signpostginDataService.getLinksets(params.id).subscribe(linksets => { + this.responseService.setLinksetsHeader(linksets); + }); + }); } /** From 8e5c4a73dc81069ccbcfbef0a58d3433cc05470e Mon Sep 17 00:00:00 2001 From: "Mark H. Wood" Date: Thu, 11 May 2023 13:55:53 -0400 Subject: [PATCH 630/833] Make some request-copy components themeable. --- .../deny-request-copy.component.html | 2 +- .../themed-email-request-copy.component.ts | 45 +++++++++++++++++++ .../grant-request-copy.component.html | 4 +- .../themed-grant-request-copy.component.ts | 26 +++++++++++ .../request-copy-routing.module.ts | 4 +- src/app/request-copy/request-copy.module.ts | 4 ++ 6 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts create mode 100644 src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts diff --git a/src/app/request-copy/deny-request-copy/deny-request-copy.component.html b/src/app/request-copy/deny-request-copy/deny-request-copy.component.html index c9e909ccf1..e513212f94 100644 --- a/src/app/request-copy/deny-request-copy/deny-request-copy.component.html +++ b/src/app/request-copy/deny-request-copy/deny-request-copy.component.html @@ -3,7 +3,7 @@

    {{'deny-request-copy.intro' | translate}}

    - +
    diff --git a/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts new file mode 100644 index 0000000000..6b808288ad --- /dev/null +++ b/src/app/request-copy/email-request-copy/themed-email-request-copy.component.ts @@ -0,0 +1,45 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; + +import { EmailRequestCopyComponent } from './email-request-copy.component'; +import { RequestCopyEmail } from './request-copy-email.model'; + +/** + * Themed wrapper for email-request-copy.component + */ +@Component({ + selector: 'ds-themed-email-request-copy', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html', +}) + +export class ThemedEmailRequestCopyComponent extends ThemedComponent { + /** + * Event emitter for sending the email + */ + @Output() send: EventEmitter = new EventEmitter(); + + /** + * The subject of the email + */ + @Input() subject: string; + + /** + * The contents of the email + */ + @Input() message: string; + + protected inAndOutputNames: (keyof EmailRequestCopyComponent & keyof this)[] = ['send', 'subject', 'message']; + + protected getComponentName(): string { + return 'EmailRequestCopyComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/request-copy/email-request-copy/email-request-copy.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./email-request-copy.component'); + } +} diff --git a/src/app/request-copy/grant-request-copy/grant-request-copy.component.html b/src/app/request-copy/grant-request-copy/grant-request-copy.component.html index 5cb4dbac36..179206566e 100644 --- a/src/app/request-copy/grant-request-copy/grant-request-copy.component.html +++ b/src/app/request-copy/grant-request-copy/grant-request-copy.component.html @@ -3,7 +3,7 @@

    {{'grant-request-copy.intro' | translate}}

    - +

    {{ 'grant-deny-request-copy.email.permissions.info' | translate }}

    @@ -11,7 +11,7 @@
    -
    +
    diff --git a/src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts b/src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts new file mode 100644 index 0000000000..625dcef57a --- /dev/null +++ b/src/app/request-copy/grant-request-copy/themed-grant-request-copy.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; +import { ThemedComponent } from 'src/app/shared/theme-support/themed.component'; +import { GrantRequestCopyComponent } from './grant-request-copy.component'; + +/** + * Themed wrapper for grant-request-copy.component + */ +@Component({ + selector: 'ds-themed-grant-request-copy', + styleUrls: [], + templateUrl: './../../shared/theme-support/themed.component.html', +}) + +export class ThemedGrantRequestCopyComponent extends ThemedComponent { + protected getComponentName(): string { + return 'GrantRequestCopyComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/request-copy/grant-request-copy/grant-request-copy.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./grant-request-copy.component'); + } +} diff --git a/src/app/request-copy/request-copy-routing.module.ts b/src/app/request-copy/request-copy-routing.module.ts index e7a205d0aa..c3ac0be46a 100644 --- a/src/app/request-copy/request-copy-routing.module.ts +++ b/src/app/request-copy/request-copy-routing.module.ts @@ -4,7 +4,7 @@ import { RequestCopyResolver } from './request-copy.resolver'; import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-deny-request-copy.component'; import { REQUEST_COPY_DENY_PATH, REQUEST_COPY_GRANT_PATH } from './request-copy-routing-paths'; import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; -import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-copy.component'; +import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-grant-request-copy.component'; @NgModule({ imports: [ @@ -25,7 +25,7 @@ import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-co }, { path: REQUEST_COPY_GRANT_PATH, - component: GrantRequestCopyComponent, + component: ThemedGrantRequestCopyComponent, }, ] } diff --git a/src/app/request-copy/request-copy.module.ts b/src/app/request-copy/request-copy.module.ts index d55d5ad83f..b5ea3da50c 100644 --- a/src/app/request-copy/request-copy.module.ts +++ b/src/app/request-copy/request-copy.module.ts @@ -5,7 +5,9 @@ import { GrantDenyRequestCopyComponent } from './grant-deny-request-copy/grant-d import { RequestCopyRoutingModule } from './request-copy-routing.module'; import { DenyRequestCopyComponent } from './deny-request-copy/deny-request-copy.component'; import { EmailRequestCopyComponent } from './email-request-copy/email-request-copy.component'; +import { ThemedEmailRequestCopyComponent } from './email-request-copy/themed-email-request-copy.component'; import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-copy.component'; +import { ThemedGrantRequestCopyComponent } from './grant-request-copy/themed-grant-request-copy.component'; @NgModule({ imports: [ @@ -17,7 +19,9 @@ import { GrantRequestCopyComponent } from './grant-request-copy/grant-request-co GrantDenyRequestCopyComponent, DenyRequestCopyComponent, EmailRequestCopyComponent, + ThemedEmailRequestCopyComponent, GrantRequestCopyComponent, + ThemedGrantRequestCopyComponent, ], providers: [] }) From 67976299de7ab657ccbdb60b7f4efde2e112d63f Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 12 May 2023 08:12:04 +0200 Subject: [PATCH 631/833] 101623: Fixes for rendersBrowseBy, BrowseResponseParsingService, BrowseByRoutingModule --- src/app/browse-by/browse-by-routing.module.ts | 7 ------- .../browse-by/browse-by-switcher/browse-by-decorator.ts | 2 +- .../browse-by-switcher/browse-by-switcher.component.ts | 2 +- .../themed-browse-by-taxonomy-page.component.ts | 4 +++- src/app/core/data/browse-response-parsing.service.ts | 4 +++- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/app/browse-by/browse-by-routing.module.ts b/src/app/browse-by/browse-by-routing.module.ts index b555390225..5d3697f391 100644 --- a/src/app/browse-by/browse-by-routing.module.ts +++ b/src/app/browse-by/browse-by-routing.module.ts @@ -14,13 +14,6 @@ import { I18nBreadcrumbResolver } from '../core/breadcrumbs/i18n-breadcrumb.reso path: '', resolve: { breadcrumb: BrowseByDSOBreadcrumbResolver }, children: [ - { - path: 'srsc', - component: ThemedBrowseByTaxonomyPageComponent, - canActivate: [BrowseByGuard], - resolve: { breadcrumb: I18nBreadcrumbResolver }, - data: { title: 'browse.title.page', breadcrumbKey: 'browse.metadata.srsc' } - }, { path: ':id', component: ThemedBrowseBySwitcherComponent, diff --git a/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts b/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts index ceb4c6a6c6..b59a46cae1 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-decorator.ts @@ -26,7 +26,7 @@ const map = new Map(); * @param browseByType The type of page * @param theme The optional theme for the component */ -export function rendersBrowseBy(browseByType: BrowseByDataType, theme = DEFAULT_THEME) { +export function rendersBrowseBy(browseByType: string, theme = DEFAULT_THEME) { return function decorator(component: any) { if (hasNoValue(map.get(browseByType))) { map.set(browseByType, new Map()); diff --git a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts index 3cfc735135..e4746129dc 100644 --- a/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts +++ b/src/app/browse-by/browse-by-switcher/browse-by-switcher.component.ts @@ -31,7 +31,7 @@ export class BrowseBySwitcherComponent implements OnInit { */ ngOnInit(): void { this.browseByComponent = this.route.data.pipe( - map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.dataType, this.themeService.getThemeName())) + map((data: { browseDefinition: FlatBrowseDefinition }) => this.getComponentByBrowseByType(data.browseDefinition.getRenderType(), this.themeService.getThemeName())) ); } diff --git a/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts b/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts index 9e491aeaac..212044b853 100644 --- a/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts +++ b/src/app/browse-by/browse-by-taxonomy-page/themed-browse-by-taxonomy-page.component.ts @@ -1,15 +1,17 @@ import { Component } from '@angular/core'; import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { rendersBrowseBy } from '../browse-by-switcher/browse-by-decorator'; import { BrowseByTaxonomyPageComponent } from './browse-by-taxonomy-page.component'; @Component({ selector: 'ds-themed-browse-by-taxonomy-page', - templateUrl: './browse-by-taxonomy-page.component.html', + templateUrl: '../../shared/theme-support/themed.component.html', styleUrls: [] }) /** * Themed wrapper for BrowseByTaxonomyPageComponent */ +@rendersBrowseBy('hierarchy') export class ThemedBrowseByTaxonomyPageComponent extends ThemedComponent{ protected getComponentName(): string { diff --git a/src/app/core/data/browse-response-parsing.service.ts b/src/app/core/data/browse-response-parsing.service.ts index aecba9cb50..9aa508ccf0 100644 --- a/src/app/core/data/browse-response-parsing.service.ts +++ b/src/app/core/data/browse-response-parsing.service.ts @@ -10,7 +10,9 @@ import { DSOResponseParsingService } from './dso-response-parsing.service'; /** * A ResponseParsingService used to parse RawRestResponse coming from the REST API to a BrowseDefinition object */ -@Injectable() +@Injectable({ + providedIn: 'root', + }) export class BrowseResponseParsingService extends DSOResponseParsingService { protected objectCache: ObjectCacheService; protected toCache: boolean; From 377e27b305bcc000ce28972775c9d60c14dd4567 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Fri, 12 May 2023 09:25:47 +0200 Subject: [PATCH 632/833] [CST-9636] Fix lint --- .../bulk-access-browse.component.spec.ts | 8 ++-- .../browse/bulk-access-browse.component.ts | 6 +-- .../bulk-access/bulk-access.component.spec.ts | 40 +++++++++---------- .../bulk-access/bulk-access.component.ts | 6 +-- .../bulk-access-settings.component.spec.ts | 36 ++++++++--------- .../bulk-access-settings.component.ts | 2 +- ...ntrol-select-bitstreams-modal.component.ts | 2 +- .../themed-object-list.component.ts | 18 ++++----- src/assets/i18n/en.json5 | 2 +- 9 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts index c8379b06ee..87b2a8d568 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.spec.ts @@ -69,10 +69,10 @@ describe('BulkAccessBrowseComponent', () => { it('should have an initial remote data with a paginated list as value', () => { const list = buildPaginatedList(new PageInfo({ - "elementsPerPage": 5, - "totalElements": 2, - "totalPages": 1, - "currentPage": 1 + 'elementsPerPage': 5, + 'totalElements': 2, + 'totalPages': 1, + 'currentPage': 1 }), [selected1, selected2]) ; const rd = createSuccessfulRemoteDataObject(list); diff --git a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts index eff5942d4e..e806e729c8 100644 --- a/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts +++ b/src/app/access-control/bulk-access/browse/bulk-access-browse.component.ts @@ -69,7 +69,7 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { distinctUntilChanged(), map((list: SelectableListState) => this.generatePaginatedListBySelectedElements(list)) ).subscribe(this.objectsSelected$) - ) + ); } pageNext() { @@ -87,7 +87,7 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { private calculatePageCount(pageSize, totalCount = 0) { // we suppose that if we have 0 items we want 1 empty page return totalCount < pageSize ? 1 : Math.ceil(totalCount / pageSize); - }; + } /** * Generate The RemoteData object containing the list of the selected elements @@ -114,6 +114,6 @@ export class BulkAccessBrowseComponent implements OnInit, OnDestroy { this.subs .filter((sub) => hasValue(sub)) .forEach((sub) => sub.unsubscribe()); - this.selectableListService.deselectAll(this.listId) + this.selectableListService.deselectAll(this.listId); } } diff --git a/src/app/access-control/bulk-access/bulk-access.component.spec.ts b/src/app/access-control/bulk-access/bulk-access.component.spec.ts index 8a64d01df4..ccbdabb7a6 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.spec.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.spec.ts @@ -24,38 +24,38 @@ fdescribe('BulkAccessComponent', () => { const bulkAccessControlServiceMock = jasmine.createSpyObj('bulkAccessControlService', ['createPayloadFile', 'executeScript']); const mockFormState = { - "bitstream": [], - "item": [ + 'bitstream': [], + 'item': [ { - "name": "embargo", - "startDate": { - "year": 2026, - "month": 5, - "day": 31 + 'name': 'embargo', + 'startDate': { + 'year': 2026, + 'month': 5, + 'day': 31 }, - "endDate": null + 'endDate': null } ], - "state": { - "item": { - "toggleStatus": true, - "accessMode": "replace" + 'state': { + 'item': { + 'toggleStatus': true, + 'accessMode': 'replace' }, - "bitstream": { - "toggleStatus": false, - "accessMode": "", - "changesLimit": "", - "selectedBitstreams": [] + 'bitstream': { + 'toggleStatus': false, + 'accessMode': '', + 'changesLimit': '', + 'selectedBitstreams': [] } } }; const mockFile = { - "uuids": [ + 'uuids': [ '1234', '5678' ], - "file": { } - } + 'file': { } + }; const mockSettings: any = jasmine.createSpyObj('AccessControlFormContainerComponent', { getValue: jasmine.createSpy('getValue'), diff --git a/src/app/access-control/bulk-access/bulk-access.component.ts b/src/app/access-control/bulk-access/bulk-access.component.ts index b928f3da4a..074dbc7f55 100644 --- a/src/app/access-control/bulk-access/bulk-access.component.ts +++ b/src/app/access-control/bulk-access/bulk-access.component.ts @@ -26,7 +26,7 @@ export class BulkAccessComponent implements OnInit { /** * The selection list id */ - listId: string = 'bulk-access-list'; + listId = 'bulk-access-list'; /** * The list of the objects already selected @@ -58,7 +58,7 @@ export class BulkAccessComponent implements OnInit { distinctUntilChanged(), map((list: SelectableListState) => this.generateIdListBySelectedElements(list)) ).subscribe(this.objectsSelected$) - ) + ); } canExport(): boolean { @@ -70,7 +70,7 @@ export class BulkAccessComponent implements OnInit { * This will also reset the state of the child components (bitstream and item access) */ reset(): void { - this.settings.reset() + this.settings.reset(); } /** diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts index 306d4eebde..229f7eeb11 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.spec.ts @@ -8,28 +8,28 @@ describe('BulkAccessSettingsComponent', () => { let component: BulkAccessSettingsComponent; let fixture: ComponentFixture; const mockFormState = { - "bitstream": [], - "item": [ + 'bitstream': [], + 'item': [ { - "name": "embargo", - "startDate": { - "year": 2026, - "month": 5, - "day": 31 + 'name': 'embargo', + 'startDate': { + 'year': 2026, + 'month': 5, + 'day': 31 }, - "endDate": null + 'endDate': null } ], - "state": { - "item": { - "toggleStatus": true, - "accessMode": "replace" + 'state': { + 'item': { + 'toggleStatus': true, + 'accessMode': 'replace' }, - "bitstream": { - "toggleStatus": false, - "accessMode": "", - "changesLimit": "", - "selectedBitstreams": [] + 'bitstream': { + 'toggleStatus': false, + 'accessMode': '', + 'changesLimit': '', + 'selectedBitstreams': [] } } }; @@ -68,7 +68,7 @@ describe('BulkAccessSettingsComponent', () => { it('should return the correct form value', () => { const expectedValue = mockFormState; - (component.controlForm as any).getFormValue.and.returnValue(mockFormState) + (component.controlForm as any).getFormValue.and.returnValue(mockFormState); const actualValue = component.getValue(); expect(actualValue).toEqual(expectedValue); }); diff --git a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts index 978fc41ed8..eecc016245 100644 --- a/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts +++ b/src/app/access-control/bulk-access/settings/bulk-access-settings.component.ts @@ -28,7 +28,7 @@ export class BulkAccessSettingsComponent { * This will also reset the state of the child components (bitstream and item access) */ reset() { - this.controlForm.reset() + this.controlForm.reset(); } } diff --git a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts index 171b1d59c1..617803a0c4 100644 --- a/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts +++ b/src/app/shared/access-control-form-container/item-access-control-select-bitstreams-modal/item-access-control-select-bitstreams-modal.component.ts @@ -13,7 +13,7 @@ import { TranslateService } from '@ngx-translate/core'; import { hasValue } from '../../empty.util'; import { getFirstCompletedRemoteData } from '../../../core/shared/operators'; -export const ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID = 'item-access-control-select-bitstreams' +export const ITEM_ACCESS_CONTROL_SELECT_BITSTREAMS_LIST_ID = 'item-access-control-select-bitstreams'; @Component({ selector: 'ds-item-access-control-select-bitstreams-modal', diff --git a/src/app/shared/object-list/themed-object-list.component.ts b/src/app/shared/object-list/themed-object-list.component.ts index 9448ed5939..04a95de1cb 100644 --- a/src/app/shared/object-list/themed-object-list.component.ts +++ b/src/app/shared/object-list/themed-object-list.component.ts @@ -1,13 +1,13 @@ -import {Component, EventEmitter, Input, Output} from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ObjectListComponent } from './object-list.component'; import { ThemedComponent } from '../theme-support/themed.component'; -import {PaginationComponentOptions} from '../pagination/pagination-component-options.model'; -import {SortDirection, SortOptions} from '../../core/cache/models/sort-options.model'; -import {CollectionElementLinkType} from '../object-collection/collection-element-link.type'; -import {Context} from '../../core/shared/context.model'; -import {RemoteData} from '../../core/data/remote-data'; -import {PaginatedList} from '../../core/data/paginated-list.model'; -import {ListableObject} from '../object-collection/shared/listable-object.model'; +import { PaginationComponentOptions } from '../pagination/pagination-component-options.model'; +import { SortDirection, SortOptions } from '../../core/cache/models/sort-options.model'; +import { CollectionElementLinkType } from '../object-collection/collection-element-link.type'; +import { Context } from '../../core/shared/context.model'; +import { RemoteData } from '../../core/data/remote-data'; +import { PaginatedList } from '../../core/data/paginated-list.model'; +import { ListableObject } from '../object-collection/shared/listable-object.model'; /** * Themed wrapper for ObjectListComponent @@ -53,7 +53,7 @@ export class ThemedObjectListComponent extends ThemedComponent Date: Tue, 25 Oct 2022 19:18:27 +0200 Subject: [PATCH 633/833] [DURACOM-99] Italian support added --- config/config.example.yml | 3 +++ src/config/default-app-config.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/config/config.example.yml b/config/config.example.yml index a62cce13eb..ea38303fa3 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -187,6 +187,9 @@ languages: - code: gd label: Gàidhlig active: true + - code: it + label: Italiano + active: true - code: lv label: Latviešu active: true diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 77422e4eff..80420407c7 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -220,6 +220,7 @@ export class DefaultAppConfig implements AppConfig { { code: 'es', label: 'Español', active: true }, { code: 'fr', label: 'Français', active: true }, { code: 'gd', label: 'Gàidhlig', active: true }, + { code: 'it', label: 'Italiano', active: true }, { code: 'lv', label: 'Latviešu', active: true }, { code: 'hu', label: 'Magyar', active: true }, { code: 'nl', label: 'Nederlands', active: true }, From d332296da8f827f390388763f11b759e1dbd46c7 Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Fri, 4 Nov 2022 15:57:46 +0100 Subject: [PATCH 634/833] [DURACOM-99] First italian translations (2022-11-04) --- src/assets/i18n/it.json5 | 7357 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 7357 insertions(+) create mode 100644 src/assets/i18n/it.json5 diff --git a/src/assets/i18n/it.json5 b/src/assets/i18n/it.json5 new file mode 100644 index 0000000000..ab8bf0feef --- /dev/null +++ b/src/assets/i18n/it.json5 @@ -0,0 +1,7357 @@ +{ + + // "401.help": "You're not authorized to access this page. You can use the button below to get back to the home page.", + "401.help": "Non sei autorizzato ad accedere a questa pagina. Puoi usare il pulsante qui sotto per tornare alla home page.", + + // "401.link.home-page": "Take me to the home page", + "401.link.home-page": "Torna alla home page", + + // "401.unauthorized": "unauthorized", + "401.unauthorized": "Non autorizzato", + + + + // "403.help": "You don't have permission to access this page. You can use the button below to get back to the home page.", + "403.help": "Non si dispone dell'autorizzazione per accedere a questa pagina. Puoi usare il pulsante qui sotto per tornare alla home page.", + + // "403.link.home-page": "Take me to the home page", + "403.link.home-page": "Torna alla home page", + + // "403.forbidden": "forbidden", + "403.forbidden": "vietato", + + // "500.page-internal-server-error": "Service Unavailable", + "500.page-internal-server-error": "Servizio non disponibile", + + // "500.help": "The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.", + "500.help": "Il server non è temporaneamente in grado di soddisfare la richiesta a causa di tempi di inattività di manutenzione o problemi di capacità. Riprova più tardi.", + + // "500.link.home-page": "Take me to the home page", + "500.link.home-page": "Torna alla home page", + + + // "404.help": "We can't find the page you're looking for. The page may have been moved or deleted. You can use the button below to get back to the home page. ", + "404.help": "Non riusciamo a trovare la pagina che stai cercando. La pagina potrebbe essere stata spostata o eliminata. Puoi usare il pulsante qui sotto per tornare alla home page.", + + // "404.link.home-page": "Take me to the home page", + "404.link.home-page": "Torna alla home page", + + // "404.page-not-found": "page not found", + "404.page-not-found": "Pagina non trovata", + + // "error-page.description.401": "unauthorized", + "error-page.description.401": "non autorizzato", + + // "error-page.description.403": "forbidden", + "error-page.description.403": "accesso negato", + + // "error-page.description.500": "Service Unavailable", + "error-page.description.500": "Servizio non disponibile", + + // "error-page.description.404": "page not found", + "error-page.description.404": "Pagina non trovata", + + // "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with DSpace. If the error persists, contact the administrator", + "error-page.orcid.generic-error": "Si è verificato un errore con il login via ORCID. Verifica di avere condiviso il tuo account ORCID con DSpace. Se l'errore persiste, contatta l'amministratore", + + // "access-status.embargo.listelement.badge": "Embargo", + "access-status.embargo.listelement.badge": "Embargo", + + // "access-status.metadata.only.listelement.badge": "Metadata only", + "access-status.metadata.only.listelement.badge": "Solo metadata", + + // "access-status.open.access.listelement.badge": "Open Access", + "access-status.open.access.listelement.badge": "Open Access", + + // "access-status.restricted.listelement.badge": "Restricted", + "access-status.restricted.listelement.badge": "Limitato", + + // "access-status.unknown.listelement.badge": "Unknown", + "access-status.unknown.listelement.badge": "Sconosciuto", + + // "admin.curation-tasks.breadcrumbs": "System curation tasks", + "admin.curation-tasks.breadcrumbs": "Curation task del sistema", + + // "admin.curation-tasks.title": "System curation tasks", + "admin.curation-tasks.title": "Curation task del sistema", + + // "admin.curation-tasks.header": "System curation tasks", + "admin.curation-tasks.header": "Curation task del sistema", + + // "admin.registries.bitstream-formats.breadcrumbs": "Format registry", + "admin.registries.bitstream-formats.breadcrumbs": "Formattare il registro", + + // "admin.registries.bitstream-formats.create.breadcrumbs": "Bitstream format", + "admin.registries.bitstream-formats.create.breadcrumbs": "Formato del bitstream", + + // "admin.registries.bitstream-formats.create.failure.content": "An error occurred while creating the new bitstream format.", + "admin.registries.bitstream-formats.create.failure.content": "Si è verificato un errore durante la creazione del nuovo formato bitstream.", + + // "admin.registries.bitstream-formats.create.failure.head": "Failure", + "admin.registries.bitstream-formats.create.failure.head": "Fallimento", + + // "admin.registries.bitstream-formats.create.head": "Create Bitstream format", + "admin.registries.bitstream-formats.create.head": "Crea formato Bitstream", + + // "admin.registries.bitstream-formats.create.new": "Add a new bitstream format", + "admin.registries.bitstream-formats.create.new": "Aggiungere un nuovo formato bitstream", + + // "admin.registries.bitstream-formats.create.success.content": "The new bitstream format was successfully created.", + "admin.registries.bitstream-formats.create.success.content": "Il nuovo formato bitstream è stato creato correttamente.", + + // "admin.registries.bitstream-formats.create.success.head": "Success", + "admin.registries.bitstream-formats.create.success.head": "Successo", + + // "admin.registries.bitstream-formats.delete.failure.amount": "Failed to remove {{ amount }} format(s)", + "admin.registries.bitstream-formats.delete.failure.amount": "Impossibile rimuovere i formati {{ amount }}", + + // "admin.registries.bitstream-formats.delete.failure.head": "Failure", + "admin.registries.bitstream-formats.delete.failure.head": "Fallimento", + + // "admin.registries.bitstream-formats.delete.success.amount": "Successfully removed {{ amount }} format(s)", + "admin.registries.bitstream-formats.delete.success.amount": "Rimosso con successo i formati {{ amount }}", + + // "admin.registries.bitstream-formats.delete.success.head": "Success", + "admin.registries.bitstream-formats.delete.success.head": "Successo", + + // "admin.registries.bitstream-formats.description": "This list of bitstream formats provides information about known formats and their support level.", + "admin.registries.bitstream-formats.description": "Questo elenco di formati bitstream fornisce informazioni sui formati noti e sul loro livello di supporto.", + + // "admin.registries.bitstream-formats.edit.breadcrumbs": "Bitstream format", + "admin.registries.bitstream-formats.edit.breadcrumbs": "Formato bitstream", + + // "admin.registries.bitstream-formats.edit.description.hint": "", + "admin.registries.bitstream-formats.edit.description.hint": "", + + // "admin.registries.bitstream-formats.edit.description.label": "Description", + "admin.registries.bitstream-formats.edit.description.label": "Descrizione", + + // "admin.registries.bitstream-formats.edit.extensions.hint": "Extensions are file extensions that are used to automatically identify the format of uploaded files. You can enter several extensions for each format.", + "admin.registries.bitstream-formats.edit.extensions.hint": "Le estensioni sono estensioni di file che vengono utilizzate per identificare automaticamente il formato dei file caricati. È possibile immettere diverse estensioni per ogni formato.", + + // "admin.registries.bitstream-formats.edit.extensions.label": "File extensions", + "admin.registries.bitstream-formats.edit.extensions.label": "Estensione", + + // "admin.registries.bitstream-formats.edit.extensions.placeholder": "Enter a file extension without the dot", + "admin.registries.bitstream-formats.edit.extensions.placeholder": "Inserisci un'estensione di file senza il punto", + + // "admin.registries.bitstream-formats.edit.failure.content": "An error occurred while editing the bitstream format.", + "admin.registries.bitstream-formats.edit.failure.content": "Si è verificato un errore durante la modifica del formato bitstream.", + + // "admin.registries.bitstream-formats.edit.failure.head": "Failure", + "admin.registries.bitstream-formats.edit.failure.head": "Fallimento", + + // "admin.registries.bitstream-formats.edit.head": "Bitstream format: {{ format }}", + "admin.registries.bitstream-formats.edit.head": "Formato Bitstream: {{ format }}", + + // "admin.registries.bitstream-formats.edit.internal.hint": "Formats marked as internal are hidden from the user, and used for administrative purposes.", + "admin.registries.bitstream-formats.edit.internal.hint": "I formati contrassegnati come interni sono nascosti all'utente e utilizzati per scopi amministrativi.", + + // "admin.registries.bitstream-formats.edit.internal.label": "Internal", + "admin.registries.bitstream-formats.edit.internal.label": "Interno", + + // "admin.registries.bitstream-formats.edit.mimetype.hint": "The MIME type associated with this format, does not have to be unique.", + "admin.registries.bitstream-formats.edit.mimetype.hint": "Non è necessario che il tipo MIME associato a questo formato sia univoco.", + + // "admin.registries.bitstream-formats.edit.mimetype.label": "MIME Type", + "admin.registries.bitstream-formats.edit.mimetype.label": "Tipo MIME", + + // "admin.registries.bitstream-formats.edit.shortDescription.hint": "A unique name for this format, (e.g. Microsoft Word XP or Microsoft Word 2000)", + "admin.registries.bitstream-formats.edit.shortDescription.hint": "Un nome univoco per questo formato (ad esempio, Microsoft Word XP o Microsoft Word 2000)", + + // "admin.registries.bitstream-formats.edit.shortDescription.label": "Name", + "admin.registries.bitstream-formats.edit.shortDescription.label": "Nome", + + // "admin.registries.bitstream-formats.edit.success.content": "The bitstream format was successfully edited.", + "admin.registries.bitstream-formats.edit.success.content": "Il formato bitstream è stato modificato correttamente.", + + // "admin.registries.bitstream-formats.edit.success.head": "Success", + "admin.registries.bitstream-formats.edit.success.head": "Successo", + + // "admin.registries.bitstream-formats.edit.supportLevel.hint": "The level of support your institution pledges for this format.", + "admin.registries.bitstream-formats.edit.supportLevel.hint": "Il livello di supporto che la vostra istituzione si impegna a dare a questo formato.", + + // "admin.registries.bitstream-formats.edit.supportLevel.label": "Support level", + "admin.registries.bitstream-formats.edit.supportLevel.label": "Livello di supporto", + + // "admin.registries.bitstream-formats.head": "Bitstream Format Registry", + "admin.registries.bitstream-formats.head": "Registro di sistema del formato Bitstream", + + // "admin.registries.bitstream-formats.no-items": "No bitstream formats to show.", + "admin.registries.bitstream-formats.no-items": "Nessun formato bitstream da mostrare.", + + // "admin.registries.bitstream-formats.table.delete": "Delete selected", + "admin.registries.bitstream-formats.table.delete": "Elimina selezionato", + + // "admin.registries.bitstream-formats.table.deselect-all": "Deselect all", + "admin.registries.bitstream-formats.table.deselect-all": "Deseleziona tutto", + + // "admin.registries.bitstream-formats.table.internal": "internal", + "admin.registries.bitstream-formats.table.internal": "interno", + + // "admin.registries.bitstream-formats.table.mimetype": "MIME Type", + "admin.registries.bitstream-formats.table.mimetype": "Tipo MIME", + + // "admin.registries.bitstream-formats.table.name": "Name", + "admin.registries.bitstream-formats.table.name": "Nome", + // "admin.registries.bitstream-formats.table.id" : "ID", + // TODO New key - Add a translation + "admin.registries.bitstream-formats.table.id" : "ID", + + // "admin.registries.bitstream-formats.table.return": "Back", + "admin.registries.bitstream-formats.table.return": "Indietro", + + // "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Known", + "admin.registries.bitstream-formats.table.supportLevel.KNOWN": "Conosciuto", + + // "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Supported", + "admin.registries.bitstream-formats.table.supportLevel.SUPPORTED": "Sostenuto", + + // "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Unknown", + "admin.registries.bitstream-formats.table.supportLevel.UNKNOWN": "Sconosciuto", + + // "admin.registries.bitstream-formats.table.supportLevel.head": "Support Level", + "admin.registries.bitstream-formats.table.supportLevel.head": "Livello di supporto", + + // "admin.registries.bitstream-formats.title": "Bitstream Format Registry", + "admin.registries.bitstream-formats.title": "Registro di sistema del formato Bitstream", + + + + // "admin.registries.metadata.breadcrumbs": "Metadata registry", + "admin.registries.metadata.breadcrumbs": "Registro dei metadati", + + // "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, DSpace requires the qualified Dublin Core schema.", + "admin.registries.metadata.description": "Il Registro dei metadati mantiene un elenco di tutti i campi di metadati disponibili nel repository. Questi campi possono essere suddivisi tra più schemi. Tuttavia, DSpace richiede lo schema Dublin Core qualificato.", + + // "admin.registries.metadata.form.create": "Create metadata schema", + "admin.registries.metadata.form.create": "Creare un Metadata Schema", + + // "admin.registries.metadata.form.edit": "Edit metadata schema", + "admin.registries.metadata.form.edit": "Modificare il Metadata Schema", + + // "admin.registries.metadata.form.name": "Name", + "admin.registries.metadata.form.name": "Nome", + + // "admin.registries.metadata.form.namespace": "Namespace", + "admin.registries.metadata.form.namespace": "Namespace", + + // "admin.registries.metadata.head": "Metadata Registry", + "admin.registries.metadata.head": "Registro dei metadati", + + // "admin.registries.metadata.schemas.no-items": "No metadata schemas to show.", + "admin.registries.metadata.schemas.no-items": "Nessun Metadata Schema da mostrare.", + + // "admin.registries.metadata.schemas.table.delete": "Delete selected", + "admin.registries.metadata.schemas.table.delete": "Elimina selezionato", + + // "admin.registries.metadata.schemas.table.id": "ID", + "admin.registries.metadata.schemas.table.id": "ID", + + // "admin.registries.metadata.schemas.table.name": "Name", + "admin.registries.metadata.schemas.table.name": "Nome", + + // "admin.registries.metadata.schemas.table.namespace": "Namespace", + "admin.registries.metadata.schemas.table.namespace": "Namespace", + + // "admin.registries.metadata.title": "Metadata Registry", + "admin.registries.metadata.title": "Registro dei metadati", + + + + // "admin.registries.schema.breadcrumbs": "Metadata schema", + "admin.registries.schema.breadcrumbs": "Metadata Schema", + + // "admin.registries.schema.description": "This is the metadata schema for \"{{namespace}}\".", + "admin.registries.schema.description": "Questo è il Metadata Schema per \"{{namespace}}.", + + // "admin.registries.schema.fields.head": "Schema metadata fields", + "admin.registries.schema.fields.head": "Campi dei metadati dello schema", + + // "admin.registries.schema.fields.no-items": "No metadata fields to show.", + "admin.registries.schema.fields.no-items": "Nessun campo di metadati da mostrare.", + + // "admin.registries.schema.fields.table.delete": "Delete selected", + "admin.registries.schema.fields.table.delete": "Elimina selezionato", + + // "admin.registries.schema.fields.table.field": "Field", + "admin.registries.schema.fields.table.field": "Campo", + // "admin.registries.schema.fields.table.id" : "ID", + // TODO New key - Add a translation + "admin.registries.schema.fields.table.id" : "ID", + + // "admin.registries.schema.fields.table.scopenote": "Scope Note", + "admin.registries.schema.fields.table.scopenote": "Nota di ambito", + + // "admin.registries.schema.form.create": "Create metadata field", + "admin.registries.schema.form.create": "Creare un campo di metadati", + + // "admin.registries.schema.form.edit": "Edit metadata field", + "admin.registries.schema.form.edit": "Modificare il campo dei metadati", + + // "admin.registries.schema.form.element": "Element", + "admin.registries.schema.form.element": "Elemento", + + // "admin.registries.schema.form.qualifier": "Qualifier", + "admin.registries.schema.form.qualifier": "Qualificatore", + + // "admin.registries.schema.form.scopenote": "Scope Note", + "admin.registries.schema.form.scopenote": "Nota di ambito", + + // "admin.registries.schema.head": "Metadata Schema", + "admin.registries.schema.head": "Metadata Schema", + + // "admin.registries.schema.notification.created": "Successfully created metadata schema \"{{prefix}}\"", + "admin.registries.schema.notification.created": "Metadata Schema creato correttamente \"{{prefix}}\"", + + // "admin.registries.schema.notification.deleted.failure": "Failed to delete {{amount}} metadata schemas", + "admin.registries.schema.notification.deleted.failure": "Impossibile eliminare il Metadata Schema {{amount}}", + + // "admin.registries.schema.notification.deleted.success": "Successfully deleted {{amount}} metadata schemas", + "admin.registries.schema.notification.deleted.success": "Metadata Schema {{amount}} eliminato correttamente", + + // "admin.registries.schema.notification.edited": "Successfully edited metadata schema \"{{prefix}}\"", + "admin.registries.schema.notification.edited": "Schema di metadati modificato correttamente \"{{prefix}}\"", + + // "admin.registries.schema.notification.failure": "Error", + "admin.registries.schema.notification.failure": "Errore", + + // "admin.registries.schema.notification.field.created": "Successfully created metadata field \"{{field}}\"", + "admin.registries.schema.notification.field.created": "Campo dei metadati creato correttamente \"{{field}}\"", + + // "admin.registries.schema.notification.field.deleted.failure": "Failed to delete {{amount}} metadata fields", + "admin.registries.schema.notification.field.deleted.failure": "Impossibile eliminare i campi di metadati {{amount}}", + + // "admin.registries.schema.notification.field.deleted.success": "Successfully deleted {{amount}} metadata fields", + "admin.registries.schema.notification.field.deleted.success": "Campi di metadati {{amount}} eliminati correttamente", + + // "admin.registries.schema.notification.field.edited": "Successfully edited metadata field \"{{field}}\"", + "admin.registries.schema.notification.field.edited": "Campo dei metadati modificato correttamente \"{{field}}\"", + + // "admin.registries.schema.notification.success": "Success", + "admin.registries.schema.notification.success": "Successo", + + // "admin.registries.schema.return": "Back", + "admin.registries.schema.return": "Indietro", + + // "admin.registries.schema.title": "Metadata Schema Registry", + "admin.registries.schema.title": "Registro del Metadata Schema", + + + + // "admin.access-control.epeople.actions.delete": "Delete EPerson", + "admin.access-control.epeople.actions.delete": "Eliminare EPerson", + + // "admin.access-control.epeople.actions.impersonate": "Impersonate EPerson", + "admin.access-control.epeople.actions.impersonate": "Impersonare EPerson", + + // "admin.access-control.epeople.actions.reset": "Reset password", + "admin.access-control.epeople.actions.reset": "Reimposta password", + + // "admin.access-control.epeople.actions.stop-impersonating": "Stop impersonating EPerson", + "admin.access-control.epeople.actions.stop-impersonating": "Smetti di impersonare EPerson", + + // "admin.access-control.epeople.breadcrumbs": "EPeople", + "admin.access-control.epeople.breadcrumbs": "EPeople", + + // "admin.access-control.epeople.title": "EPeople", + "admin.access-control.epeople.title": "EPeople", + + // "admin.access-control.epeople.head": "EPeople", + "admin.access-control.epeople.head": "EPeople", + + // "admin.access-control.epeople.search.head": "Search", + "admin.access-control.epeople.search.head": "Ricerca", + + // "admin.access-control.epeople.button.see-all": "Browse All", + "admin.access-control.epeople.button.see-all": "Sfoglia tutto", + + // "admin.access-control.epeople.search.scope.metadata": "Metadata", + "admin.access-control.epeople.search.scope.metadata": "Metadati", + + // "admin.access-control.epeople.search.scope.email": "E-mail (exact)", + "admin.access-control.epeople.search.scope.email": "E-mail (esatta)", + + // "admin.access-control.epeople.search.button": "Search", + "admin.access-control.epeople.search.button": "Ricerca", + + // "admin.access-control.epeople.search.placeholder": "Search people...", + "admin.access-control.epeople.search.placeholder": "Cerca persone...", + + // "admin.access-control.epeople.button.add": "Add EPerson", + "admin.access-control.epeople.button.add": "Aggiungi EPerson", + + // "admin.access-control.epeople.table.id": "ID", + "admin.access-control.epeople.table.id": "ID", + + // "admin.access-control.epeople.table.name": "Name", + "admin.access-control.epeople.table.name": "Nome", + + // "admin.access-control.epeople.table.email": "E-mail (exact)", + "admin.access-control.epeople.table.email": "E-mail (esatta)", + + // "admin.access-control.epeople.table.edit": "Edit", + "admin.access-control.epeople.table.edit": "Editare", + + // "admin.access-control.epeople.table.edit.buttons.edit": "Edit \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.edit": "Modifica \"{{name}}\"", + + // "admin.access-control.epeople.table.edit.buttons.edit-disabled": "You are not authorized to edit this group", + "admin.access-control.epeople.table.edit.buttons.edit-disabled": "Non sei autorizzato a modificare questo gruppo", + + // "admin.access-control.epeople.table.edit.buttons.remove": "Delete \"{{name}}\"", + "admin.access-control.epeople.table.edit.buttons.remove": "Eliminare \"{{name}}\"", + + // "admin.access-control.epeople.no-items": "No EPeople to show.", + "admin.access-control.epeople.no-items": "Nessuna EPersona da mostrare.", + + // "admin.access-control.epeople.form.create": "Create EPerson", + "admin.access-control.epeople.form.create": "Crea EPersona", + + // "admin.access-control.epeople.form.edit": "Edit EPerson", + "admin.access-control.epeople.form.edit": "Modifica EPersona", + + // "admin.access-control.epeople.form.firstName": "First name", + "admin.access-control.epeople.form.firstName": "Nome di battesimo", + + // "admin.access-control.epeople.form.lastName": "Last name", + "admin.access-control.epeople.form.lastName": "Cognome", + + // "admin.access-control.epeople.form.email": "E-mail", + "admin.access-control.epeople.form.email": "Posta elettronica", + + // "admin.access-control.epeople.form.emailHint": "Must be valid e-mail address", + "admin.access-control.epeople.form.emailHint": "Deve essere un indirizzo e-mail valido", + + // "admin.access-control.epeople.form.canLogIn": "Can log in", + "admin.access-control.epeople.form.canLogIn": "Può accedere", + + // "admin.access-control.epeople.form.requireCertificate": "Requires certificate", + "admin.access-control.epeople.form.requireCertificate": "Richiede certificato", + + // "admin.access-control.epeople.form.return": "Back", + "admin.access-control.epeople.form.return": "Indietro", + + // "admin.access-control.epeople.form.notification.created.success": "Successfully created EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.success": "EPerson creato con successo \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.created.failure": "Failed to create EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.created.failure": "Impossibile creare EPerson \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Failed to create EPerson \"{{name}}\", email \"{{email}}\" already in use.", + "admin.access-control.epeople.form.notification.created.failure.emailInUse": "Impossibile creare EPerson \"{{name}}\", email \"{{email}}\" già in uso.", + + // "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Failed to edit EPerson \"{{name}}\", email \"{{email}}\" already in use.", + "admin.access-control.epeople.form.notification.edited.failure.emailInUse": "Impossibile modificare EPerson \"{{name}}\", email \"{{email}}\" già in uso.", + + // "admin.access-control.epeople.form.notification.edited.success": "Successfully edited EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.success": "EPerson modificato con successo \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.edited.failure": "Failed to edit EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.edited.failure": "Impossibile modificare EPerson \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.deleted.success": "Successfully deleted EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.success": "EPerson eliminato con successo \"{{name}}\"", + + // "admin.access-control.epeople.form.notification.deleted.failure": "Failed to delete EPerson \"{{name}}\"", + "admin.access-control.epeople.form.notification.deleted.failure": "Impossibile eliminare EPerson \"{{name}}\"", + + // "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Member of these groups:", + "admin.access-control.epeople.form.groupsEPersonIsMemberOf": "Membro dei seguenti gruppi:", + + // "admin.access-control.epeople.form.table.id": "ID", + "admin.access-control.epeople.form.table.id": "ID", + + // "admin.access-control.epeople.form.table.name": "Name", + "admin.access-control.epeople.form.table.name": "Nome", + + // "admin.access-control.epeople.form.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.epeople.form.table.collectionOrCommunity": "collection/Community", + + // "admin.access-control.epeople.form.memberOfNoGroups": "This EPerson is not a member of any groups", + "admin.access-control.epeople.form.memberOfNoGroups": "Questo EPerson non è membro di alcun gruppo", + + // "admin.access-control.epeople.form.goToGroups": "Add to groups", + "admin.access-control.epeople.form.goToGroups": "Aggiungi ai gruppi", + + // "admin.access-control.epeople.notification.deleted.failure": "Failed to delete EPerson: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.failure": "Impossibile eliminare l'EPerson: \"{{name}}\"", + + // "admin.access-control.epeople.notification.deleted.success": "Successfully deleted EPerson: \"{{name}}\"", + "admin.access-control.epeople.notification.deleted.success": "EPerson eliminata con successo: \"{{name}}\"", + + + + // "admin.access-control.groups.title": "Groups", + "admin.access-control.groups.title": "Gruppi", + + // "admin.access-control.groups.breadcrumbs": "Groups", + "admin.access-control.groups.breadcrumbs": "Gruppi", + + // "admin.access-control.groups.singleGroup.breadcrumbs": "Edit Group", + "admin.access-control.groups.singleGroup.breadcrumbs": "Modifica gruppo", + + // "admin.access-control.groups.title.singleGroup": "Edit Group", + "admin.access-control.groups.title.singleGroup": "Modifica gruppo", + + // "admin.access-control.groups.title.addGroup": "New Group", + "admin.access-control.groups.title.addGroup": "Nuovo Gruppo", + + // "admin.access-control.groups.addGroup.breadcrumbs": "New Group", + "admin.access-control.groups.addGroup.breadcrumbs": "Nuovo Gruppo", + + // "admin.access-control.groups.head": "Groups", + // TODO Source message changed - Revise the translation + "admin.access-control.groups.head": "Gruppi/Ruoli", + + // "admin.access-control.groups.button.add": "Add group", + "admin.access-control.groups.button.add": "Aggiungi gruppo", + + // "admin.access-control.groups.search.head": "Search groups", + "admin.access-control.groups.search.head": "Gruppi di ricerca", + + // "admin.access-control.groups.button.see-all": "Browse all", + "admin.access-control.groups.button.see-all": "Sfoglia tutti", + + // "admin.access-control.groups.search.button": "Search", + "admin.access-control.groups.search.button": "Ricerca", + + // "admin.access-control.groups.search.placeholder": "Search groups...", + "admin.access-control.groups.search.placeholder": "Cerca gruppi...", + + // "admin.access-control.groups.table.id": "ID", + "admin.access-control.groups.table.id": "ID", + + // "admin.access-control.groups.table.name": "Name", + "admin.access-control.groups.table.name": "Nome", + + // "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.table.collectionOrCommunity": "Collection/Community", + + // "admin.access-control.groups.table.members": "Members", + "admin.access-control.groups.table.members": "Membri", + + // "admin.access-control.groups.table.edit": "Edit", + "admin.access-control.groups.table.edit": "Editare", + + // "admin.access-control.groups.table.edit.buttons.edit": "Edit \"{{name}}\"", + "admin.access-control.groups.table.edit.buttons.edit": "Modifica \"{{name}}\"", + + // "admin.access-control.groups.table.edit.buttons.remove": "Delete \"{{name}}\"", + // TODO New key - Add a translation + "admin.access-control.groups.table.edit.buttons.remove": "Delete \"{{name}}\"", + + // "admin.access-control.groups.no-items": "No groups found with this in their name or this as UUID", + "admin.access-control.groups.no-items": "Nessun gruppo trovato con questo nel loro nome o questo come UUID", + + // "admin.access-control.groups.notification.deleted.success": "Successfully deleted group \"{{name}}\"", + "admin.access-control.groups.notification.deleted.success": "Gruppo eliminato con successo \"{{name}}\"", + + // "admin.access-control.groups.notification.deleted.failure.title": "Failed to delete group \"{{name}}\"", + "admin.access-control.groups.notification.deleted.failure.title": "Impossibile eliminare il gruppo \"{{name}}\"", + + // "admin.access-control.groups.notification.deleted.failure.content": "Cause: \"{{cause}}\"", + "admin.access-control.groups.notification.deleted.failure.content": "Causa: \"{{cause}}\"", + + + + // "admin.access-control.groups.form.alert.permanent": "This group is permanent, so it can't be edited or deleted. You can still add and remove group members using this page.", + "admin.access-control.groups.form.alert.permanent": "Questo gruppo è permanente, quindi non può essere modificato o eliminato. Puoi comunque aggiungere e rimuovere membri del gruppo utilizzando questa pagina.", + + // "admin.access-control.groups.form.alert.workflowGroup": "This group can’t be modified or deleted because it corresponds to a role in the submission and workflow process in the \"{{name}}\" {{comcol}}. You can delete it from the \"assign roles\" tab on the edit {{comcol}} page. You can still add and remove group members using this page.", + "admin.access-control.groups.form.alert.workflowGroup": "Questo gruppo non può essere modificato o eliminato perché corrisponde a un ruolo nella submission e processo del workflow nel \"{{name}}\" {{comcol}}. Puoi eliminarlo dal Tab \"assegna ruoli\" nella pagina di modifica {{comcol}}. Puoi ancora aggiungere e rimuovere membri del gruppo da questa pagina.", + + // "admin.access-control.groups.form.head.create": "Create group", + "admin.access-control.groups.form.head.create": "Crea gruppo", + + // "admin.access-control.groups.form.head.edit": "Edit group", + "admin.access-control.groups.form.head.edit": "Modifica gruppo", + + // "admin.access-control.groups.form.groupName": "Group name", + "admin.access-control.groups.form.groupName": "Nome del gruppo", + + // "admin.access-control.groups.form.groupCommunity": "Community or Collection", + "admin.access-control.groups.form.groupCommunity": "Community o collection", + + // "admin.access-control.groups.form.groupDescription": "Description", + "admin.access-control.groups.form.groupDescription": "Descrizione", + + // "admin.access-control.groups.form.notification.created.success": "Successfully created Group \"{{name}}\"", + "admin.access-control.groups.form.notification.created.success": "Gruppo creato con successo \"{{name}}\"", + + // "admin.access-control.groups.form.notification.created.failure": "Failed to create Group \"{{name}}\"", + "admin.access-control.groups.form.notification.created.failure": "Impossibile creare il gruppo \"{{name}}\"", + + // "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Failed to create Group with name: \"{{name}}\", make sure the name is not already in use.", + "admin.access-control.groups.form.notification.created.failure.groupNameInUse": "Impossibile creare il Gruppo con nome: \"{{name}}\", assicurarsi che il nome non sia già in uso.", + + // "admin.access-control.groups.form.notification.edited.failure": "Failed to edit Group \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.failure": "Impossibile modificare il gruppo \"{{name}}\"", + + // "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Name \"{{name}}\" already in use!", + "admin.access-control.groups.form.notification.edited.failure.groupNameInUse": "Nome \"{{name}}\" già in uso!", + + // "admin.access-control.groups.form.notification.edited.success": "Successfully edited Group \"{{name}}\"", + "admin.access-control.groups.form.notification.edited.success": "Gruppo modificato correttamente \"{{name}}\"", + + // "admin.access-control.groups.form.actions.delete": "Delete Group", + "admin.access-control.groups.form.actions.delete": "Elimina gruppo", + + // "admin.access-control.groups.form.delete-group.modal.header": "Delete Group \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.header": "Elimina gruppo \"{{ dsoName }}\"", + + // "admin.access-control.groups.form.delete-group.modal.info": "Are you sure you want to delete Group \"{{ dsoName }}\"", + "admin.access-control.groups.form.delete-group.modal.info": "Sei sicuro di voler eliminare gruppo \"{{ dsoName }}\"", + + // "admin.access-control.groups.form.delete-group.modal.cancel": "Cancel", + "admin.access-control.groups.form.delete-group.modal.cancel": "Annulla", + + // "admin.access-control.groups.form.delete-group.modal.confirm": "Delete", + "admin.access-control.groups.form.delete-group.modal.confirm": "Cancellare", + + // "admin.access-control.groups.form.notification.deleted.success": "Successfully deleted group \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.success": "Gruppo eliminato con successo \"{{ name }}\"", + + // "admin.access-control.groups.form.notification.deleted.failure.title": "Failed to delete group \"{{ name }}\"", + "admin.access-control.groups.form.notification.deleted.failure.title": "Impossibile eliminare il gruppo \"{{ name }}\"", + + // "admin.access-control.groups.form.notification.deleted.failure.content": "Cause: \"{{ cause }}\"", + "admin.access-control.groups.form.notification.deleted.failure.content": "Causa: \"{{ cause }}\"", + + // "admin.access-control.groups.form.members-list.head": "EPeople", + "admin.access-control.groups.form.members-list.head": "EPeople", + + // "admin.access-control.groups.form.members-list.search.head": "Add EPeople", + "admin.access-control.groups.form.members-list.search.head": "Aggiungi EPeople", + + // "admin.access-control.groups.form.members-list.button.see-all": "Browse All", + "admin.access-control.groups.form.members-list.button.see-all": "Sfoglia tutto", + + // "admin.access-control.groups.form.members-list.headMembers": "Current Members", + "admin.access-control.groups.form.members-list.headMembers": "Membri attuali", + + // "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadata", + "admin.access-control.groups.form.members-list.search.scope.metadata": "Metadati", + + // "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (exact)", + "admin.access-control.groups.form.members-list.search.scope.email": "E-mail (esatta)", + + // "admin.access-control.groups.form.members-list.search.button": "Search", + "admin.access-control.groups.form.members-list.search.button": "Ricerca", + + // "admin.access-control.groups.form.members-list.table.id": "ID", + "admin.access-control.groups.form.members-list.table.id": "ID", + + // "admin.access-control.groups.form.members-list.table.name": "Name", + "admin.access-control.groups.form.members-list.table.name": "Nome", + + // "admin.access-control.groups.form.members-list.table.identity": "Identity", + "admin.access-control.groups.form.members-list.table.identity": "Identità", + + // "admin.access-control.groups.form.members-list.table.email": "Email", + "admin.access-control.groups.form.members-list.table.email": "E-mail", + + // "admin.access-control.groups.form.members-list.table.netid": "NetID", + "admin.access-control.groups.form.members-list.table.netid": "NetID", + + // "admin.access-control.groups.form.members-list.table.edit": "Remove / Add", + "admin.access-control.groups.form.members-list.table.edit": "Rimuovi / Aggiungi", + + // "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.remove": "Rimuovi membro con nome \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.addMember": "Membro aggiunto con successo: \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.addMember": "Impossibile aggiungere il membro: \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.success.deleteMember": "Membro eliminato con successo: \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + "admin.access-control.groups.form.members-list.notification.failure.deleteMember": "Impossibile eliminare il membro: \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + "admin.access-control.groups.form.members-list.table.edit.buttons.add": "Aggiungi membro con nome \"{{name}}\"", + + // "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "admin.access-control.groups.form.members-list.notification.failure.noActiveGroup": "Nessun gruppo corrente attivo, invia prima un nome.", + + // "admin.access-control.groups.form.members-list.no-members-yet": "No members in group yet, search and add.", + "admin.access-control.groups.form.members-list.no-members-yet": "Ancora nessun membro del gruppo, cercali e aggiungili.", + + // "admin.access-control.groups.form.members-list.no-items": "No EPeople found in that search", + "admin.access-control.groups.form.members-list.no-items": "Nessun EPeople trovato in quella ricerca", + + // "admin.access-control.groups.form.subgroups-list.notification.failure": "Something went wrong: \"{{cause}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure": "Qualcosa è andato storto: \"{{cause}}\"", + + // "admin.access-control.groups.form.subgroups-list.head": "Groups", + "admin.access-control.groups.form.subgroups-list.head": "Gruppi", + + // "admin.access-control.groups.form.subgroups-list.search.head": "Add Subgroup", + "admin.access-control.groups.form.subgroups-list.search.head": "Aggiungi sottogruppo", + + // "admin.access-control.groups.form.subgroups-list.button.see-all": "Browse All", + "admin.access-control.groups.form.subgroups-list.button.see-all": "Sfoglia tutto", + + // "admin.access-control.groups.form.subgroups-list.headSubgroups": "Current Subgroups", + "admin.access-control.groups.form.subgroups-list.headSubgroups": "Sottogruppi attuali", + + // "admin.access-control.groups.form.subgroups-list.search.button": "Search", + "admin.access-control.groups.form.subgroups-list.search.button": "Ricerca", + + // "admin.access-control.groups.form.subgroups-list.table.id": "ID", + "admin.access-control.groups.form.subgroups-list.table.id": "ID", + + // "admin.access-control.groups.form.subgroups-list.table.name": "Name", + "admin.access-control.groups.form.subgroups-list.table.name": "Nome", + + // "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "Collection/Community", + "admin.access-control.groups.form.subgroups-list.table.collectionOrCommunity": "collection/Community", + + // "admin.access-control.groups.form.subgroups-list.table.edit": "Remove / Add", + "admin.access-control.groups.form.subgroups-list.table.edit": "Rimuovi / Aggiungi", + + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Remove subgroup with name \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.remove": "Rimuovi sottogruppo con nome \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Add subgroup with name \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.table.edit.buttons.add": "Aggiungi sottogruppo con nome \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Current group", + "admin.access-control.groups.form.subgroups-list.table.edit.currentGroup": "Gruppo attuale", + + // "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Successfully added subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.addSubgroup": "Sottogruppo aggiunto con successo: \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Failed to add subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.addSubgroup": "Impossibile aggiungere il sottogruppo: \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Successfully deleted subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.success.deleteSubgroup": "Sottogruppo eliminato con successo: \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Failed to delete subgroup: \"{{name}}\"", + "admin.access-control.groups.form.subgroups-list.notification.failure.deleteSubgroup": "Impossibile eliminare il sottogruppo: \"{{name}}\"", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + "admin.access-control.groups.form.subgroups-list.notification.failure.noActiveGroup": "Al momento nessun gruppo attivo, invia prima un nome.", + + // "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "This is the current group, can't be added.", + "admin.access-control.groups.form.subgroups-list.notification.failure.subgroupToAddIsActiveGroup": "Questo è il gruppo corrente, non può essere aggiunto.", + + // "admin.access-control.groups.form.subgroups-list.no-items": "No groups found with this in their name or this as UUID", + "admin.access-control.groups.form.subgroups-list.no-items": "Nessun gruppo trovato con questo nel loro nome o questo come UUID", + + // "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "No subgroups in group yet.", + "admin.access-control.groups.form.subgroups-list.no-subgroups-yet": "Nessun sottogruppo ancora nel gruppo.", + + // "admin.access-control.groups.form.return": "Back", + "admin.access-control.groups.form.return": "Indietro", + + + + // "admin.search.breadcrumbs": "Administrative Search", + "admin.search.breadcrumbs": "Ricerca amministrativa", + + // "admin.search.collection.edit": "Edit", + "admin.search.collection.edit": "Editare", + + // "admin.search.community.edit": "Edit", + "admin.search.community.edit": "Editare", + + // "admin.search.item.delete": "Delete", + "admin.search.item.delete": "Cancellare", + + // "admin.search.item.edit": "Edit", + "admin.search.item.edit": "Editare", + + // "admin.search.item.make-private": "Make non-discoverable", + "admin.search.item.make-private": "Rendi privato", + + // "admin.search.item.make-public": "Make discoverable", + "admin.search.item.make-public": "Rendi pubblico", + + // "admin.search.item.move": "Move", + "admin.search.item.move": "Sposta", + + // "admin.search.item.reinstate": "Reinstate", + "admin.search.item.reinstate": "Reintegrare", + + // "admin.search.item.withdraw": "Withdraw", + "admin.search.item.withdraw": "Ritirare", + + // "admin.search.title": "Administrative Search", + "admin.search.title": "Ricerca amministrativa", + + // "administrativeView.search.results.head": "Administrative Search", + "administrativeView.search.results.head": "Ricerca amministrativa", + + + + + // "admin.workflow.breadcrumbs": "Administer Workflow", + "admin.workflow.breadcrumbs": "Amministrare il flusso di lavoro", + + // "admin.workflow.title": "Administer Workflow", + "admin.workflow.title": "Amministrare il flusso di lavoro", + + // "admin.workflow.item.workflow": "Workflow", + "admin.workflow.item.workflow": "Flusso di lavoro", + + // "admin.workflow.item.delete": "Delete", + "admin.workflow.item.delete": "Cancellare", + + // "admin.workflow.item.send-back": "Send back", + "admin.workflow.item.send-back": "Rinviare", + + + + // "admin.metadata-import.breadcrumbs": "Import Metadata", + "admin.metadata-import.breadcrumbs": "Importare metadati", + + // "admin.batch-import.breadcrumbs": "Import Batch", + // TODO New key - Add a translation + "admin.batch-import.breadcrumbs": "Import Batch", + + // "admin.metadata-import.title": "Import Metadata", + "admin.metadata-import.title": "Importare metadati", + + // "admin.batch-import.title": "Import Batch", + // TODO New key - Add a translation + "admin.batch-import.title": "Import Batch", + + // "admin.metadata-import.page.header": "Import Metadata", + "admin.metadata-import.page.header": "Importare metadati", + + // "admin.batch-import.page.header": "Import Batch", + // TODO New key - Add a translation + "admin.batch-import.page.header": "Import Batch", + + // "admin.metadata-import.page.help": "You can drop or browse CSV files that contain batch metadata operations on files here", + "admin.metadata-import.page.help": "È possibile eliminare o sfogliare i file CSV che contengono operazioni di metadati batch sui file qui", + + // "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + // TODO New key - Add a translation + "admin.batch-import.page.help": "Select the Collection to import into. Then, drop or browse to a Simple Archive Format (SAF) zip file that includes the Items to import", + + // "admin.metadata-import.page.dropMsg": "Drop a metadata CSV to import", + "admin.metadata-import.page.dropMsg": "Rilasciare un CSV di metadati da importare", + + // "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + // TODO New key - Add a translation + "admin.batch-import.page.dropMsg": "Drop a batch ZIP to import", + + // "admin.metadata-import.page.dropMsgReplace": "Drop to replace the metadata CSV to import", + "admin.metadata-import.page.dropMsgReplace": "Rilascia per sostituire i metadati CSV da importare", + + // "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + // TODO New key - Add a translation + "admin.batch-import.page.dropMsgReplace": "Drop to replace the batch ZIP to import", + + // "admin.metadata-import.page.button.return": "Back", + "admin.metadata-import.page.button.return": "Indietro", + + // "admin.metadata-import.page.button.proceed": "Proceed", + "admin.metadata-import.page.button.proceed": "Procedere", + + // "admin.metadata-import.page.button.select-collection": "Select Collection", + // TODO New key - Add a translation + "admin.metadata-import.page.button.select-collection": "Select Collection", + + // "admin.metadata-import.page.error.addFile": "Select file first!", + "admin.metadata-import.page.error.addFile": "Seleziona prima il file!", + + // "admin.batch-import.page.error.addFile": "Select Zip file first!", + // TODO New key - Add a translation + "admin.batch-import.page.error.addFile": "Select Zip file first!", + + // "admin.metadata-import.page.validateOnly": "Validate Only", + "admin.metadata-import.page.validateOnly": "Solo Validazione", + + // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", + "admin.metadata-import.page.validateOnly.hint": "Una volta selezionato, il CSV caricato sarà validato. Riceverai un report delle modifiche rilevate, ma nessuna modifica verrà salvata.", + + // "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + // TODO New key - Add a translation + "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", + + // "admin.batch-import.page.remove": "remove", + // TODO New key - Add a translation + "admin.batch-import.page.remove": "remove", + + // "auth.errors.invalid-user": "Invalid email address or password.", + "auth.errors.invalid-user": "Indirizzo e-mail o password non validi.", + + // "auth.messages.expired": "Your session has expired. Please log in again.", + "auth.messages.expired": "La sessione è scaduta. Effettua nuovamente l'accesso.", + + // "auth.messages.token-refresh-failed": "Refreshing your session token failed. Please log in again.", + "auth.messages.token-refresh-failed": "Aggiornamento del token di sessione non riuscito. Effettua nuovamente l'accesso.", + + + + // "bitstream.download.page": "Now downloading {{bitstream}}..." , + "bitstream.download.page": "Sto scaricando {{bitstream}}...", + + // "bitstream.download.page.back": "Back" , + // TODO Source message changed - Revise the translation + "bitstream.download.page.back": "Indietro", + + + // "bitstream.edit.authorizations.link": "Edit bitstream's Policies", + "bitstream.edit.authorizations.link": "Modificare i criteri di bitstream", + + // "bitstream.edit.authorizations.title": "Edit bitstream's Policies", + "bitstream.edit.authorizations.title": "Modificare i criteri di bitstream", + + // "bitstream.edit.return": "Back", + "bitstream.edit.return": "Indietro", + + // "bitstream.edit.bitstream": "Bitstream: ", + "bitstream.edit.bitstream": "Bitstream: ", + + // "bitstream.edit.form.description.hint": "Optionally, provide a brief description of the file, for example \"Main article\" or \"Experiment data readings\".", + "bitstream.edit.form.description.hint": "Facoltativamente, fornire una breve descrizione del file, ad esempio \"Articolo principale\" o \"Dati dell'esperimento \".", + + // "bitstream.edit.form.description.label": "Description", + "bitstream.edit.form.description.label": "Descrizione", + + // "bitstream.edit.form.embargo.hint": "The first day from which access is allowed. This date cannot be modified on this form. To set an embargo date for a bitstream, go to the Item Status tab, click Authorizations..., create or edit the bitstream's READ policy, and set the Start Date as desired.", + "bitstream.edit.form.embargo.hint": "Si tratta del primo giorno da cui è consentito l'accesso. Questa data non può essere modificata in questo form. Per impostare una data di embargo per un bitstream, vai alla scheda Item Status fare clic su Autorizzazioni... creare o modifica la policy del READ e imposta la Start Date come desiderato.", + + // "bitstream.edit.form.embargo.label": "Embargo until specific date", + "bitstream.edit.form.embargo.label": "Embargo fino a data specifica", + + // "bitstream.edit.form.fileName.hint": "Change the filename for the bitstream. Note that this will change the display bitstream URL, but old links will still resolve as long as the sequence ID does not change.", + "bitstream.edit.form.fileName.hint": "Modificare il nome del file per il bitstream. Si noti che questo cambierà il display bitstream URL , i vecchi collegamenti verranno comunque risolti finché il sequence ID non cambierà  .", + + // "bitstream.edit.form.fileName.label": "Filename", + "bitstream.edit.form.fileName.label": "Filename", + + // "bitstream.edit.form.newFormat.label": "Describe new format", + "bitstream.edit.form.newFormat.label": "Descrivi il nuovo formato", + + // "bitstream.edit.form.newFormat.hint": "The application you used to create the file, and the version number (for example, \"ACMESoft SuperApp version 1.5\").", + "bitstream.edit.form.newFormat.hint": "L'applicazione utilizzata per creare il file e il numero di versione (ad esempio \"ACMESoft SuperApp versione 1.5\").", + + // "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", + "bitstream.edit.form.primaryBitstream.label": "Primary bitstream", + + // "bitstream.edit.form.selectedFormat.hint": "If the format is not in the above list, select \"format not in list\" above and describe it under \"Describe new format\".", + "bitstream.edit.form.selectedFormat.hint": "Se il formato non è presente nell'elenco precedente, selezionare \"formato non presente in elenco\" sopra e descriverlo in \"Descrivi nuovo formato.", + + // "bitstream.edit.form.selectedFormat.label": "Selected Format", + "bitstream.edit.form.selectedFormat.label": "Formato selezionato", + + // "bitstream.edit.form.selectedFormat.unknown": "Format not in list", + "bitstream.edit.form.selectedFormat.unknown": "Formato non presente nell'elenco", + + // "bitstream.edit.notifications.error.format.title": "An error occurred saving the bitstream's format", + "bitstream.edit.notifications.error.format.title": "Si è verificato un errore durante il salvataggio del formato del bitstream", + + // "bitstream.edit.form.iiifLabel.label": "IIIF Label", + "bitstream.edit.form.iiifLabel.label": "Etichetta IIIF", + + // "bitstream.edit.form.iiifLabel.hint": "Canvas label for this image. If not provided default label will be used.", + "bitstream.edit.form.iiifLabel.hint": "Etichetta canvas per questa immagine. Se non viene fornita, verrà utilizzata l'etichetta predefinita.", + + // "bitstream.edit.form.iiifToc.label": "IIIF Table of Contents", + "bitstream.edit.form.iiifToc.label": "Sommario IIIF", + + // "bitstream.edit.form.iiifToc.hint": "Adding text here makes this the start of a new table of contents range.", + "bitstream.edit.form.iiifToc.hint": "L'aggiunta di testo qui rende questo l'inizio di un nuovo intervallo di sommario.", + + // "bitstream.edit.form.iiifWidth.label": "IIIF Canvas Width", + "bitstream.edit.form.iiifWidth.label": "Larghezza area di lavoro IIIF", + + // "bitstream.edit.form.iiifWidth.hint": "The canvas width should usually match the image width.", + "bitstream.edit.form.iiifWidth.hint": "La larghezza dell'area di lavoro deve in genere corrispondere alla larghezza dell'immagine.", + + // "bitstream.edit.form.iiifHeight.label": "IIIF Canvas Height", + "bitstream.edit.form.iiifHeight.label": "Altezza area di lavoro IIIF", + + // "bitstream.edit.form.iiifHeight.hint": "The canvas height should usually match the image height.", + "bitstream.edit.form.iiifHeight.hint": "L'altezza dell'area di lavoro deve in genere corrispondere all'altezza dell'immagine.", + + + // "bitstream.edit.notifications.saved.content": "Your changes to this bitstream were saved.", + "bitstream.edit.notifications.saved.content": "Le modifiche apportate a questo bitstream sono state salvate.", + + // "bitstream.edit.notifications.saved.title": "Bitstream saved", + "bitstream.edit.notifications.saved.title": "Bitstream salvato", + + // "bitstream.edit.title": "Edit bitstream", + "bitstream.edit.title": "Modifica bitstream", + + // "bitstream-request-a-copy.alert.canDownload1": "You already have access to this file. If you want to download the file, click ", + "bitstream-request-a-copy.alert.canDownload1": "Hai già accesso a questo file. Se si desidera scaricare il file, fare clic su", + + // "bitstream-request-a-copy.alert.canDownload2": "here", + "bitstream-request-a-copy.alert.canDownload2": "qui", + + // "bitstream-request-a-copy.header": "Request a copy of the file", + "bitstream-request-a-copy.header": "Richiedi una copia del file", + + // "bitstream-request-a-copy.intro": "Enter the following information to request a copy for the following item: ", + "bitstream-request-a-copy.intro": "Inserisci le seguenti informazioni per richiedere una copia per l'item seguente: ", + + // "bitstream-request-a-copy.intro.bitstream.one": "Requesting the following file: ", + "bitstream-request-a-copy.intro.bitstream.one": "Richiesta del seguente file: ", + // "bitstream-request-a-copy.intro.bitstream.all": "Requesting all files. ", + "bitstream-request-a-copy.intro.bitstream.all": "Richiesta di tutti i file.", + + // "bitstream-request-a-copy.name.label": "Name *", + "bitstream-request-a-copy.name.label": "Nome *", + + // "bitstream-request-a-copy.name.error": "The name is required", + "bitstream-request-a-copy.name.error": "Il nome è obbligatorio", + + // "bitstream-request-a-copy.email.label": "Your e-mail address *", + "bitstream-request-a-copy.email.label": "Il tuo indirizzo e-mail *", + + // "bitstream-request-a-copy.email.hint": "This email address is used for sending the file.", + "bitstream-request-a-copy.email.hint": "Questo indirizzo e-mail viene utilizzato per l'invio del file.", + + // "bitstream-request-a-copy.email.error": "Please enter a valid email address.", + "bitstream-request-a-copy.email.error": "Inserisci un indirizzo email valido.", + + // "bitstream-request-a-copy.allfiles.label": "Files", + "bitstream-request-a-copy.allfiles.label": "File", + + // "bitstream-request-a-copy.files-all-false.label": "Only the requested file", + "bitstream-request-a-copy.files-all-false.label": "Solo il file richiesto", + + // "bitstream-request-a-copy.files-all-true.label": "All files (of this item) in restricted access", + "bitstream-request-a-copy.files-all-true.label": "Tutti i file (di questo item) in accesso limitato", + + // "bitstream-request-a-copy.message.label": "Message", + "bitstream-request-a-copy.message.label": "Messaggio", + + // "bitstream-request-a-copy.return": "Back", + "bitstream-request-a-copy.return": "Indietro", + + // "bitstream-request-a-copy.submit": "Request copy", + "bitstream-request-a-copy.submit": "Richiedi copia", + + // "bitstream-request-a-copy.submit.success": "The item request was submitted successfully.", + "bitstream-request-a-copy.submit.success": "La richiesta di invio è stata inviata correttamente.", + + // "bitstream-request-a-copy.submit.error": "Something went wrong with submitting the item request.", + "bitstream-request-a-copy.submit.error": "Qualcosa è andato storto con l'invio della richiesta dell'item.", + + + + // "browse.back.all-results": "All browse results", + "browse.back.all-results": "Tutti i risultati", + + // "browse.comcol.by.author": "By Author", + "browse.comcol.by.author": "Per Autore", + + // "browse.comcol.by.dateissued": "By Issue Date", + "browse.comcol.by.dateissued": "Per data di pubblicazione", + + // "browse.comcol.by.subject": "By Subject", + "browse.comcol.by.subject": "Per argomento", + + // "browse.comcol.by.title": "By Title", + "browse.comcol.by.title": "Per titolo", + + // "browse.comcol.head": "Browse", + "browse.comcol.head": "Sfogliare", + + // "browse.empty": "No items to show.", + "browse.empty": "Nessun item da mostrare.", + + // "browse.metadata.author": "Author", + "browse.metadata.author": "Autore", + + // "browse.metadata.dateissued": "Issue Date", + "browse.metadata.dateissued": "Data di pubblicazione", + + // "browse.metadata.subject": "Subject", + "browse.metadata.subject": "Subject", + + // "browse.metadata.title": "Title", + "browse.metadata.title": "Titolo", + + // "browse.metadata.author.breadcrumbs": "Browse by Author", + "browse.metadata.author.breadcrumbs": "Sfoglia per Autore", + + // "browse.metadata.dateissued.breadcrumbs": "Browse by Date", + "browse.metadata.dateissued.breadcrumbs": "Sfoglia per Data", + + // "browse.metadata.subject.breadcrumbs": "Browse by Subject", + "browse.metadata.subject.breadcrumbs": "Sfoglia per Argomento", + + // "browse.metadata.title.breadcrumbs": "Browse by Title", + "browse.metadata.title.breadcrumbs": "Sfoglia per Titolo", + + // "pagination.next.button": "Next", + "pagination.next.button": "Avanti", + + // "pagination.previous.button": "Previous", + "pagination.previous.button": "Precedente", + + // "pagination.next.button.disabled.tooltip": "No more pages of results", + "pagination.next.button.disabled.tooltip": "Non ci sono ulteriori pagine di risultati", + + // "browse.startsWith": ", starting with {{ startsWith }}", + // TODO New key - Add a translation + "browse.startsWith": ", starting with {{ startsWith }}", + + // "browse.startsWith.choose_start": "(Choose start)", + "browse.startsWith.choose_start": "(Scegli start)", + + // "browse.startsWith.choose_year": "(Choose year)", + "browse.startsWith.choose_year": "(Scegli l'anno)", + + // "browse.startsWith.choose_year.label": "Choose the issue year", + "browse.startsWith.choose_year.label": "Scegli l'anno di pubblicazione", + + // "browse.startsWith.jump": "Filter results by year or month", + "browse.startsWith.jump": "Filtra i risultati per anno o mese", + + // "browse.startsWith.months.april": "April", + "browse.startsWith.months.april": "Aprile", + + // "browse.startsWith.months.august": "August", + "browse.startsWith.months.august": "Agosto", + + // "browse.startsWith.months.december": "December", + "browse.startsWith.months.december": "Dicembre", + + // "browse.startsWith.months.february": "February", + "browse.startsWith.months.february": "Febbraio", + + // "browse.startsWith.months.january": "January", + "browse.startsWith.months.january": "Gennaio", + + // "browse.startsWith.months.july": "July", + "browse.startsWith.months.july": "Luglio", + + // "browse.startsWith.months.june": "June", + "browse.startsWith.months.june": "Giugno", + + // "browse.startsWith.months.march": "March", + "browse.startsWith.months.march": "Marzo", + + // "browse.startsWith.months.may": "May", + "browse.startsWith.months.may": "Maggio", + + // "browse.startsWith.months.none": "(Choose month)", + "browse.startsWith.months.none": "(Scegli il mese)", + + // "browse.startsWith.months.none.label": "Choose the issue month", + "browse.startsWith.months.none.label": "Scegli il mese di pubblicazione", + + // "browse.startsWith.months.november": "November", + "browse.startsWith.months.november": "Novembre", + + // "browse.startsWith.months.october": "October", + "browse.startsWith.months.october": "Ottobre", + + // "browse.startsWith.months.september": "September", + "browse.startsWith.months.september": "Settembre", + + // "browse.startsWith.submit": "Browse", + "browse.startsWith.submit": "Sfogliare", + + // "browse.startsWith.type_date": "Filter results by date", + "browse.startsWith.type_date": "Filtra per data", + + // "browse.startsWith.type_date.label": "Or type in a date (year-month) and click on the Browse button", + "browse.startsWith.type_date.label": "Oppure digita una data (anno-mese) e clicca sul pulsante Sfoglia", + + // "browse.startsWith.type_text": "Filter results by typing the first few letters", + "browse.startsWith.type_text": "Per filtrare i risultati inizia a digitare le prime lettere", + + // "browse.title": "Browsing {{ collection }} by {{ field }}{{ startsWith }} {{ value }}", + "browse.title": "Mostra il contenuto di {{ collection }} per {{ field }}{{ startsWith }} {{ value }}", + + // "browse.title.page": "Browsing {{ collection }} by {{ field }} {{ value }}", + "browse.title.page": "Mostra il contenuto di {{ collection }} per {{ field }} {{ value }}", + + + // "chips.remove": "Remove chip", + "chips.remove": "Rimuovere il chip", + + + + // "collection.create.head": "Create a Collection", + "collection.create.head": "Creare una collection", + + // "collection.create.notifications.success": "Successfully created the Collection", + "collection.create.notifications.success": "Creata con successo la collection", + + // "collection.create.sub-head": "Create a Collection for Community {{ parent }}", + "collection.create.sub-head": "Creare una collection per la Community {{ parent }}", + + // "collection.curate.header": "Curate Collection: {{collection}}", + "collection.curate.header": "Curate della collezione: {{collection}}", + + // "collection.delete.cancel": "Cancel", + "collection.delete.cancel": "Annulla", + + // "collection.delete.confirm": "Confirm", + "collection.delete.confirm": "Confermare", + + // "collection.delete.processing": "Deleting", + "collection.delete.processing": "Eliminazione", + + // "collection.delete.head": "Delete Collection", + "collection.delete.head": "Elimina collection", + + // "collection.delete.notification.fail": "Collection could not be deleted", + "collection.delete.notification.fail": "Impossibile eliminare la collection", + + // "collection.delete.notification.success": "Successfully deleted collection", + "collection.delete.notification.success": "collection eliminata correttamente", + + // "collection.delete.text": "Are you sure you want to delete collection \"{{ dso }}\"", + "collection.delete.text": "Sei sicuro di voler eliminare la collection \"{{ dso }}\"", + + + + // "collection.edit.delete": "Delete this collection", + "collection.edit.delete": "Elimina questa collection", + + // "collection.edit.head": "Edit Collection", + "collection.edit.head": "Modifica collection", + + // "collection.edit.breadcrumbs": "Edit Collection", + "collection.edit.breadcrumbs": "Modifica collection", + + + + // "collection.edit.tabs.mapper.head": "Item Mapper", + "collection.edit.tabs.mapper.head": "Mapper dell' Item", + + // "collection.edit.tabs.item-mapper.title": "Collection Edit - Item Mapper", + "collection.edit.tabs.item-mapper.title": "Modifica collection - Mapper dell'item", + + // "collection.edit.item-mapper.cancel": "Cancel", + "collection.edit.item-mapper.cancel": "Annulla", + + // "collection.edit.item-mapper.collection": "Collection: \"{{name}}\"", + "collection.edit.item-mapper.collection": "Collezione: \"{{name}}\"", + + // "collection.edit.item-mapper.confirm": "Map selected items", + "collection.edit.item-mapper.confirm": "Mappare gli item selezionati", + + // "collection.edit.item-mapper.description": "This is the item mapper tool that allows collection administrators to map items from other collections into this collection. You can search for items from other collections and map them, or browse the list of currently mapped items.", + "collection.edit.item-mapper.description": "Si tratta dello strumento di mapping degli item che consente agli amministratori della collection di mappare gli item di altre collections in questa collection. È possibile cercare item di altre collections e mapparli o sfogliare l'elenco degli item attualmente mappati.", + + // "collection.edit.item-mapper.head": "Item Mapper - Map Items from Other Collections", + "collection.edit.item-mapper.head": "Item Mapper - Mappa item di altre collections", + + // "collection.edit.item-mapper.no-search": "Please enter a query to search", + "collection.edit.item-mapper.no-search": "Inserisci una query per avviare la ricerca", + + // "collection.edit.item-mapper.notifications.map.error.content": "Errors occurred for mapping of {{amount}} items.", + "collection.edit.item-mapper.notifications.map.error.content": "Si sono verificati errori per la mappatura degli item {{amount}}.", + + // "collection.edit.item-mapper.notifications.map.error.head": "Mapping errors", + "collection.edit.item-mapper.notifications.map.error.head": "Errori di mappatura", + + // "collection.edit.item-mapper.notifications.map.success.content": "Successfully mapped {{amount}} items.", + "collection.edit.item-mapper.notifications.map.success.content": "Mappato correttamente gli item {{amount}}.", + + // "collection.edit.item-mapper.notifications.map.success.head": "Mapping completed", + "collection.edit.item-mapper.notifications.map.success.head": "Mappatura completata", + + // "collection.edit.item-mapper.notifications.unmap.error.content": "Errors occurred for removing the mappings of {{amount}} items.", + "collection.edit.item-mapper.notifications.unmap.error.content": "Si sono verificati errori per la rimozione dei mapping degli item {{amount}}.", + + // "collection.edit.item-mapper.notifications.unmap.error.head": "Remove mapping errors", + "collection.edit.item-mapper.notifications.unmap.error.head": "Rimuovere gli errori di mappatura", + + // "collection.edit.item-mapper.notifications.unmap.success.content": "Successfully removed the mappings of {{amount}} items.", + "collection.edit.item-mapper.notifications.unmap.success.content": "Rimosse con successo le mappature degli item {{amount}}.", + + // "collection.edit.item-mapper.notifications.unmap.success.head": "Remove mapping completed", + "collection.edit.item-mapper.notifications.unmap.success.head": "Rimuovere la mappatura completata", + + // "collection.edit.item-mapper.remove": "Remove selected item mappings", + "collection.edit.item-mapper.remove": "Rimuovere i mapping degli item selezionati", + + // "collection.edit.item-mapper.search-form.placeholder": "Search items...", + "collection.edit.item-mapper.search-form.placeholder": "Cerca item...", + + // "collection.edit.item-mapper.tabs.browse": "Browse mapped items", + "collection.edit.item-mapper.tabs.browse": "Sfoglia gli item mappati", + + // "collection.edit.item-mapper.tabs.map": "Map new items", + "collection.edit.item-mapper.tabs.map": "Mappare nuovi item", + + + // "collection.edit.logo.delete.title": "Delete logo", + "collection.edit.logo.delete.title": "Annulla eliminazione", + + // "collection.edit.logo.delete-undo.title": "Undo delete", + "collection.edit.logo.delete-undo.title": "Elimina logo", + + // "collection.edit.logo.label": "Collection logo", + "collection.edit.logo.label": "Logo della collection", + + // "collection.edit.logo.notifications.add.error": "Uploading Collection logo failed. Please verify the content before retrying.", + "collection.edit.logo.notifications.add.error": "Caricamento del logo della collection non riuscito. Verifica il contenuto prima di riprovare.", + + // "collection.edit.logo.notifications.add.success": "Upload Collection logo successful.", + "collection.edit.logo.notifications.add.success": "Caricamento del logo della collection riuscito.", + + // "collection.edit.logo.notifications.delete.success.title": "Logo deleted", + "collection.edit.logo.notifications.delete.success.title": "Logo cancellato", + + // "collection.edit.logo.notifications.delete.success.content": "Successfully deleted the collection's logo", + "collection.edit.logo.notifications.delete.success.content": "Eliminato con successo il logo della collection", + + // "collection.edit.logo.notifications.delete.error.title": "Error deleting logo", + "collection.edit.logo.notifications.delete.error.title": "Errore durante l'eliminazione del logo", + + // "collection.edit.logo.upload": "Drop a Collection Logo to upload", + "collection.edit.logo.upload": "Rilascia un logo della collection da caricare", + + + + // "collection.edit.notifications.success": "Successfully edited the Collection", + "collection.edit.notifications.success": "Modificata correttamente la collection", + + // "collection.edit.return": "Back", + "collection.edit.return": "Indietro", + + + + // "collection.edit.tabs.curate.head": "Curate", + "collection.edit.tabs.curate.head": "Curate", + + // "collection.edit.tabs.curate.title": "Collection Edit - Curate", + "collection.edit.tabs.curate.title": "Modifica collection - Curate", + + // "collection.edit.tabs.authorizations.head": "Authorizations", + "collection.edit.tabs.authorizations.head": "Autorizzazioni", + + // "collection.edit.tabs.authorizations.title": "Collection Edit - Authorizations", + "collection.edit.tabs.authorizations.title": "Collection Edit - Autorizzazioni", + + // "collection.edit.item.authorizations.load-bundle-button": "Load more bundles", + "collection.edit.item.authorizations.load-bundle-button": "Carica più bundles", + + // "collection.edit.item.authorizations.load-more-button": "Load more", + "collection.edit.item.authorizations.load-more-button": "Carica più risorse", + + // "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + // TODO New key - Add a translation + "collection.edit.item.authorizations.show-bitstreams-button": "Show bitstream policies for bundle", + + // "collection.edit.tabs.metadata.head": "Edit Metadata", + "collection.edit.tabs.metadata.head": "Modifica metadati", + + // "collection.edit.tabs.metadata.title": "Collection Edit - Metadata", + "collection.edit.tabs.metadata.title": "Modifica collection - Metadati", + + // "collection.edit.tabs.roles.head": "Assign Roles", + "collection.edit.tabs.roles.head": "Assegna ruoli", + + // "collection.edit.tabs.roles.title": "Collection Edit - Roles", + "collection.edit.tabs.roles.title": "Modifica collection - Ruoli", + + // "collection.edit.tabs.source.external": "This collection harvests its content from an external source", + "collection.edit.tabs.source.external": "Questa collection raccoglie il suo contenuto da una fonte esterna", + + // "collection.edit.tabs.source.form.errors.oaiSource.required": "You must provide a set id of the target collection.", + "collection.edit.tabs.source.form.errors.oaiSource.required": "È necessario fornire un ID impostato della collection di destinazione.", + + // "collection.edit.tabs.source.form.harvestType": "Content being harvested", + "collection.edit.tabs.source.form.harvestType": "Contenuto che è stato harvestato", + + // "collection.edit.tabs.source.form.head": "Configure an external source", + "collection.edit.tabs.source.form.head": "Configurare un'origine esterna", + + // "collection.edit.tabs.source.form.metadataConfigId": "Metadata Format", + "collection.edit.tabs.source.form.metadataConfigId": "Formato dei metadati", + + // "collection.edit.tabs.source.form.oaiSetId": "OAI specific set id", + "collection.edit.tabs.source.form.oaiSetId": "ID set specifico OAI", + + // "collection.edit.tabs.source.form.oaiSource": "OAI Provider", + "collection.edit.tabs.source.form.oaiSource": "OAI Provider", + + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Harvest metadata and bitstreams (requires ORE support)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_BITSTREAMS": "Harvest metadati e flussi di bit (richiede il supporto ORE)", + + // "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Harvest metadata and references to bitstreams (requires ORE support)", + "collection.edit.tabs.source.form.options.harvestType.METADATA_AND_REF": "Harvest di metadati e riferimenti a bitstream (richiede il supporto ORE)", + + // "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Harvest metadata only", + "collection.edit.tabs.source.form.options.harvestType.METADATA_ONLY": "Harvesta solo metadati", + + // "collection.edit.tabs.source.head": "Content Source", + "collection.edit.tabs.source.head": "Origine del contenuto", + + // "collection.edit.tabs.source.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "collection.edit.tabs.source.notifications.discarded.content": "Le modifiche sono state annullate. Per ripristinarle, fai clic sul pulsante \"Annulla\"", + + // "collection.edit.tabs.source.notifications.discarded.title": "Changes discarded", + // TODO Source message changed - Revise the translation + "collection.edit.tabs.source.notifications.discarded.title": "Modifiche eliminate", + + // "collection.edit.tabs.source.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "collection.edit.tabs.source.notifications.invalid.content": "Le modifiche non sono state salvate. Assicurati che tutti i campi siano validi prima di salvare.", + + // "collection.edit.tabs.source.notifications.invalid.title": "Metadata invalid", + "collection.edit.tabs.source.notifications.invalid.title": "Metadati non validi", + + // "collection.edit.tabs.source.notifications.saved.content": "Your changes to this collection's content source were saved.", + "collection.edit.tabs.source.notifications.saved.content": "Le modifiche apportate all'origine di contenuto della collection sono state salvate.", + + // "collection.edit.tabs.source.notifications.saved.title": "Content Source saved", + "collection.edit.tabs.source.notifications.saved.title": "Origine contenuto salvata", + + // "collection.edit.tabs.source.title": "Collection Edit - Content Source", + "collection.edit.tabs.source.title": "Modifica collection - Origine contenuto", + + + + // "collection.edit.template.add-button": "Add", + "collection.edit.template.add-button": "Aggiungere", + + // "collection.edit.template.breadcrumbs": "Item template", + "collection.edit.template.breadcrumbs": "Modello di Item", + + // "collection.edit.template.cancel": "Cancel", + "collection.edit.template.cancel": "Annulla", + + // "collection.edit.template.delete-button": "Delete", + "collection.edit.template.delete-button": "Cancellare", + + // "collection.edit.template.edit-button": "Edit", + "collection.edit.template.edit-button": "Editare", + + // "collection.edit.template.error": "An error occurred retrieving the template item", + "collection.edit.template.error": "Si è verificato un errore durante il recupero del modello dell' Item", + + // "collection.edit.template.head": "Edit Template Item for Collection \"{{ collection }}\"", + "collection.edit.template.head": "Modifica item modello per la collection \"{{ collection }}\"", + + // "collection.edit.template.label": "Template item", + "collection.edit.template.label": "Template per Item", + + // "collection.edit.template.loading": "Loading template item...", + "collection.edit.template.loading": "Caricamento del Template per Item...", + + // "collection.edit.template.notifications.delete.error": "Failed to delete the item template", + "collection.edit.template.notifications.delete.error": "Impossibile eliminare il Template dell' Item", + + // "collection.edit.template.notifications.delete.success": "Successfully deleted the item template", + "collection.edit.template.notifications.delete.success": "Eliminato correttamente il Template dell' Item", + + // "collection.edit.template.title": "Edit Template Item", + "collection.edit.template.title": "Modifica Template dell' Item", + + + + // "collection.form.abstract": "Short Description", + "collection.form.abstract": "Breve descrizione", + + // "collection.form.description": "Introductory text (HTML)", + "collection.form.description": "Testo introduttivo (HTML)", + + // "collection.form.errors.title.required": "Please enter a collection name", + "collection.form.errors.title.required": "Inserisci il nome di una collection", + + // "collection.form.license": "License", + "collection.form.license": "Licenza", + + // "collection.form.provenance": "Provenance", + "collection.form.provenance": "Provenienza", + + // "collection.form.rights": "Copyright text (HTML)", + "collection.form.rights": "Testo protetto da copyright (HTML)", + + // "collection.form.tableofcontents": "News (HTML)", + "collection.form.tableofcontents": "News (HTML)", + + // "collection.form.title": "Name", + "collection.form.title": "Nome", + + // "collection.form.entityType": "Entity Type", + "collection.form.entityType": "Tipo di entità", + + + + // "collection.listelement.badge": "Collection", + "collection.listelement.badge": "collection", + + + + // "collection.page.browse.recent.head": "Recent Submissions", + "collection.page.browse.recent.head": "submissions recenti", + + // "collection.page.browse.recent.empty": "No items to show", + "collection.page.browse.recent.empty": "Nessun item da mostrare", + + // "collection.page.edit": "Edit this collection", + "collection.page.edit": "Modifica questa collection", + + // "collection.page.handle": "Permanent URI for this collection", + "collection.page.handle": "URI permanente per questa collection", + + // "collection.page.license": "License", + "collection.page.license": "Licenza", + + // "collection.page.news": "News", + "collection.page.news": "News", + + + + // "collection.select.confirm": "Confirm selected", + "collection.select.confirm": "Conferma selezionato", + + // "collection.select.empty": "No collections to show", + "collection.select.empty": "Nessuna collection da mostrare", + + // "collection.select.table.title": "Title", + "collection.select.table.title": "Titolo", + + + // "collection.source.controls.head": "Harvest Controls", + "collection.source.controls.head": "Controlli del Harvester", + // "collection.source.controls.test.submit.error": "Something went wrong with initiating the testing of the settings", + "collection.source.controls.test.submit.error": "Qualcosa è andato storto con l'avvio del test delle impostazioni", + // "collection.source.controls.test.failed": "The script to test the settings has failed", + "collection.source.controls.test.failed": "Lo script per testare le impostazioni non è riuscito", + // "collection.source.controls.test.completed": "The script to test the settings has successfully finished", + "collection.source.controls.test.completed": "Lo script per testare le impostazioni è stato completato correttamente", + // "collection.source.controls.test.submit": "Test configuration", + "collection.source.controls.test.submit": "Configurazione di prova", + // "collection.source.controls.test.running": "Testing configuration...", + "collection.source.controls.test.running": "Configurazione di test...", + // "collection.source.controls.import.submit.success": "The import has been successfully initiated", + "collection.source.controls.import.submit.success": "L'importazione è stata avviata correttamente", + // "collection.source.controls.import.submit.error": "Something went wrong with initiating the import", + "collection.source.controls.import.submit.error": "Qualcosa è andato storto con l'avvio dell'importazione", + // "collection.source.controls.import.submit": "Import now", + "collection.source.controls.import.submit": "Importa ora", + // "collection.source.controls.import.running": "Importing...", + "collection.source.controls.import.running": "Importazione...", + // "collection.source.controls.import.failed": "An error occurred during the import", + "collection.source.controls.import.failed": "Si è verificato un errore durante l'importazione", + // "collection.source.controls.import.completed": "The import completed", + "collection.source.controls.import.completed": "L'importazione completata", + // "collection.source.controls.reset.submit.success": "The reset and reimport has been successfully initiated", + "collection.source.controls.reset.submit.success": "Il ripristino e la reimportazione sono stati avviati correttamente", + // "collection.source.controls.reset.submit.error": "Something went wrong with initiating the reset and reimport", + "collection.source.controls.reset.submit.error": "Qualcosa è andato storto con l'avvio del ripristino e della reimportazione", + // "collection.source.controls.reset.failed": "An error occurred during the reset and reimport", + "collection.source.controls.reset.failed": "Si è verificato un errore durante il ripristino e la reimportazione", + // "collection.source.controls.reset.completed": "The reset and reimport completed", + "collection.source.controls.reset.completed": "Il ripristino e la reimportazione completati", + // "collection.source.controls.reset.submit": "Reset and reimport", + "collection.source.controls.reset.submit": "Reimpostazione e reimportazione", + // "collection.source.controls.reset.running": "Resetting and reimporting...", + "collection.source.controls.reset.running": "Reimpostazione e reimportazione...", + // "collection.source.controls.harvest.status": "Harvest status:", + // TODO New key - Add a translation + "collection.source.controls.harvest.status": "Harvest status:", + // "collection.source.controls.harvest.start": "Harvest start time:", + // TODO New key - Add a translation + "collection.source.controls.harvest.start": "Harvest start time:", + // "collection.source.controls.harvest.last": "Last time harvested:", + // TODO New key - Add a translation + "collection.source.controls.harvest.last": "Last time harvested:", + // "collection.source.controls.harvest.message": "Harvest info:", + // TODO New key - Add a translation + "collection.source.controls.harvest.message": "Harvest info:", + // "collection.source.controls.harvest.no-information": "N/A", + "collection.source.controls.harvest.no-information": "N/D", + + + // "collection.source.update.notifications.error.content": "The provided settings have been tested and didn't work.", + "collection.source.update.notifications.error.content": "Le impostazioni fornite sono state testate e non hanno funzionato.", + + // "collection.source.update.notifications.error.title": "Server Error", + "collection.source.update.notifications.error.title": "Errore del server", + + + + // "communityList.breadcrumbs": "Community List", + "communityList.breadcrumbs": "Elenco della Community", + + // "communityList.tabTitle": "Community List", + "communityList.tabTitle": "Elenco della Community", + + // "communityList.title": "List of Communities", + "communityList.title": "Elenco delle Community", + + // "communityList.showMore": "Show More", + "communityList.showMore": "Mostra di più", + + + + // "community.create.head": "Create a Community", + "community.create.head": "Crea una Community", + + // "community.create.notifications.success": "Successfully created the Community", + "community.create.notifications.success": "Community creata con successo", + + // "community.create.sub-head": "Create a Sub-Community for Community {{ parent }}", + "community.create.sub-head": "Creare una sotto-Community per la Community {{ parent }}", + + // "community.curate.header": "Curate Community: {{community}}", + "community.curate.header": "Curate della Community: {{community}}", + + // "community.delete.cancel": "Cancel", + "community.delete.cancel": "Annulla", + + // "community.delete.confirm": "Confirm", + "community.delete.confirm": "Conferma", + + // "community.delete.processing": "Deleting...", + "community.delete.processing": "Eliminazione...", + + // "community.delete.head": "Delete Community", + "community.delete.head": "Elimina la community", + + // "community.delete.notification.fail": "Community could not be deleted", + "community.delete.notification.fail": "Impossibile eliminare la community", + + // "community.delete.notification.success": "Successfully deleted community", + "community.delete.notification.success": "Community eliminata con successo", + + // "community.delete.text": "Are you sure you want to delete community \"{{ dso }}\"", + "community.delete.text": "Sei sicuro di voler eliminare la community \"{{ dso }}\"", + + // "community.edit.delete": "Delete this community", + "community.edit.delete": "Elimina questa community", + + // "community.edit.head": "Edit Community", + "community.edit.head": "Modifica la community", + + // "community.edit.breadcrumbs": "Edit Community", + "community.edit.breadcrumbs": "Modifica la community", + + + // "community.edit.logo.delete.title": "Delete logo", + "community.edit.logo.delete.title": "Elimina logo", + + // "community.edit.logo.delete-undo.title": "Undo delete", + "community.edit.logo.delete-undo.title": "Annulla l'eliminazione", + + // "community.edit.logo.label": "Community logo", + "community.edit.logo.label": "Logo della community", + + // "community.edit.logo.notifications.add.error": "Uploading Community logo failed. Please verify the content before retrying.", + "community.edit.logo.notifications.add.error": "Caricamento del logo della community non riuscito. Verifica il contenuto prima di riprovare.", + + // "community.edit.logo.notifications.add.success": "Upload Community logo successful.", + "community.edit.logo.notifications.add.success": "Il logo della community è stato caricato con successo.", + + // "community.edit.logo.notifications.delete.success.title": "Logo deleted", + "community.edit.logo.notifications.delete.success.title": "Logo eliminato", + + // "community.edit.logo.notifications.delete.success.content": "Successfully deleted the community's logo", + "community.edit.logo.notifications.delete.success.content": "Il logo della community è stato eliminato con successo", + + // "community.edit.logo.notifications.delete.error.title": "Error deleting logo", + "community.edit.logo.notifications.delete.error.title": "Errore durante l'eliminazione del logo", + + // "community.edit.logo.upload": "Drop a Community Logo to upload", + "community.edit.logo.upload": "Rilascia un logo della community da caricare", + + + + // "community.edit.notifications.success": "Successfully edited the Community", + "community.edit.notifications.success": "La community è stata modificata con successo", + + // "community.edit.notifications.unauthorized": "You do not have privileges to make this change", + "community.edit.notifications.unauthorized": "Non si dispone dei privilegi per apportare questa modifica", + + // "community.edit.notifications.error": "An error occured while editing the Community", + "community.edit.notifications.error": "Si è verificato un errore durante la modifica della community", + + // "community.edit.return": "Back", + "community.edit.return": "Indietro", + + + + // "community.edit.tabs.curate.head": "Curate", + "community.edit.tabs.curate.head": "Curate", + + // "community.edit.tabs.curate.title": "Community Edit - Curate", + "community.edit.tabs.curate.title": "Modifica community - Curate", + + // "community.edit.tabs.metadata.head": "Edit Metadata", + "community.edit.tabs.metadata.head": "Modifica metadati", + + // "community.edit.tabs.metadata.title": "Community Edit - Metadata", + "community.edit.tabs.metadata.title": "Modifica community - Metadati", + + // "community.edit.tabs.roles.head": "Assign Roles", + "community.edit.tabs.roles.head": "Assegna ruoli", + + // "community.edit.tabs.roles.title": "Community Edit - Roles", + "community.edit.tabs.roles.title": "Modifica community - Ruoli", + + // "community.edit.tabs.authorizations.head": "Authorizations", + "community.edit.tabs.authorizations.head": "Autorizzazioni", + + // "community.edit.tabs.authorizations.title": "Community Edit - Authorizations", + "community.edit.tabs.authorizations.title": "Modifica community - Autorizzazioni", + + + + // "community.listelement.badge": "Community", + "community.listelement.badge": "Community", + + + + // "comcol-role.edit.no-group": "None", + "comcol-role.edit.no-group": "Nessuno", + + // "comcol-role.edit.create": "Create", + "comcol-role.edit.create": "Crea", + + // "comcol-role.edit.create.error.title": "Failed to create a group for the '{{ role }}' role", + "comcol-role.edit.create.error.title": "Non è stato possibile creare un gruppo per il ruolo '{{ role }}'", + + // "comcol-role.edit.restrict": "Restrict", + "comcol-role.edit.restrict": "Restringi", + + // "comcol-role.edit.delete": "Delete", + "comcol-role.edit.delete": "Cancella", + + // "comcol-role.edit.delete.error.title": "Failed to delete the '{{ role }}' role's group", + "comcol-role.edit.delete.error.title": "Non è stato possibile cancellare il ruolo '{{ role }}' del gruppo", + + + // "comcol-role.edit.community-admin.name": "Administrators", + "comcol-role.edit.community-admin.name": "Amministratori", + + // "comcol-role.edit.collection-admin.name": "Administrators", + "comcol-role.edit.collection-admin.name": "Amministratori", + + + // "comcol-role.edit.community-admin.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", + "comcol-role.edit.community-admin.description": "Gli amministratori della community possono creare sotto-community o collections e gestire o assegnare la loro gestione. Inoltre, decidono chi può depositare item in qualsiasi sotto-collections, modificare i metadati degli item (dopo l'invio) e aggiungere (mappare) item esistenti da altre collections (previa autorizzazione).", + + // "comcol-role.edit.collection-admin.description": "Collection administrators decide who can submit items to the collection, edit item metadata (after submission), and add (map) existing items from other collections to this collection (subject to authorization for that collection).", + "comcol-role.edit.collection-admin.description": "Gli amministratori della collection decidono chi può depositare item nella collection, modificare i metadati dell'item (dopo l'invio) e aggiungere (mappare) item da altre collections a questa collection (soggetto all'autorizzazione per tale collection).", + + + // "comcol-role.edit.submitters.name": "Submitters", + "comcol-role.edit.submitters.name": "Submitters", + + // "comcol-role.edit.submitters.description": "The E-People and Groups that have permission to submit new items to this collection.", + "comcol-role.edit.submitters.description": "E-People e Gruppi che dispongono dell'autorizzazione per depositare nuovi item in questa collection.", + + + // "comcol-role.edit.item_read.name": "Default item read access", + "comcol-role.edit.item_read.name": "Accesso di sola lettura per gli item", + + // "comcol-role.edit.item_read.description": "E-People and Groups that can read new items submitted to this collection. Changes to this role are not retroactive. Existing items in the system will still be viewable by those who had read access at the time of their addition.", + "comcol-role.edit.item_read.description": "E-People e gruppi in grado di leggere i nuovi item depositati in questa collection. Le modifiche a questo ruolo non sono retroattive. Gli item esistenti nel sistema saranno ancora visualizzabili da coloro che avevano accesso in sola lettura al momento della loro archiviazione.", + + // "comcol-role.edit.item_read.anonymous-group": "Default read for incoming items is currently set to Anonymous.", + "comcol-role.edit.item_read.anonymous-group": "L'accesso di sola lettura per gli item depositati è attualmente impostata su Anonimo.", + + + // "comcol-role.edit.bitstream_read.name": "Default bitstream read access", + "comcol-role.edit.bitstream_read.name": "Accesso di sola lettura per il bitstream", + + // "comcol-role.edit.bitstream_read.description": "Community administrators can create sub-communities or collections, and manage or assign management for those sub-communities or collections. In addition, they decide who can submit items to any sub-collections, edit item metadata (after submission), and add (map) existing items from other collections (subject to authorization).", + "comcol-role.edit.bitstream_read.description": "Gli amministratori della community possono creare sotto-community o collections e gestire o assegnare la loro gestione. Inoltre, decidono chi può depositare item in qualsiasi sotto-collections, modificare i metadati degli item (dopo l'invio) e aggiungere (mappare) item esistenti da altre collections (previa autorizzazione).", + + // "comcol-role.edit.bitstream_read.anonymous-group": "Default read for incoming bitstreams is currently set to Anonymous.", + "comcol-role.edit.bitstream_read.anonymous-group": "L'accesso di sola lettura per i bitstreams depositati è attualmente impostata su Anonimo.", + + + // "comcol-role.edit.editor.name": "Editors", + "comcol-role.edit.editor.name": "Editor", + + // "comcol-role.edit.editor.description": "Editors are able to edit the metadata of incoming submissions, and then accept or reject them.", + "comcol-role.edit.editor.description": "Gli editor possono modificare i metadati delle submissions depositate e quindi accettarli o rifiutarli.", + + + // "comcol-role.edit.finaleditor.name": "Final editors", + "comcol-role.edit.finaleditor.name": "Editor finali", + + // "comcol-role.edit.finaleditor.description": "Final editors are able to edit the metadata of incoming submissions, but will not be able to reject them.", + "comcol-role.edit.finaleditor.description": "Gli editor finali sono in grado di modificare i metadati delle submissions depositate, ma non saranno in grado di rifiutarli.", + + + // "comcol-role.edit.reviewer.name": "Reviewers", + "comcol-role.edit.reviewer.name": "Revisori", + + // "comcol-role.edit.reviewer.description": "Reviewers are able to accept or reject incoming submissions. However, they are not able to edit the submission's metadata.", + "comcol-role.edit.reviewer.description": "I revisori sono in grado di accettare o rifiutare le submissions depositate. Tuttavia, non sono in grado di modificare i metadati della submission.", + + + + // "community.form.abstract": "Short Description", + "community.form.abstract": "Breve descrizione", + + // "community.form.description": "Introductory text (HTML)", + "community.form.description": "Testo introduttivo (HTML)", + + // "community.form.errors.title.required": "Please enter a community name", + "community.form.errors.title.required": "Inserisci il nome di una community", + + // "community.form.rights": "Copyright text (HTML)", + "community.form.rights": "Testo protetto da copyright (HTML)", + + // "community.form.tableofcontents": "News (HTML)", + "community.form.tableofcontents": "News (HTML)", + + // "community.form.title": "Name", + "community.form.title": "Nome", + + // "community.page.edit": "Edit this community", + "community.page.edit": "Modifica questa community", + + // "community.page.handle": "Permanent URI for this community", + "community.page.handle": "URI permanente di questa Community", + + // "community.page.license": "License", + "community.page.license": "Licenza", + + // "community.page.news": "News", + "community.page.news": "News", + + // "community.all-lists.head": "Subcommunities and Collections", + "community.all-lists.head": "Sub-community e collections", + + // "community.sub-collection-list.head": "Collections of this Community", + "community.sub-collection-list.head": "Collections di questa community", + + // "community.sub-community-list.head": "Communities of this Community", + "community.sub-community-list.head": "Communities di questa Community", + + + + // "cookies.consent.accept-all": "Accept all", + "cookies.consent.accept-all": "Accetta tutto", + + // "cookies.consent.accept-selected": "Accept selected", + "cookies.consent.accept-selected": "Accetta la selezione", + + // "cookies.consent.app.opt-out.description": "This app is loaded by default (but you can opt out)", + "cookies.consent.app.opt-out.description": "Questa app è caricata con impostazione predefinita (ma puoi disattivare)", + + // "cookies.consent.app.opt-out.title": "(opt-out)", + "cookies.consent.app.opt-out.title": "(opt-out)", + + // "cookies.consent.app.purpose": "purpose", + "cookies.consent.app.purpose": "scopo", + + // "cookies.consent.app.required.description": "This application is always required", + "cookies.consent.app.required.description": "Questa applicazione è sempre richiesta", + + // "cookies.consent.app.required.title": "(always required)", + "cookies.consent.app.required.title": "(sempre obbligatorio)", + + // "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + // TODO New key - Add a translation + "cookies.consent.app.disable-all.description": "Use this switch to enable or disable all services.", + + // "cookies.consent.app.disable-all.title": "Enable or disable all services", + // TODO New key - Add a translation + "cookies.consent.app.disable-all.title": "Enable or disable all services", + + // "cookies.consent.update": "There were changes since your last visit, please update your consent.", + "cookies.consent.update": "Ci sono stati dei cambiamenti dal tuo ultimo accesso, aggiorna il tuo consenso.", + + // "cookies.consent.close": "Close", + "cookies.consent.close": "Chiudere", + + // "cookies.consent.decline": "Decline", + "cookies.consent.decline": "Declinare", + + // "cookies.consent.ok": "That's ok", + // TODO New key - Add a translation + "cookies.consent.ok": "That's ok", + + // "cookies.consent.save": "Save", + // TODO New key - Add a translation + "cookies.consent.save": "Save", + + // "cookies.consent.content-notice.title": "Cookie Consent", + // TODO New key - Add a translation + "cookies.consent.content-notice.title": "Cookie Consent", + + // "cookies.consent.content-notice.description": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.
    To learn more, please read our {privacyPolicy}.", + "cookies.consent.content-notice.description": "Raccogliamo e processiamo le tue informazioni personali per i seguenti scopi: Autenticazione, Preferenze, Accettazione e Statistiche.
    Per saperne di più, leggi la nostra {privacyPolicy}.", + + // "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + // TODO New key - Add a translation + "cookies.consent.content-notice.description.no-privacy": "We collect and process your personal information for the following purposes: Authentication, Preferences, Acknowledgement and Statistics.", + + // "cookies.consent.content-notice.learnMore": "Customize", + "cookies.consent.content-notice.learnMore": "Personalizza", + + // "cookies.consent.content-modal.description": "Here you can see and customize the information that we collect about you.", + "cookies.consent.content-modal.description": "Qui puoi vedere e personalizzare le informazioni che raccogliamo su di te.", + + // "cookies.consent.content-modal.privacy-policy.name": "privacy policy", + "cookies.consent.content-modal.privacy-policy.name": "Informativa sulla privacy", + + // "cookies.consent.content-modal.privacy-policy.text": "To learn more, please read our {privacyPolicy}.", + "cookies.consent.content-modal.privacy-policy.text": "Per saperne di più, leggi la nostra {privacyPolicy}.", + + // "cookies.consent.content-modal.title": "Information that we collect", + "cookies.consent.content-modal.title": "Informazioni che raccogliamo", + + // "cookies.consent.content-modal.services": "services", + // TODO New key - Add a translation + "cookies.consent.content-modal.services": "services", + + // "cookies.consent.content-modal.service": "service", + // TODO New key - Add a translation + "cookies.consent.content-modal.service": "service", + + // "cookies.consent.app.title.authentication": "Authentication", + "cookies.consent.app.title.authentication": "Autenticazione", + + // "cookies.consent.app.description.authentication": "Required for signing you in", + "cookies.consent.app.description.authentication": "Necessario per l'accesso", + + + // "cookies.consent.app.title.preferences": "Preferences", + "cookies.consent.app.title.preferences": "Preferenze", + + // "cookies.consent.app.description.preferences": "Required for saving your preferences", + "cookies.consent.app.description.preferences": "Necessario per salvare le tue preferenze", + + + + // "cookies.consent.app.title.acknowledgement": "Acknowledgement", + "cookies.consent.app.title.acknowledgement": "Riconoscimento", + + // "cookies.consent.app.description.acknowledgement": "Required for saving your acknowledgements and consents", + "cookies.consent.app.description.acknowledgement": "Necessario per salvare i riconoscimenti e i consensi", + + + + // "cookies.consent.app.title.google-analytics": "Google Analytics", + "cookies.consent.app.title.google-analytics": "Google Analitica", + + // "cookies.consent.app.description.google-analytics": "Allows us to track statistical data", + "cookies.consent.app.description.google-analytics": "Ci permette di tracciare i dati statistici", + + + + // "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + // TODO New key - Add a translation + "cookies.consent.app.title.google-recaptcha": "Google reCaptcha", + + // "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + // TODO New key - Add a translation + "cookies.consent.app.description.google-recaptcha": "We use google reCAPTCHA service during registration and password recovery", + + + // "cookies.consent.purpose.functional": "Functional", + "cookies.consent.purpose.functional": "Funzionale", + + // "cookies.consent.purpose.statistical": "Statistical", + "cookies.consent.purpose.statistical": "Statistico", + + // "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + // TODO New key - Add a translation + "cookies.consent.purpose.registration-password-recovery": "Registration and Password recovery", + + // "cookies.consent.purpose.sharing": "Sharing", + "cookies.consent.purpose.sharing": "Condivisione", + + // "curation-task.task.citationpage.label": "Generate Citation Page", + // TODO New key - Add a translation + "curation-task.task.citationpage.label": "Generate Citation Page", + + // "curation-task.task.checklinks.label": "Check Links in Metadata", + "curation-task.task.checklinks.label": "Controllare i collegamenti nei metadati", + + // "curation-task.task.noop.label": "NOOP", + "curation-task.task.noop.label": "NOOP", + + // "curation-task.task.profileformats.label": "Profile Bitstream Formats", + "curation-task.task.profileformats.label": "Formati Bitstream del profilo", + + // "curation-task.task.requiredmetadata.label": "Check for Required Metadata", + "curation-task.task.requiredmetadata.label": "Verifica la disponibilità di metadati richiesti", + + // "curation-task.task.translate.label": "Microsoft Translator", + "curation-task.task.translate.label": "Microsoft Translator", + + // "curation-task.task.vscan.label": "Virus Scan", + "curation-task.task.vscan.label": "Scansione antivirus", + + + + // "curation.form.task-select.label": "Task:", + "curation.form.task-select.label": "Task:", + + // "curation.form.submit": "Start", + "curation.form.submit": "Inizio", + + // "curation.form.submit.success.head": "The curation task has been started successfully", + "curation.form.submit.success.head": "La curation task è stata avviata correttamente", + + // "curation.form.submit.success.content": "You will be redirected to the corresponding process page.", + "curation.form.submit.success.content": "Verrai reindirizzato alla pagina del processo corrispondente.", + + // "curation.form.submit.error.head": "Running the curation task failed", + "curation.form.submit.error.head": "Esecuzione della curation task non riuscita", + + // "curation.form.submit.error.content": "An error occured when trying to start the curation task.", + "curation.form.submit.error.content": "Si è verificato un errore durante il tentativo di avviare la curation task", + + // "curation.form.submit.error.invalid-handle": "Couldn't determine the handle for this object", + "curation.form.submit.error.invalid-handle": "Non è stato possibile determinare l'handle per questo oggetto", + + // "curation.form.handle.label": "Handle:", + "curation.form.handle.label": "Handle:", + + // "curation.form.handle.hint": "Hint: Enter [your-handle-prefix]/0 to run a task across entire site (not all tasks may support this capability)", + "curation.form.handle.hint": "Suggerimento: Inserisci [your-handle-prefix]/0 per eseguire il task in tutto il sito (non tutti i task supportano questa funzionalità)", + + + + // "deny-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I regret to inform you that it's not possible to send you a copy of the file(s) you have requested, concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "deny-request-copy.email.message": "Gentile {{ recipientName }},\nIn risposta alla tua richiesta, mi dispiace informarti che non è possibile inviarti una copia del file(s) richiesto, riguardante il documento: \"{{ itemUrl }}\" ({{ itemName }}), di cui sono uno degli autori. \n\nCordiali saluti,\n{{ authorName }} <{{ authorEmail }}>", + + // "deny-request-copy.email.subject": "Request copy of document", + "deny-request-copy.email.subject": "Richiedi copia del documento", + + // "deny-request-copy.error": "An error occurred", + "deny-request-copy.error": "Si è verificato un errore", + + // "deny-request-copy.header": "Deny document copy request", + "deny-request-copy.header": "Nega richiesta di copia del documento", + + // "deny-request-copy.intro": "This message will be sent to the applicant of the request", + "deny-request-copy.intro": "Questo messaggio verrà inviato al richiedente della richiesta", + + // "deny-request-copy.success": "Successfully denied item request", + "deny-request-copy.success": "Richiesta di item rifiutata con successo", + + + + // "dso.name.untitled": "Untitled", + "dso.name.untitled": "Untitled", + + + + // "dso-selector.create.collection.head": "New collection", + "dso-selector.create.collection.head": "Nuova collection", + + // "dso-selector.create.collection.sub-level": "Create a new collection in", + "dso-selector.create.collection.sub-level": "Creare una nuova collection in", + + // "dso-selector.create.community.head": "New community", + "dso-selector.create.community.head": "Nuova Community", + + // "dso-selector.create.community.sub-level": "Create a new community in", + "dso-selector.create.community.sub-level": "Creare una nuova community in", + + // "dso-selector.create.community.top-level": "Create a new top-level community", + "dso-selector.create.community.top-level": "Creare una nuova community di primo livello", + + // "dso-selector.create.item.head": "New item", + "dso-selector.create.item.head": "Nuovo articolo", + + // "dso-selector.create.item.sub-level": "Create a new item in", + "dso-selector.create.item.sub-level": "Creare un nuovo item in", + + // "dso-selector.create.submission.head": "New submission", + "dso-selector.create.submission.head": "Nuova submission", + + // "dso-selector.edit.collection.head": "Edit collection", + "dso-selector.edit.collection.head": "Modifica collection", + + // "dso-selector.edit.community.head": "Edit community", + "dso-selector.edit.community.head": "Modifica Community", + + // "dso-selector.edit.item.head": "Edit item", + "dso-selector.edit.item.head": "Modifica item", + + // "dso-selector.error.title": "An error occurred searching for a {{ type }}", + "dso-selector.error.title": "Si è verificato un errore durante la ricerca di un {{ type }}", + + // "dso-selector.export-metadata.dspaceobject.head": "Export metadata from", + "dso-selector.export-metadata.dspaceobject.head": "Esportare metadati da", + + // "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + // TODO New key - Add a translation + "dso-selector.export-batch.dspaceobject.head": "Export Batch (ZIP) from", + + // "dso-selector.import-batch.dspaceobject.head": "Import batch from", + // TODO New key - Add a translation + "dso-selector.import-batch.dspaceobject.head": "Import batch from", + + // "dso-selector.no-results": "No {{ type }} found", + "dso-selector.no-results": "Nessun {{ type }} trovato", + + // "dso-selector.placeholder": "Search for a {{ type }}", + "dso-selector.placeholder": "Cerca un {{ type }}", + + // "dso-selector.select.collection.head": "Select a collection", + "dso-selector.select.collection.head": "Seleziona una collection", + + // "dso-selector.set-scope.community.head": "Select a search scope", + "dso-selector.set-scope.community.head": "Selezionare un ambito di ricerca", + + // "dso-selector.set-scope.community.button": "Search all of DSpace", + "dso-selector.set-scope.community.button": "Cerca in tutto DSpace", + + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", + "dso-selector.set-scope.community.input-header": "Cercare una community o una collection", + + // "dso-selector.claim.item.head": "Profile tips", + "dso-selector.claim.item.head": "Suggerimenti per il profilo", + + // "dso-selector.claim.item.body": "These are existing profiles that may be related to you. If you recognize yourself in one of these profiles, select it and on the detail page, among the options, choose to claim it. Otherwise you can create a new profile from scratch using the button below.", + "dso-selector.claim.item.body": "Questi sono profili esistenti che potrebbero essere correlati a te. Se ti riconosci in uno di questi profili, selezionalo e, nella pagina dei dettagli, tra le opzioni, scegli di collegarlo. In caso contrario, puoi creare un nuovo profilo cliccando il pulsante qui sotto.", + + // "dso-selector.claim.item.not-mine-label": "None of these are mine", + "dso-selector.claim.item.not-mine-label": "Nessuno di questi è il mio profilo", + + // "dso-selector.claim.item.create-from-scratch": "Create a new one", + "dso-selector.claim.item.create-from-scratch": "Crea uno nuovo profilo", + + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", + "confirmation-modal.export-metadata.header": "Esportare i metadati per {{ dsoName }}", + + // "confirmation-modal.export-metadata.info": "Are you sure you want to export metadata for {{ dsoName }}", + "confirmation-modal.export-metadata.info": "Sei sicuro di voler esportare i metadati per {{ dsoName }}", + + // "confirmation-modal.export-metadata.cancel": "Cancel", + "confirmation-modal.export-metadata.cancel": "Annulla", + + // "confirmation-modal.export-metadata.confirm": "Export", + "confirmation-modal.export-metadata.confirm": "Export", + + // "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + // TODO New key - Add a translation + "confirmation-modal.export-batch.header": "Export batch (ZIP) for {{ dsoName }}", + + // "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + // TODO New key - Add a translation + "confirmation-modal.export-batch.info": "Are you sure you want to export batch (ZIP) for {{ dsoName }}", + + // "confirmation-modal.export-batch.cancel": "Cancel", + // TODO New key - Add a translation + "confirmation-modal.export-batch.cancel": "Cancel", + + // "confirmation-modal.export-batch.confirm": "Export", + // TODO New key - Add a translation + "confirmation-modal.export-batch.confirm": "Export", + + // "confirmation-modal.delete-eperson.header": "Delete EPerson \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.header": "Elimina EPerson \"{{ dsoName }}\"", + + // "confirmation-modal.delete-eperson.info": "Are you sure you want to delete EPerson \"{{ dsoName }}\"", + "confirmation-modal.delete-eperson.info": "Sei sicuro di voler eliminare l'EPerson \"{{ dsoName }}\"", + + // "confirmation-modal.delete-eperson.cancel": "Cancel", + "confirmation-modal.delete-eperson.cancel": "Annulla", + + // "confirmation-modal.delete-eperson.confirm": "Delete", + "confirmation-modal.delete-eperson.confirm": "Elimina", + + // "confirmation-modal.delete-profile.header": "Delete Profile", + "confirmation-modal.delete-profile.header": "Elimina il profilo", + + // "confirmation-modal.delete-profile.info": "Are you sure you want to delete your profile", + "confirmation-modal.delete-profile.info": "Sei sicuro di voler eliminare il tuo profilo", + + // "confirmation-modal.delete-profile.cancel": "Cancel", + "confirmation-modal.delete-profile.cancel": "Annulla", + + // "confirmation-modal.delete-profile.confirm": "Delete", + "confirmation-modal.delete-profile.confirm": "Elimina", + + + // "error.bitstream": "Error fetching bitstream", + "error.bitstream": "Errore durante il recupero del bitstream", + + // "error.browse-by": "Error fetching items", + "error.browse-by": "Errore durante il recupero degli item", + + // "error.collection": "Error fetching collection", + "error.collection": "Errore durante il recupero della collection", + + // "error.collections": "Error fetching collections", + "error.collections": "Errore durante il recupero delle collections", + + // "error.community": "Error fetching community", + "error.community": "Errore durante il recupero della community", + + // "error.identifier": "No item found for the identifier", + "error.identifier": "Nessun item trovato per l'identificatore", + + // "error.default": "Error", + "error.default": "Errore", + + // "error.item": "Error fetching item", + "error.item": "Errore durante il recupero dell'item", + + // "error.items": "Error fetching items", + "error.items": "Errore durante il recupero degli item", + + // "error.objects": "Error fetching objects", + "error.objects": "Errore durante il recupero degli oggetti", + + // "error.recent-submissions": "Error fetching recent submissions", + "error.recent-submissions": "Errore durante il recupero delle submissions recenti", + + // "error.search-results": "Error fetching search results", + "error.search-results": "Errore durante il recupero dei risultati della ricerca", + + // "error.invalid-search-query": "Search query is not valid. Please check Solr query syntax best practices for further information about this error.", + "error.invalid-search-query": "La query di ricerca non è valida. Controllare Solr query syntax per ulteriori informazioni riguardo questo errore.", + + // "error.sub-collections": "Error fetching sub-collections", + "error.sub-collections": "Errore durante il recupero delle sottoreti", + + // "error.sub-communities": "Error fetching sub-communities", + "error.sub-communities": "Errore durante il recupero delle sottocomitarie", + + // "error.submission.sections.init-form-error": "An error occurred during section initialize, please check your input-form configuration. Details are below :

    ", + "error.submission.sections.init-form-error": "Si è verificato un errore durante l'inizializzazione della sezione, controllare la configurazione dell'input-form. Dettagli:

    ", + + // "error.top-level-communities": "Error fetching top-level communities", + "error.top-level-communities": "Errore durante il recupero delle community di primo livello", + + // "error.validation.license.notgranted": "You must grant this license to complete your submission. If you are unable to grant this license at this time you may save your work and return later or remove the submission.", + "error.validation.license.notgranted": "È necessario concedere questa licenza per completare la submission. Se non sei in grado di concedere questa licenza in questo momento, puoi salvare il tuo lavoro e tornare più tardi o rimuovere la submission.", + + // "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", + // TODO New key - Add a translation + "error.validation.pattern": "This input is restricted by the current pattern: {{ pattern }}.", + + // "error.validation.filerequired": "The file upload is mandatory", + "error.validation.filerequired": "Il caricamento del file è obbligatorio", + + // "error.validation.required": "This field is required", + "error.validation.required": "Questo campo è obbligatorio", + + // "error.validation.NotValidEmail": "This E-mail is not a valid email", + "error.validation.NotValidEmail": "Questa e-mail non è un'e-mail valida", + + // "error.validation.emailTaken": "This E-mail is already taken", + "error.validation.emailTaken": "Questa e-mail è già in uso", + + // "error.validation.groupExists": "This group already exists", + "error.validation.groupExists": "Gruppo già esistente", + + + // "feed.description": "Syndication feed", + // TODO New key - Add a translation + "feed.description": "Syndication feed", + + + // "file-section.error.header": "Error obtaining files for this item", + "file-section.error.header": "Errore durante il recupero dei file per questo item", + + + + // "footer.copyright": "copyright © 2002-{{ year }}", + "footer.copyright": "copyright © 2002-{{ year }}", + + // "footer.link.dspace": "DSpace software", + "footer.link.dspace": "Software DSpace", + + // "footer.link.lyrasis": "LYRASIS", + "footer.link.lyrasis": "LYRASIS", + + // "footer.link.cookies": "Cookie settings", + "footer.link.cookies": "Impostazioni dei cookie", + + // "footer.link.privacy-policy": "Privacy policy", + "footer.link.privacy-policy": "Informativa sulla privacy", + + // "footer.link.end-user-agreement":"End User Agreement", + "footer.link.end-user-agreement": "Accordo con l'utente finale", + + // "footer.link.feedback":"Send Feedback", + "footer.link.feedback": "Invia Feedback", + + + + // "forgot-email.form.header": "Forgot Password", + "forgot-email.form.header": "Password dimenticata", + + // "forgot-email.form.info": "Enter the email address associated with the account.", + // TODO Source message changed - Revise the translation + "forgot-email.form.info": "Accedi a registra un account per iscriverti alle collections, per ricevere aggiornamenti via email e per poter inserire nuovi item in DSpace.", + + // "forgot-email.form.email": "Email Address *", + "forgot-email.form.email": "Indirizzo email *", + + // "forgot-email.form.email.error.required": "Please fill in an email address", + "forgot-email.form.email.error.required": "Si prega di inserire un indirizzo email", + + // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", + "forgot-email.form.email.error.pattern": "Si prega di inserire un indirizzo email valido", + + // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", + // TODO Source message changed - Revise the translation + "forgot-email.form.email.hint": "Questo indirizzo verrà verificato e utilizzato come login name.", + + // "forgot-email.form.submit": "Reset password", + // TODO Source message changed - Revise the translation + "forgot-email.form.submit": "Salva", + + // "forgot-email.form.success.head": "Password reset email sent", + // TODO Source message changed - Revise the translation + "forgot-email.form.success.head": "Email di verifica inviata", + + // "forgot-email.form.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", + "forgot-email.form.success.content": "È stata inviata un'email a {{ email }} contenente un URL speciale e ulteriori indicazioni.", + + // "forgot-email.form.error.head": "Error when trying to reset password", + // TODO Source message changed - Revise the translation + "forgot-email.form.error.head": "Errore durante il tentativo di registrare l'email", + + // "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + // TODO New key - Add a translation + "forgot-email.form.error.content": "An error occured when attempting to reset the password for the account associated with the following email address: {{ email }}", + + + + // "forgot-password.title": "Forgot Password", + "forgot-password.title": "Password dimenticata", + + // "forgot-password.form.head": "Forgot Password", + "forgot-password.form.head": "Password dimenticata", + + // "forgot-password.form.info": "Enter a new password in the box below, and confirm it by typing it again into the second box.", + // TODO Source message changed - Revise the translation + "forgot-password.form.info": "Inserisci una nuova password nella casella qui sotto e confermala digitandola di nuovo nella seconda casella. Dovrebbe avere una lunghezza di almeno sei caratteri.", + + // "forgot-password.form.card.security": "Security", + "forgot-password.form.card.security": "Sicurezza", + + // "forgot-password.form.identification.header": "Identify", + "forgot-password.form.identification.header": "Identifica", + + // "forgot-password.form.identification.email": "Email address: ", + "forgot-password.form.identification.email": "Indirizzo email: ", + + // "forgot-password.form.label.password": "Password", + "forgot-password.form.label.password": "Password", + + // "forgot-password.form.label.passwordrepeat": "Retype to confirm", + "forgot-password.form.label.passwordrepeat": "Digita nuovamente per confermare", + + // "forgot-password.form.error.empty-password": "Please enter a password in the box below.", + "forgot-password.form.error.empty-password": "Inserisci una password nella casella qui sotto.", + + // "forgot-password.form.error.matching-passwords": "The passwords do not match.", + "forgot-password.form.error.matching-passwords": "Le password non corrispondono.", + + // "forgot-password.form.notification.error.title": "Error when trying to submit new password", + "forgot-password.form.notification.error.title": "Errore durante il tentativo di inviare una nuova password", + + // "forgot-password.form.notification.success.content": "The password reset was successful. You have been logged in as the created user.", + "forgot-password.form.notification.success.content": "La password è stata reimpostata con successo. Hai effettuato l'accesso come l'utente che è stato creato.", + + // "forgot-password.form.notification.success.title": "Password reset completed", + "forgot-password.form.notification.success.title": "La password è stata reimpostata", + + // "forgot-password.form.submit": "Submit password", + "forgot-password.form.submit": "Invia password", + + + // "form.add": "Add more", + "form.add": "Aggiungi altro", + + // "form.add-help": "Click here to add the current entry and to add another one", + "form.add-help": "Clicca qui per aggiungere la voce corrente e per aggiungerne un'altra", + + // "form.cancel": "Cancel", + "form.cancel": "Annulla", + + // "form.clear": "Clear", + "form.clear": "Pulisci", + + // "form.clear-help": "Click here to remove the selected value", + "form.clear-help": "Clicca qui per rimuovere il valore selezionato", + + // "form.discard": "Discard", + "form.discard": "Annulla", + + // "form.drag": "Drag", + "form.drag": "Trascina", + + // "form.edit": "Edit", + "form.edit": "Edita", + + // "form.edit-help": "Click here to edit the selected value", + "form.edit-help": "Clicca qui per modificare il valore selezionato", + + // "form.first-name": "First name", + "form.first-name": "Nome", + + // "form.group-collapse": "Collapse", + // TODO New key - Add a translation + "form.group-collapse": "Collapse", + + // "form.group-collapse-help": "Click here to collapse", + // TODO New key - Add a translation + "form.group-collapse-help": "Click here to collapse", + + // "form.group-expand": "Expand", + // TODO New key - Add a translation + "form.group-expand": "Expand", + + // "form.group-expand-help": "Click here to expand and add more elements", + // TODO New key - Add a translation + "form.group-expand-help": "Click here to expand and add more elements", + + // "form.last-name": "Last name", + "form.last-name": "Cognome", + + // "form.loading": "Loading...", + "form.loading": "Caricamento...", + + // "form.lookup": "Lookup", + "form.lookup": "Ricerca", + + // "form.lookup-help": "Click here to look up an existing relation", + "form.lookup-help": "Clicca qui per cercare una relazione già esistente", + + // "form.no-results": "No results found", + "form.no-results": "Nessun risultato trovato", + + // "form.no-value": "No value entered", + "form.no-value": "Non è stato inserito nessun valore", + + // "form.other-information": {}, + // TODO New key - Add a translation + "form.other-information": {}, + + // "form.remove": "Remove", + "form.remove": "Rimuovi", + + // "form.save": "Save", + "form.save": "Salva", + + // "form.save-help": "Save changes", + "form.save-help": "Salva le modifiche", + + // "form.search": "Search", + "form.search": "Ricerca", + + // "form.search-help": "Click here to look for an existing correspondence", + "form.search-help": "Clicca qui per cercare una corrispondenza già esistente", + + // "form.submit": "Save", + "form.submit": "Salva", + + // "form.repeatable.sort.tip": "Drop the item in the new position", + "form.repeatable.sort.tip": "Rilascia l'item nella nuova posizione", + + + + // "grant-deny-request-copy.deny": "Don't send copy", + "grant-deny-request-copy.deny": "Non inviare una copia", + + // "grant-deny-request-copy.email.back": "Back", + "grant-deny-request-copy.email.back": "Indietro", + + // "grant-deny-request-copy.email.message": "Message", + "grant-deny-request-copy.email.message": "Messaggio", + + // "grant-deny-request-copy.email.message.empty": "Please enter a message", + "grant-deny-request-copy.email.message.empty": "Inserisci un messaggio", + + // "grant-deny-request-copy.email.permissions.info": "You may use this occasion to reconsider the access restrictions on the document, to avoid having to respond to these requests. If you’d like to ask the repository administrators to remove these restrictions, please check the box below.", + "grant-deny-request-copy.email.permissions.info": "In questa fase è possibile riconsiderare le restrizioni di accesso al documento, in modo da evitare di dover rispondere a tali richieste. Se desideri chiedere agli amministratori del repository di rimuovere queste restrizioni, seleziona la casella qui sotto.", + + // "grant-deny-request-copy.email.permissions.label": "Change to open access", + "grant-deny-request-copy.email.permissions.label": "Modifica in open access", + + // "grant-deny-request-copy.email.send": "Send", + "grant-deny-request-copy.email.send": "Invia", + + // "grant-deny-request-copy.email.subject": "Subject", + "grant-deny-request-copy.email.subject": "Subject", + + // "grant-deny-request-copy.email.subject.empty": "Please enter a subject", + "grant-deny-request-copy.email.subject.empty": "Inserisci un subject", + + // "grant-deny-request-copy.grant": "Send copy", + "grant-deny-request-copy.grant": "Invia una copia", + + // "grant-deny-request-copy.header": "Document copy request", + "grant-deny-request-copy.header": "Richiedi una copia del documento", + + // "grant-deny-request-copy.home-page": "Take me to the home page", + "grant-deny-request-copy.home-page": "Torna alla home page", + + // "grant-deny-request-copy.intro1": "If you are one of the authors of the document {{ name }}, then please use one of the options below to respond to the user's request.", + "grant-deny-request-copy.intro1": "Se sei uno degli autori del documento {{ name }} seleziona una delle seguenti opzioni per rispondere alla richiesta dell'utente.", + + // "grant-deny-request-copy.intro2": "After choosing an option, you will be presented with a suggested email reply which you may edit.", + "grant-deny-request-copy.intro2": "Dopo aver scelto un'opzione, ti verrà suggerita una risposta e-mail che potrai modificare.", + + // "grant-deny-request-copy.processed": "This request has already been processed. You can use the button below to get back to the home page.", + "grant-deny-request-copy.processed": "Questa richiesta è già stata elaborata. Puoi cliccare il pulsante qui sotto per tornare alla home page.", + + + + // "grant-request-copy.email.message": "Dear {{ recipientName }},\nIn response to your request I have the pleasure to send you in attachment a copy of the file(s) concerning the document: \"{{ itemUrl }}\" ({{ itemName }}), of which I am an author.\n\nBest regards,\n{{ authorName }} <{{ authorEmail }}>", + "grant-request-copy.email.message": "Gentile {{ recipientName }},\nin tisposta alla tua richiesta, ho il piacere di inviarti come allegato una copia del file riferito al documento: \"{{ itemUrl }}\" ({{ itemName }}), di cui sono l'autore.\n\nUn cordiale saluto,\n{{ authorName }} <{{ authorEmail }}>", + + // "grant-request-copy.email.subject": "Request copy of document", + "grant-request-copy.email.subject": "Richiedi una copia del documento", + + // "grant-request-copy.error": "An error occurred", + "grant-request-copy.error": "Si è verificato un errore", + + // "grant-request-copy.header": "Grant document copy request", + "grant-request-copy.header": "Richiedi una copia del documento di sovvenzione", + + // "grant-request-copy.intro": "This message will be sent to the applicant of the request. The requested document(s) will be attached.", + "grant-request-copy.intro": "Questo messaggio verrà inviato a chi ha effettuato la richiesta. VErranno allegati i documenti richiesti.", + + // "grant-request-copy.success": "Successfully granted item request", + "grant-request-copy.success": "Richiesta dell'item concessa con successo", + + + // "health.breadcrumbs": "Health", + // TODO New key - Add a translation + "health.breadcrumbs": "Health", + + // "health-page.heading" : "Health", + // TODO New key - Add a translation + "health-page.heading" : "Health", + + // "health-page.info-tab" : "Info", + // TODO New key - Add a translation + "health-page.info-tab" : "Info", + + // "health-page.status-tab" : "Status", + // TODO New key - Add a translation + "health-page.status-tab" : "Status", + + // "health-page.error.msg": "The health check service is temporarily unavailable", + "health-page.error.msg": "Il servizio di health check è temporaneamente non disponibile.", + + // "health-page.property.status": "Status code", + // TODO New key - Add a translation + "health-page.property.status": "Status code", + + // "health-page.section.db.title": "Database", + "health-page.section.db.title": "Database", + + // "health-page.section.geoIp.title": "GeoIp", + // TODO New key - Add a translation + "health-page.section.geoIp.title": "GeoIp", + + // "health-page.section.solrAuthorityCore.title": "Sor: authority core", + // TODO New key - Add a translation + "health-page.section.solrAuthorityCore.title": "Sor: authority core", + + // "health-page.section.solrOaiCore.title": "Sor: oai core", + // TODO New key - Add a translation + "health-page.section.solrOaiCore.title": "Sor: oai core", + + // "health-page.section.solrSearchCore.title": "Sor: search core", + // TODO New key - Add a translation + "health-page.section.solrSearchCore.title": "Sor: search core", + + // "health-page.section.solrStatisticsCore.title": "Sor: statistics core", + // TODO New key - Add a translation + "health-page.section.solrStatisticsCore.title": "Sor: statistics core", + + // "health-page.section-info.app.title": "Application Backend", + "health-page.section-info.app.title": "Backend dell'applicativo", + + // "health-page.section-info.java.title": "Java", + "health-page.section-info.java.title": "Java", + + // "health-page.status": "Status", + // TODO New key - Add a translation + "health-page.status": "Status", + + // "health-page.status.ok.info": "Operational", + // TODO New key - Add a translation + "health-page.status.ok.info": "Operational", + + // "health-page.status.error.info": "Problems detected", + "health-page.status.error.info": "Sono stati rilevati dei problemi", + + // "health-page.status.warning.info": "Possible issues detected", + "health-page.status.warning.info": "Sono stati rilevati dei potenziali problemi", + + // "health-page.title": "Health", + // TODO New key - Add a translation + "health-page.title": "Health", + + // "health-page.section.no-issues": "No issues detected", + "health-page.section.no-issues": "Nessun problema rilevato", + + + // "home.description": "", + "home.description": "", + + // "home.breadcrumbs": "Home", + "home.breadcrumbs": "Home", + + // "home.search-form.placeholder": "Search the repository ...", + "home.search-form.placeholder": "Cerca nel repository ...", + + // "home.title": "Home", + "home.title": "Home", + + // "home.top-level-communities.head": "Communities in DSpace", + // TODO Source message changed - Revise the translation + "home.top-level-communities.head": "DSpace Cris Communities", + + // "home.top-level-communities.help": "Select a community to browse its collections.", + // TODO Source message changed - Revise the translation + "home.top-level-communities.help": "Cerca una collection", + + + + // "info.end-user-agreement.accept": "I have read and I agree to the End User Agreement", + "info.end-user-agreement.accept": "Ho letto e accetto l'Accordo con l'utente finale", + + // "info.end-user-agreement.accept.error": "An error occurred accepting the End User Agreement", + "info.end-user-agreement.accept.error": "Si è verificato un errore durante l'accettazione dell'Accordo con l'utente finale", + + // "info.end-user-agreement.accept.success": "Successfully updated the End User Agreement", + "info.end-user-agreement.accept.success": "L'Accordo con l'utente finale è stato aggiornato con successo", + + // "info.end-user-agreement.breadcrumbs": "End User Agreement", + "info.end-user-agreement.breadcrumbs": "Accordo con l'utente finale", + + // "info.end-user-agreement.buttons.cancel": "Cancel", + "info.end-user-agreement.buttons.cancel": "Annulla", + + // "info.end-user-agreement.buttons.save": "Save", + "info.end-user-agreement.buttons.save": "Salva", + + // "info.end-user-agreement.head": "End User Agreement", + "info.end-user-agreement.head": "Accordo con l'utente finale", + + // "info.end-user-agreement.title": "End User Agreement", + "info.end-user-agreement.title": "Accordo con l'utente finale", + + // "info.privacy.breadcrumbs": "Privacy Statement", + "info.privacy.breadcrumbs": "Informativa sulla privacy", + + // "info.privacy.head": "Privacy Statement", + "info.privacy.head": "Informativa sulla privacy", + + // "info.privacy.title": "Privacy Statement", + "info.privacy.title": "Informativa sulla privacy", + + // "info.feedback.breadcrumbs": "Feedback", + "info.feedback.breadcrumbs": "Feedback", + + // "info.feedback.head": "Feedback", + "info.feedback.head": "Feedback", + + // "info.feedback.title": "Feedback", + "info.feedback.title": "Feedback", + + // "info.feedback.info": "Thanks for sharing your feedback about the DSpace system. Your comments are appreciated!", + "info.feedback.info": "Grazie per aver condiviso il tuo feedback sul DSpace. I vostri commenti sono importanti!", + + // "info.feedback.email_help": "This address will be used to follow up on your feedback.", + "info.feedback.email_help": "Questo indirizzo verrà utilizzato per dare una risposta al tuo feedback.", + + // "info.feedback.send": "Send Feedback", + "info.feedback.send": "Invia feedback", + + // "info.feedback.comments": "Comments", + "info.feedback.comments": "Commenti", + + // "info.feedback.email-label": "Your Email", + "info.feedback.email-label": "La tua email", + + // "info.feedback.create.success" : "Feedback Sent Successfully!", + "info.feedback.create.success" : "Feedback inviato con successo!", + + // "info.feedback.error.email.required" : "A valid email address is required", + "info.feedback.error.email.required" : "Inserire un un indirizzo email valido", + + // "info.feedback.error.message.required" : "A comment is required", + "info.feedback.error.message.required" : "Inserire un commento", + + // "info.feedback.page-label" : "Page", + "info.feedback.page-label" : "Pagina", + + // "info.feedback.page_help" : "Tha page related to your feedback", + "info.feedback.page_help" : "In questa pagina trovi i tuoi feedback", + + + + // "item.alerts.private": "This item is non-discoverable", + "item.alerts.private": "Questo item è privato", + + // "item.alerts.withdrawn": "This item has been withdrawn", + "item.alerts.withdrawn": "Questo item è stato rimosso", + + + + // "item.edit.authorizations.heading": "With this editor you can view and alter the policies of an item, plus alter policies of individual item components: bundles and bitstreams. Briefly, an item is a container of bundles, and bundles are containers of bitstreams. Containers usually have ADD/REMOVE/READ/WRITE policies, while bitstreams only have READ/WRITE policies.", + "item.edit.authorizations.heading": "Con questo editor puoi vedere e modificare le policies di un item, e anche modificare le policies dei singoli componenti dell'item: bundles e bitstreams. Un item è il contenitore di bundles, e i bundles sono contenitori di bitstreams. I contenitori riportano solitamente le policies di ADD/REMOVE/READ/WRITE, mentre i bitstreams hanno solamente policies di READ/WRITE.", + + // "item.edit.authorizations.title": "Edit item's Policies", + "item.edit.authorizations.title": "Modificare le policies dell'item", + + + + // "item.badge.private": "Non-discoverable", + // TODO Source message changed - Revise the translation + "item.badge.private": "Privato", + + // "item.badge.withdrawn": "Withdrawn", + "item.badge.withdrawn": "Rimosso", + + + + // "item.bitstreams.upload.bundle": "Bundle", + "item.bitstreams.upload.bundle": "Bundle", + + // "item.bitstreams.upload.bundle.placeholder": "Select a bundle or input new bundle name", + // TODO Source message changed - Revise the translation + "item.bitstreams.upload.bundle.placeholder": "Seleziona un bundle o inserisci il nome di un nuovo bundle", + + // "item.bitstreams.upload.bundle.new": "Create bundle", + "item.bitstreams.upload.bundle.new": "Crea un bundle", + + // "item.bitstreams.upload.bundles.empty": "This item doesn\'t contain any bundles to upload a bitstream to.", + "item.bitstreams.upload.bundles.empty": "Questo item non contiene alcun bundle in cui caricare un bitstream.", + + // "item.bitstreams.upload.cancel": "Cancel", + "item.bitstreams.upload.cancel": "Annulla", + + // "item.bitstreams.upload.drop-message": "Drop a file to upload", + "item.bitstreams.upload.drop-message": "Rilascia un file da caricare", + + // "item.bitstreams.upload.item": "Item: ", + "item.bitstreams.upload.item": "Item:", + + // "item.bitstreams.upload.notifications.bundle.created.content": "Successfully created new bundle.", + "item.bitstreams.upload.notifications.bundle.created.content": "Il nuovo bundle è stato creato con successo.", + + // "item.bitstreams.upload.notifications.bundle.created.title": "Created bundle", + "item.bitstreams.upload.notifications.bundle.created.title": "Bundle creato", + + // "item.bitstreams.upload.notifications.upload.failed": "Upload failed. Please verify the content before retrying.", + "item.bitstreams.upload.notifications.upload.failed": "Caricamento non riuscito. Verifica il contenuto prima di riprovare.", + + // "item.bitstreams.upload.title": "Upload bitstream", + "item.bitstreams.upload.title": "Carica bitstream", + + + + // "item.edit.bitstreams.bundle.edit.buttons.upload": "Upload", + "item.edit.bitstreams.bundle.edit.buttons.upload": "Carica", + + // "item.edit.bitstreams.bundle.displaying": "Currently displaying {{ amount }} bitstreams of {{ total }}.", + "item.edit.bitstreams.bundle.displaying": "Attualmente sono visualizzati {{ amount }} bitstream su {{ total }}.", + + // "item.edit.bitstreams.bundle.load.all": "Load all ({{ total }})", + "item.edit.bitstreams.bundle.load.all": "Carica tutto ({{ total }})", + + // "item.edit.bitstreams.bundle.load.more": "Load more", + "item.edit.bitstreams.bundle.load.more": "Carica più risorse", + + // "item.edit.bitstreams.bundle.name": "BUNDLE: {{ name }}", + "item.edit.bitstreams.bundle.name": "BUNDLE: {{ name }}", + + // "item.edit.bitstreams.discard-button": "Discard", + "item.edit.bitstreams.discard-button": "Annulla", + + // "item.edit.bitstreams.edit.buttons.download": "Download", + "item.edit.bitstreams.edit.buttons.download": "Download", + + // "item.edit.bitstreams.edit.buttons.drag": "Drag", + "item.edit.bitstreams.edit.buttons.drag": "Trascina", + + // "item.edit.bitstreams.edit.buttons.edit": "Edit", + "item.edit.bitstreams.edit.buttons.edit": "Edita", + + // "item.edit.bitstreams.edit.buttons.remove": "Remove", + "item.edit.bitstreams.edit.buttons.remove": "Rimuovi", + + // "item.edit.bitstreams.edit.buttons.undo": "Undo changes", + "item.edit.bitstreams.edit.buttons.undo": "Annullare le modifiche", + + // "item.edit.bitstreams.empty": "This item doesn't contain any bitstreams. Click the upload button to create one.", + "item.edit.bitstreams.empty": "Questo item non contiene bitstreams. Fai clic sul pulsante di caricamento per crearne uno.", + + // "item.edit.bitstreams.headers.actions": "Actions", + "item.edit.bitstreams.headers.actions": "Azioni", + + // "item.edit.bitstreams.headers.bundle": "Bundle", + "item.edit.bitstreams.headers.bundle": "Bundle", + + // "item.edit.bitstreams.headers.description": "Description", + "item.edit.bitstreams.headers.description": "Descrizione", + + // "item.edit.bitstreams.headers.format": "Format", + "item.edit.bitstreams.headers.format": "Formato", + + // "item.edit.bitstreams.headers.name": "Name", + "item.edit.bitstreams.headers.name": "Nome", + + // "item.edit.bitstreams.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "item.edit.bitstreams.notifications.discarded.content": "Le modifiche sono state annullate. Per ripristinarle, fai clic sul pulsante \"Annulla\"", + + // "item.edit.bitstreams.notifications.discarded.title": "Changes discarded", + "item.edit.bitstreams.notifications.discarded.title": "Modifiche annullate", + + // "item.edit.bitstreams.notifications.move.failed.title": "Error moving bitstreams", + "item.edit.bitstreams.notifications.move.failed.title": "Errore durante lo spostamento dei bitstreams", + + // "item.edit.bitstreams.notifications.move.saved.content": "Your move changes to this item's bitstreams and bundles have been saved.", + "item.edit.bitstreams.notifications.move.saved.content": "Le modifiche di spostamento dei bitstream e dei bundle di questo item sono state salvate.", + + // "item.edit.bitstreams.notifications.move.saved.title": "Move changes saved", + "item.edit.bitstreams.notifications.move.saved.title": "Spostamento delle modifiche salvato", + + // "item.edit.bitstreams.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + "item.edit.bitstreams.notifications.outdated.content": "L'item su cui stai attualmente lavorando è stato modificato da un altro utente. Le modifiche correnti verranno eliminate per evitare conflitti", + + // "item.edit.bitstreams.notifications.outdated.title": "Changes outdated", + "item.edit.bitstreams.notifications.outdated.title": "Modifiche obsolete", + + // "item.edit.bitstreams.notifications.remove.failed.title": "Error deleting bitstream", + "item.edit.bitstreams.notifications.remove.failed.title": "Errore durante l'eliminazione del bitstream", + + // "item.edit.bitstreams.notifications.remove.saved.content": "Your removal changes to this item's bitstreams have been saved.", + "item.edit.bitstreams.notifications.remove.saved.content": "Le modifiche apportate alla rimozione dei bitstreams di questo item sono state salvate.", + + // "item.edit.bitstreams.notifications.remove.saved.title": "Removal changes saved", + "item.edit.bitstreams.notifications.remove.saved.title": "Annullamento delle modifiche salvato", + + // "item.edit.bitstreams.reinstate-button": "Undo", + "item.edit.bitstreams.reinstate-button": "Annulla", + + // "item.edit.bitstreams.save-button": "Save", + "item.edit.bitstreams.save-button": "Salva", + + // "item.edit.bitstreams.upload-button": "Upload", + "item.edit.bitstreams.upload-button": "Carica", + + + + // "item.edit.delete.cancel": "Cancel", + "item.edit.delete.cancel": "Annulla", + + // "item.edit.delete.confirm": "Delete", + "item.edit.delete.confirm": "Elimina", + + // "item.edit.delete.description": "Are you sure this item should be completely deleted? Caution: At present, no tombstone would be left.", + "item.edit.delete.description": "Sei sicuro che questo item debba essere eliminato definitivamente? Attenzione: attualmente, non verrà lasciato alcun placeholder.", + + // "item.edit.delete.error": "An error occurred while deleting the item", + "item.edit.delete.error": "Si è verificato un errore durante la cancellazione dell'item", + + // "item.edit.delete.header": "Delete item: {{ id }}", + "item.edit.delete.header": "Elimina item: {{ id }}", + + // "item.edit.delete.success": "The item has been deleted", + "item.edit.delete.success": "L'item è stato eliminato", + + // "item.edit.head": "Edit Item", + "item.edit.head": "Modifica item", + + // "item.edit.breadcrumbs": "Edit Item", + "item.edit.breadcrumbs": "Modifica item", + + // "item.edit.tabs.disabled.tooltip": "You're not authorized to access this tab", + "item.edit.tabs.disabled.tooltip": "Non sei autorizzato ad accedere a questa tab", + + + // "item.edit.tabs.mapper.head": "Collection Mapper", + "item.edit.tabs.mapper.head": "collection Mapper", + + // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", + "item.edit.tabs.item-mapper.title": "Modifica item - Mapper Collection", + + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", + "item.edit.item-mapper.buttons.add": "Mappare l'item nelle collections selezionate", + + // "item.edit.item-mapper.buttons.remove": "Remove item's mapping for selected collections", + "item.edit.item-mapper.buttons.remove": "Rimuovere il mapping degli item per le collections selezionate", + + // "item.edit.item-mapper.cancel": "Cancel", + "item.edit.item-mapper.cancel": "Annulla", + + // "item.edit.item-mapper.description": "This is the item mapper tool that allows administrators to map this item to other collections. You can search for collections and map them, or browse the list of collections the item is currently mapped to.", + "item.edit.item-mapper.description": "Si tratta dello strumento di mapping degli item che consente agli amministratori di mappare questo item in altre collections. È possibile cercare le collections e mapparle, o sfogliare l'elenco delle collections in cui è attualmente mappato l'item.", + + // "item.edit.item-mapper.head": "Item Mapper - Map Item to Collections", + "item.edit.item-mapper.head": "Item Mapper - Mappa l'item nelle collections", + + // "item.edit.item-mapper.item": "Item: \"{{name}}\"", + "item.edit.item-mapper.item": "Item: \"{{name}}\"", + + // "item.edit.item-mapper.no-search": "Please enter a query to search", + "item.edit.item-mapper.no-search": "Inserisci una query per avviare la ricerca", + + // "item.edit.item-mapper.notifications.add.error.content": "Errors occurred for mapping of item to {{amount}} collections.", + "item.edit.item-mapper.notifications.add.error.content": "Si sono verificati degli errori nella mappatura dell'item in {{amount}} collections.", + + // "item.edit.item-mapper.notifications.add.error.head": "Mapping errors", + "item.edit.item-mapper.notifications.add.error.head": "Errori di mappatura", + + // "item.edit.item-mapper.notifications.add.success.content": "Successfully mapped item to {{amount}} collections.", + "item.edit.item-mapper.notifications.add.success.content": "L'item è stato mappato correttamente in {{amount}} collections.", + + // "item.edit.item-mapper.notifications.add.success.head": "Mapping completed", + "item.edit.item-mapper.notifications.add.success.head": "Mappatura completata", + + // "item.edit.item-mapper.notifications.remove.error.content": "Errors occurred for the removal of the mapping to {{amount}} collections.", + "item.edit.item-mapper.notifications.remove.error.content": "Si sono verificati degli errori nella rimozione del mapping da {{amount}} collections.", + + // "item.edit.item-mapper.notifications.remove.error.head": "Removal of mapping errors", + "item.edit.item-mapper.notifications.remove.error.head": "Gli errori di mappatura sono stati rimossi", + + // "item.edit.item-mapper.notifications.remove.success.content": "Successfully removed mapping of item to {{amount}} collections.", + "item.edit.item-mapper.notifications.remove.success.content": "L'item mappato è stato rimosso correttamente da {{amount}} collections.", + + // "item.edit.item-mapper.notifications.remove.success.head": "Removal of mapping completed", + "item.edit.item-mapper.notifications.remove.success.head": "Rimozione della mappatura completata", + + // "item.edit.item-mapper.search-form.placeholder": "Search collections...", + "item.edit.item-mapper.search-form.placeholder": "Cerca collections...", + + // "item.edit.item-mapper.tabs.browse": "Browse mapped collections", + "item.edit.item-mapper.tabs.browse": "Sfoglia le collections mappate", + + // "item.edit.item-mapper.tabs.map": "Map new collections", + "item.edit.item-mapper.tabs.map": "Mappa le nuove collections", + + + + // "item.edit.metadata.add-button": "Add", + "item.edit.metadata.add-button": "Aggiungi", + + // "item.edit.metadata.discard-button": "Discard", + "item.edit.metadata.discard-button": "Annulla", + + // "item.edit.metadata.edit.buttons.edit": "Edit", + "item.edit.metadata.edit.buttons.edit": "Edita", + + // "item.edit.metadata.edit.buttons.remove": "Remove", + "item.edit.metadata.edit.buttons.remove": "Rimuovi", + + // "item.edit.metadata.edit.buttons.undo": "Undo changes", + "item.edit.metadata.edit.buttons.undo": "Annullare le modifiche", + + // "item.edit.metadata.edit.buttons.unedit": "Stop editing", + "item.edit.metadata.edit.buttons.unedit": "Interrompi la modifica", + + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", + "item.edit.metadata.empty": "Attualmente l'item non contiene metadati. Fai clic su Aggiungi per iniziare ad aggiungere il valore di un metadata.", + + // "item.edit.metadata.headers.edit": "Edit", + "item.edit.metadata.headers.edit": "Edita", + + // "item.edit.metadata.headers.field": "Field", + "item.edit.metadata.headers.field": "Campo", + + // "item.edit.metadata.headers.language": "Lang", + "item.edit.metadata.headers.language": "Lang", + + // "item.edit.metadata.headers.value": "Value", + "item.edit.metadata.headers.value": "Valore", + + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + "item.edit.metadata.metadatafield.invalid": "Scegli un campo di metadati valido", + + // "item.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "item.edit.metadata.notifications.discarded.content": "Le modifiche sono state annullate. Per ripristinarle, fai clic sul pulsante \"Annulla\"", + + // "item.edit.metadata.notifications.discarded.title": "Changes discarded", + // TODO Source message changed - Revise the translation + "item.edit.metadata.notifications.discarded.title": "Modifiche eliminate", + + // "item.edit.metadata.notifications.error.title": "An error occurred", + "item.edit.metadata.notifications.error.title": "Si è verificato un errore", + + // "item.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + "item.edit.metadata.notifications.invalid.content": "Le modifiche non sono state salvate. Assicurati che tutti i campi siano corretti prima di salvare.", + + // "item.edit.metadata.notifications.invalid.title": "Metadata invalid", + "item.edit.metadata.notifications.invalid.title": "Metadati non validi", + + // "item.edit.metadata.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + "item.edit.metadata.notifications.outdated.content": "L'item su cui stai attualmente lavorando è stato modificato da un altro utente. Le modifiche correnti verranno eliminate per evitare conflitti", + + // "item.edit.metadata.notifications.outdated.title": "Changes outdated", + // TODO Source message changed - Revise the translation + "item.edit.metadata.notifications.outdated.title": "Modifiche obsolete", + + // "item.edit.metadata.notifications.saved.content": "Your changes to this item's metadata were saved.", + "item.edit.metadata.notifications.saved.content": "Le modifiche apportate ai metadati di questo item sono state salvate.", + + // "item.edit.metadata.notifications.saved.title": "Metadata saved", + "item.edit.metadata.notifications.saved.title": "Metadati salvati", + + // "item.edit.metadata.reinstate-button": "Undo", + "item.edit.metadata.reinstate-button": "Annulla", + + // "item.edit.metadata.save-button": "Save", + "item.edit.metadata.save-button": "Salva", + + + + // "item.edit.modify.overview.field": "Field", + "item.edit.modify.overview.field": "Campo", + + // "item.edit.modify.overview.language": "Language", + "item.edit.modify.overview.language": "Lingua", + + // "item.edit.modify.overview.value": "Value", + "item.edit.modify.overview.value": "Valore", + + + + // "item.edit.move.cancel": "Back", + "item.edit.move.cancel": "Indietro", + + // "item.edit.move.save-button": "Save", + "item.edit.move.save-button": "Salva", + + // "item.edit.move.discard-button": "Discard", + "item.edit.move.discard-button": "Annulla", + + // "item.edit.move.description": "Select the collection you wish to move this item to. To narrow down the list of displayed collections, you can enter a search query in the box.", + "item.edit.move.description": "Seleziona la collection in cui desideri spostare questo item. Per restringere l'elenco delle collections visualizzate è possibile effettuare una ricerca.", + + // "item.edit.move.error": "An error occurred when attempting to move the item", + "item.edit.move.error": "Si è verificato un errore durante il tentativo di spostare l'item", + + // "item.edit.move.head": "Move item: {{id}}", + "item.edit.move.head": "Sposta l'item: {{id}}", + + // "item.edit.move.inheritpolicies.checkbox": "Inherit policies", + "item.edit.move.inheritpolicies.checkbox": "Ereditare i criteri", + + // "item.edit.move.inheritpolicies.description": "Inherit the default policies of the destination collection", + "item.edit.move.inheritpolicies.description": "Ereditare i criteri predefiniti dell'insieme di destinazione", + + // "item.edit.move.move": "Move", + "item.edit.move.move": "Sposta", + + // "item.edit.move.processing": "Moving...", + "item.edit.move.processing": "Sposta...", + + // "item.edit.move.search.placeholder": "Enter a search query to look for collections", + "item.edit.move.search.placeholder": "Effettuare una ricerca per collections", + + // "item.edit.move.success": "The item has been moved successfully", + "item.edit.move.success": "L'item è stato spostato correttamente", + + // "item.edit.move.title": "Move item", + "item.edit.move.title": "Sposta item", + + + + // "item.edit.private.cancel": "Cancel", + "item.edit.private.cancel": "Annulla", + + // "item.edit.private.confirm": "Make it non-discoverable", + // TODO Source message changed - Revise the translation + "item.edit.private.confirm": "Rendilo privato", + + // "item.edit.private.description": "Are you sure this item should be made non-discoverable in the archive?", + // TODO Source message changed - Revise the translation + "item.edit.private.description": "Sei sicuro che questo oggetto debba essere reso privato nell'archivio?", + + // "item.edit.private.error": "An error occurred while making the item non-discoverable", + // TODO Source message changed - Revise the translation + "item.edit.private.error": "Si è verificato un errore durante la creazione di un item privato", + + // "item.edit.private.header": "Make item non-discoverable: {{ id }}", + "item.edit.private.header": "Rendi privato l'item: {{ id }}", + + // "item.edit.private.success": "The item is now non-discoverable", + "item.edit.private.success": "L'item è ora privato", + + + + // "item.edit.public.cancel": "Cancel", + "item.edit.public.cancel": "Annulla", + + // "item.edit.public.confirm": "Make it discoverable", + // TODO Source message changed - Revise the translation + "item.edit.public.confirm": "Rendilo pubblico", + + // "item.edit.public.description": "Are you sure this item should be made discoverable in the archive?", + // TODO Source message changed - Revise the translation + "item.edit.public.description": "Sei sicuro che questo articolo debba essere reso pubblico nell'archivio?", + + // "item.edit.public.error": "An error occurred while making the item discoverable", + // TODO Source message changed - Revise the translation + "item.edit.public.error": "Si è verificato un errore durante la creazione di un item pubblico", + + // "item.edit.public.header": "Make item discoverable: {{ id }}", + "item.edit.public.header": "Rendi pubblico l'item: {{ id }}", + + // "item.edit.public.success": "The item is now discoverable", + // TODO Source message changed - Revise the translation + "item.edit.public.success": "L'item è ora pubblico", + + + + // "item.edit.reinstate.cancel": "Cancel", + "item.edit.reinstate.cancel": "Annulla", + + // "item.edit.reinstate.confirm": "Reinstate", + "item.edit.reinstate.confirm": "Ripristina", + + // "item.edit.reinstate.description": "Are you sure this item should be reinstated to the archive?", + "item.edit.reinstate.description": "Sei sicuro che questo item debba essere ripristinato nell'archivio?", + + // "item.edit.reinstate.error": "An error occurred while reinstating the item", + "item.edit.reinstate.error": "Si è verificato un errore durante il ripristino dell'item", + + // "item.edit.reinstate.header": "Reinstate item: {{ id }}", + "item.edit.reinstate.header": "Ripristina l'item: {{ id }}", + + // "item.edit.reinstate.success": "The item was reinstated successfully", + "item.edit.reinstate.success": "L'item è stato ripristinato correttamente", + + + + // "item.edit.relationships.discard-button": "Discard", + "item.edit.relationships.discard-button": "Annulla", + + // "item.edit.relationships.edit.buttons.add": "Add", + "item.edit.relationships.edit.buttons.add": "Aggiungi", + + // "item.edit.relationships.edit.buttons.remove": "Remove", + "item.edit.relationships.edit.buttons.remove": "Rimuovi", + + // "item.edit.relationships.edit.buttons.undo": "Undo changes", + "item.edit.relationships.edit.buttons.undo": "Annullare le modifiche", + + // "item.edit.relationships.no-relationships": "No relationships", + "item.edit.relationships.no-relationships": "Nessuna relazione", + + // "item.edit.relationships.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + "item.edit.relationships.notifications.discarded.content": "Le modifiche sono state annullate. Per ripristinarle, fai clic sul pulsante \"Annulla\"", + + // "item.edit.relationships.notifications.discarded.title": "Changes discarded", + "item.edit.relationships.notifications.discarded.title": "Modifiche annullate", + + // "item.edit.relationships.notifications.failed.title": "Error editing relationships", + "item.edit.relationships.notifications.failed.title": "Errore nella modifica delle relazioni", + + // "item.edit.relationships.notifications.outdated.content": "The item you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + "item.edit.relationships.notifications.outdated.content": "L'item su cui stai attualmente lavorando è stato modificato da un altro utente. Le modifiche correnti verranno eliminate per evitare conflitti", + + // "item.edit.relationships.notifications.outdated.title": "Changes outdated", + "item.edit.relationships.notifications.outdated.title": "Modifiche obsolete", + + // "item.edit.relationships.notifications.saved.content": "Your changes to this item's relationships were saved.", + "item.edit.relationships.notifications.saved.content": "Le modifiche apportate alle relazioni di questo item sono state salvate.", + + // "item.edit.relationships.notifications.saved.title": "Relationships saved", + "item.edit.relationships.notifications.saved.title": "Relazioni salvate", + + // "item.edit.relationships.reinstate-button": "Undo", + "item.edit.relationships.reinstate-button": "Annulla", + + // "item.edit.relationships.save-button": "Save", + "item.edit.relationships.save-button": "Salva", + + // "item.edit.relationships.no-entity-type": "Add 'dspace.entity.type' metadata to enable relationships for this item", + "item.edit.relationships.no-entity-type": "Aggiungi i metadati 'dspace.entity.type' per abilitare le relazioni per questo item", + + + // "item.edit.return": "Back", + "item.edit.return": "Indietro", + + + // "item.edit.tabs.bitstreams.head": "Bitstreams", + "item.edit.tabs.bitstreams.head": "Bitstreams", + + // "item.edit.tabs.bitstreams.title": "Item Edit - Bitstreams", + "item.edit.tabs.bitstreams.title": "Modifica item - Bitstreams", + + // "item.edit.tabs.curate.head": "Curate", + "item.edit.tabs.curate.head": "Curate", + + // "item.edit.tabs.curate.title": "Item Edit - Curate", + "item.edit.tabs.curate.title": "Modifica item - Curate", + + // "item.edit.tabs.metadata.head": "Metadata", + "item.edit.tabs.metadata.head": "Metadati", + + // "item.edit.tabs.metadata.title": "Item Edit - Metadata", + "item.edit.tabs.metadata.title": "Modifica item - Metadati", + + // "item.edit.tabs.relationships.head": "Relationships", + "item.edit.tabs.relationships.head": "Relazioni", + + // "item.edit.tabs.relationships.title": "Item Edit - Relationships", + "item.edit.tabs.relationships.title": "Modifica item - Relazioni", + + // "item.edit.tabs.status.buttons.authorizations.button": "Authorizations...", + "item.edit.tabs.status.buttons.authorizations.button": "Autorizzazioni...", + + // "item.edit.tabs.status.buttons.authorizations.label": "Edit item's authorization policies", + "item.edit.tabs.status.buttons.authorizations.label": "Modificare i criteri di autorizzazione degli item", + + // "item.edit.tabs.status.buttons.delete.button": "Permanently delete", + "item.edit.tabs.status.buttons.delete.button": "Elimina definitivamente", + + // "item.edit.tabs.status.buttons.delete.label": "Completely expunge item", + "item.edit.tabs.status.buttons.delete.label": "Rimuovere completamente l'item", + + // "item.edit.tabs.status.buttons.mappedCollections.button": "Mapped collections", + "item.edit.tabs.status.buttons.mappedCollections.button": "collections mappate", + + // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", + "item.edit.tabs.status.buttons.mappedCollections.label": "Gestire le collections mappate", + + // "item.edit.tabs.status.buttons.move.button": "Move...", + "item.edit.tabs.status.buttons.move.button": "Sposta...", + + // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", + "item.edit.tabs.status.buttons.move.label": "Spostare l'item in un'altra collection", + + // "item.edit.tabs.status.buttons.private.button": "Make it non-discoverable...", + // TODO Source message changed - Revise the translation + "item.edit.tabs.status.buttons.private.button": "...", + + // "item.edit.tabs.status.buttons.private.label": "Make item non-discoverable", + // TODO Source message changed - Revise the translation + "item.edit.tabs.status.buttons.private.label": "Rendere l'item privato", + + // "item.edit.tabs.status.buttons.public.button": "Make it discoverable...", + // TODO Source message changed - Revise the translation + "item.edit.tabs.status.buttons.public.button": "...", + + // "item.edit.tabs.status.buttons.public.label": "Make item discoverable", + // TODO Source message changed - Revise the translation + "item.edit.tabs.status.buttons.public.label": "Rendere l'item pubblico", + + // "item.edit.tabs.status.buttons.reinstate.button": "Reinstate...", + "item.edit.tabs.status.buttons.reinstate.button": "Ripristino...", + + // "item.edit.tabs.status.buttons.reinstate.label": "Reinstate item into the repository", + "item.edit.tabs.status.buttons.reinstate.label": "Ripristinare l'item nel repository", + + // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", + "item.edit.tabs.status.buttons.unauthorized": "Non sei autorizzato a eseguire questa azione", + + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + "item.edit.tabs.status.buttons.withdraw.button": "Rimozione...", + + // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", + "item.edit.tabs.status.buttons.withdraw.label": "Rimuovere l'item dal repository", + + // "item.edit.tabs.status.description": "Welcome to the item management page. From here you can withdraw, reinstate, move or delete the item. You may also update or add new metadata / bitstreams on the other tabs.", + "item.edit.tabs.status.description": "Benvenuti nella pagina di gestione degli item. Da qui è possibile rimuovere, ripristinare, spostare o eliminare l'item. È inoltre possibile aggiornare o aggiungere nuovi metadati / bitstream nelle altre schede.", + + // "item.edit.tabs.status.head": "Status", + "item.edit.tabs.status.head": "Stato", + + // "item.edit.tabs.status.labels.handle": "Handle", + "item.edit.tabs.status.labels.handle": "Gestisci", + + // "item.edit.tabs.status.labels.id": "Item Internal ID", + "item.edit.tabs.status.labels.id": "ID interno dell'item", + + // "item.edit.tabs.status.labels.itemPage": "Item Page", + "item.edit.tabs.status.labels.itemPage": "Pagina dell'item", + + // "item.edit.tabs.status.labels.lastModified": "Last Modified", + "item.edit.tabs.status.labels.lastModified": "Ultima modifica", + + // "item.edit.tabs.status.title": "Item Edit - Status", + "item.edit.tabs.status.title": "Modifica item - Stato", + + // "item.edit.tabs.versionhistory.head": "Version History", + "item.edit.tabs.versionhistory.head": "Cronologia delle versioni", + + // "item.edit.tabs.versionhistory.title": "Item Edit - Version History", + "item.edit.tabs.versionhistory.title": "Modifica item - Cronologia delle versioni", + + // "item.edit.tabs.versionhistory.under-construction": "Editing or adding new versions is not yet possible in this user interface.", + "item.edit.tabs.versionhistory.under-construction": "La modifica o l'aggiunta di nuove versioni non è ancora possibile in questa interfaccia utente.", + + // "item.edit.tabs.view.head": "View Item", + "item.edit.tabs.view.head": "Visualizza item", + + // "item.edit.tabs.view.title": "Item Edit - View", + "item.edit.tabs.view.title": "Modifica item - Visualizza", + + + + // "item.edit.withdraw.cancel": "Cancel", + "item.edit.withdraw.cancel": "Annulla", + + // "item.edit.withdraw.confirm": "Withdraw", + "item.edit.withdraw.confirm": "Rimuovi", + + // "item.edit.withdraw.description": "Are you sure this item should be withdrawn from the archive?", + "item.edit.withdraw.description": "Sei sicuro che questo articolo debba essere rimosso dall'archivio?", + + // "item.edit.withdraw.error": "An error occurred while withdrawing the item", + "item.edit.withdraw.error": "Si è verificato un errore durante la rimozione dell'item", + + // "item.edit.withdraw.header": "Withdraw item: {{ id }}", + "item.edit.withdraw.header": "Item rimosso: {{ id }}", + + // "item.edit.withdraw.success": "The item was withdrawn successfully", + "item.edit.withdraw.success": "L'item è stato rimosso con successo", + + // "item.orcid.return": "Back", + "item.orcid.return": "Indietro", + + + // "item.listelement.badge": "Item", + "item.listelement.badge": "Item", + + // "item.page.description": "Description", + "item.page.description": "Descrizione", + + // "item.page.journal-issn": "Journal ISSN", + "item.page.journal-issn": "ISSN", + + // "item.page.journal-title": "Journal Title", + "item.page.journal-title": "Titolo del periodico", + + // "item.page.publisher": "Publisher", + "item.page.publisher": "Editore", + + // "item.page.titleprefix": "Item: ", + "item.page.titleprefix": "Item: ", + + // "item.page.volume-title": "Volume Title", + "item.page.volume-title": "Titolo del volume", + + // "item.search.results.head": "Item Search Results", + "item.search.results.head": "Risultati della ricerca degli item", + + // "item.search.title": "Item Search", + "item.search.title": "Ricerca articoli", + + // "item.truncatable-part.show-more": "Show more", + "item.truncatable-part.show-more": "Mostra di più", + + // "item.truncatable-part.show-less": "Collapse", + "item.truncatable-part.show-less": "Riduci", + + + + // "item.page.abstract": "Abstract", + "item.page.abstract": "Abstract", + + // "item.page.author": "Authors", + "item.page.author": "Autori", + + // "item.page.citation": "Citation", + "item.page.citation": "Citazione", + + // "item.page.collections": "Collections", + "item.page.collections": "collections", + + // "item.page.collections.loading": "Loading...", + "item.page.collections.loading": "Caricamento...", + + // "item.page.collections.load-more": "Load more", + "item.page.collections.load-more": "Carica più risorse", + + // "item.page.date": "Date", + "item.page.date": "Data", + + // "item.page.edit": "Edit this item", + "item.page.edit": "Modifica questo item", + + // "item.page.files": "Files", + "item.page.files": "File", + + // "item.page.filesection.description": "Description:", + "item.page.filesection.description": "Descrizione:", + + // "item.page.filesection.download": "Download", + "item.page.filesection.download": "Download", + + // "item.page.filesection.format": "Format:", + "item.page.filesection.format": "Formato:", + + // "item.page.filesection.name": "Name:", + "item.page.filesection.name": "Nome:", + + // "item.page.filesection.size": "Size:", + "item.page.filesection.size": "Dimensione:", + + // "item.page.journal.search.title": "Articles in this journal", + "item.page.journal.search.title": "Articoli in questo periodico", + + // "item.page.link.full": "Full item page", + "item.page.link.full": "Mostra tutti i metadati", + + // "item.page.link.simple": "Simple item page", + "item.page.link.simple": "Visualizzazione ridotta", + + // "item.page.orcid.title": "ORCID", + "item.page.orcid.title": "ORCID", + + // "item.page.orcid.tooltip": "Open ORCID setting page", + "item.page.orcid.tooltip": "Apri la pagina delle impostazioni ORCID", + + // "item.page.person.search.title": "Articles by this author", + "item.page.person.search.title": "Articoli di questo autore", + + // "item.page.related-items.view-more": "Show {{ amount }} more", + "item.page.related-items.view-more": "Mostra altri {{ amount }} ", + + // "item.page.related-items.view-less": "Hide last {{ amount }}", + "item.page.related-items.view-less": "Nascondi l'ultimo {{ amount }}", + + // "item.page.relationships.isAuthorOfPublication": "Publications", + "item.page.relationships.isAuthorOfPublication": "Pubblicazioni", + + // "item.page.relationships.isJournalOfPublication": "Publications", + "item.page.relationships.isJournalOfPublication": "Pubblicazioni", + + // "item.page.relationships.isOrgUnitOfPerson": "Authors", + "item.page.relationships.isOrgUnitOfPerson": "Autori", + + // "item.page.relationships.isOrgUnitOfProject": "Research Projects", + "item.page.relationships.isOrgUnitOfProject": "Progetti di ricerca", + + // "item.page.subject": "Keywords", + "item.page.subject": "Keywords", + + // "item.page.uri": "URI", + "item.page.uri": "URI", + + // "item.page.bitstreams.view-more": "Show more", + "item.page.bitstreams.view-more": "Mostra di più", + + // "item.page.bitstreams.collapse": "Collapse", + "item.page.bitstreams.collapse": "Riduci", + + // "item.page.filesection.original.bundle" : "Original bundle", + // TODO New key - Add a translation + "item.page.filesection.original.bundle" : "Original bundle", + + // "item.page.filesection.license.bundle" : "License bundle", + // TODO New key - Add a translation + "item.page.filesection.license.bundle" : "License bundle", + + // "item.page.return": "Back", + "item.page.return": "Indietro", + + // "item.page.version.create": "Create new version", + "item.page.version.create": "Crea una nuova versione", + + // "item.page.version.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.page.version.hasDraft": "Impossibile creare una nuova versione perché è presente un'submission in corso nella cronologia delle versioni", + + // "item.page.claim.button": "Claim", + "item.page.claim.button": "Collega", + + // "item.page.claim.tooltip": "Claim this item as profile", + "item.page.claim.tooltip": "Collega questo item come profilo", + + // "item.preview.dc.identifier.uri": "Identifier:", + "item.preview.dc.identifier.uri": "Identificativo:", + + // "item.preview.dc.contributor.author": "Authors:", + "item.preview.dc.contributor.author": "Autori:", + + // "item.preview.dc.date.issued": "Published date:", + "item.preview.dc.date.issued": "Data di pubblicazione:", + + // "item.preview.dc.description.abstract": "Abstract:", + "item.preview.dc.description.abstract": "Abstract:", + + // "item.preview.dc.identifier.other": "Other identifier:", + "item.preview.dc.identifier.other": "Altri identificativi:", + + // "item.preview.dc.language.iso": "Language:", + "item.preview.dc.language.iso": "Lingua:", + + // "item.preview.dc.subject": "Subjects:", + // TODO New key - Add a translation + "item.preview.dc.subject": "Subjects:", + + // "item.preview.dc.title": "Title:", + "item.preview.dc.title": "Titolo:", + + // "item.preview.dc.type": "Type:", + "item.preview.dc.type": "Tipologia:", + + // "item.preview.oaire.citation.issue" : "Issue", + "item.preview.oaire.citation.issue" : "Fascicolo", + + // "item.preview.oaire.citation.volume" : "Volume", + "item.preview.oaire.citation.volume" : "Volume", + + // "item.preview.dc.relation.issn" : "ISSN", + "item.preview.dc.relation.issn" : "ISSN", + + // "item.preview.dc.identifier.isbn" : "ISBN", + "item.preview.dc.identifier.isbn" : "ISBN", + + // "item.preview.dc.identifier": "Identifier:", + "item.preview.dc.identifier": "Identificativo:", + + // "item.preview.dc.relation.ispartof" : "Journal or Serie", + "item.preview.dc.relation.ispartof" : "Periodico or Serie", + + // "item.preview.dc.identifier.doi" : "DOI", + "item.preview.dc.identifier.doi" : "DOI", + + // "item.preview.person.familyName": "Surname:", + "item.preview.person.familyName": "Cognome:", + + // "item.preview.person.givenName": "Name:", + "item.preview.person.givenName": "Nome:", + + // "item.preview.person.identifier.orcid": "ORCID:", + "item.preview.person.identifier.orcid": "ORCID:", + + // "item.preview.project.funder.name": "Funder:", + "item.preview.project.funder.name": " Finanziatore:", + + // "item.preview.project.funder.identifier": "Funder Identifier:", + "item.preview.project.funder.identifier": "Indentificativo del finanziatore:", + + // "item.preview.oaire.awardNumber": "Funding ID:", + "item.preview.oaire.awardNumber": "ID del finanziamento:", + + // "item.preview.dc.title.alternative": "Acronym:", + // TODO New key - Add a translation + "item.preview.dc.title.alternative": "Acronym:", + + // "item.preview.dc.coverage.spatial": "Jurisdiction:", + "item.preview.dc.coverage.spatial": "Giurisdizione:", + + // "item.preview.oaire.fundingStream": "Funding Stream:", + "item.preview.oaire.fundingStream": "Flusso di finanziamento:", + + + + // "item.select.confirm": "Confirm selected", + "item.select.confirm": "Conferma la selezione", + + // "item.select.empty": "No items to show", + "item.select.empty": "Nessun item da mostrare", + + // "item.select.table.author": "Author", + "item.select.table.author": "Autore", + + // "item.select.table.collection": "Collection", + "item.select.table.collection": "collection", + + // "item.select.table.title": "Title", + "item.select.table.title": "Titolo", + + + // "item.version.history.empty": "There are no other versions for this item yet.", + "item.version.history.empty": "Non ci sono ancora altre versioni per questo item.", + + // "item.version.history.head": "Version History", + "item.version.history.head": "Cronologia delle versioni", + + // "item.version.history.return": "Back", + "item.version.history.return": "Indietro", + + // "item.version.history.selected": "Selected version", + "item.version.history.selected": "Versione selezionata", + + // "item.version.history.selected.alert": "You are currently viewing version {{version}} of the item.", + "item.version.history.selected.alert": "Stai attualmente visualizzando la versione {{version}} dell'item.", + + // "item.version.history.table.version": "Version", + "item.version.history.table.version": "Versione", + + // "item.version.history.table.item": "Item", + "item.version.history.table.item": "Item", + + // "item.version.history.table.editor": "Editor", + "item.version.history.table.editor": "Editor", + + // "item.version.history.table.date": "Date", + "item.version.history.table.date": "Data", + + // "item.version.history.table.summary": "Summary", + "item.version.history.table.summary": "Riepilogo", + + // "item.version.history.table.workspaceItem": "Workspace item", + "item.version.history.table.workspaceItem": "Workspace item", + + // "item.version.history.table.workflowItem": "Workflow item", + "item.version.history.table.workflowItem": "Workflow item", + + // "item.version.history.table.actions": "Action", + "item.version.history.table.actions": "Azione", + + // "item.version.history.table.action.editWorkspaceItem": "Edit workspace item", + "item.version.history.table.action.editWorkspaceItem": "Modificare il workspace item", + + // "item.version.history.table.action.editSummary": "Edit summary", + "item.version.history.table.action.editSummary": "Modifica riepilogo", + + // "item.version.history.table.action.saveSummary": "Save summary edits", + "item.version.history.table.action.saveSummary": "Salva le modifiche del riepilogo", + + // "item.version.history.table.action.discardSummary": "Discard summary edits", + "item.version.history.table.action.discardSummary": "Elimina le modifiche del riepilogo", + + // "item.version.history.table.action.newVersion": "Create new version from this one", + "item.version.history.table.action.newVersion": "Crea una nuova versione da qui", + + // "item.version.history.table.action.deleteVersion": "Delete version", + "item.version.history.table.action.deleteVersion": "Elimina versione", + + // "item.version.history.table.action.hasDraft": "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.history.table.action.hasDraft": "Non è possibile creare una nuova versione perchè c'è già una submission in progress nella cronologia delle versioni", + + + // "item.version.notice": "This is not the latest version of this item. The latest version can be found here.", + "item.version.notice": "Questa non è la versione più recente di questo item. Puoi trovare l'ultima versione qui.", + + + // "item.version.create.modal.header": "New version", + "item.version.create.modal.header": "Nuova versione", + + // "item.version.create.modal.text": "Create a new version for this item", + "item.version.create.modal.text": "Crea una nuova versione per questo item", + + // "item.version.create.modal.text.startingFrom": "starting from version {{version}}", + "item.version.create.modal.text.startingFrom": "a partire dalla versione {{version}}", + + // "item.version.create.modal.button.confirm": "Create", + "item.version.create.modal.button.confirm": "Crea", + + // "item.version.create.modal.button.confirm.tooltip": "Create new version", + "item.version.create.modal.button.confirm.tooltip": "Crea una nuova versione", + + // "item.version.create.modal.button.cancel": "Cancel", + "item.version.create.modal.button.cancel": "Annulla", + + // "item.version.create.modal.button.cancel.tooltip": "Do not create new version", + "item.version.create.modal.button.cancel.tooltip": "Non creare una nuova versione", + + // "item.version.create.modal.form.summary.label": "Summary", + "item.version.create.modal.form.summary.label": "Riepilogo", + + // "item.version.create.modal.form.summary.placeholder": "Insert the summary for the new version", + "item.version.create.modal.form.summary.placeholder": "Inserire un riepilogo per la nuova versione", + + // "item.version.create.modal.submitted.header": "Creating new version...", + "item.version.create.modal.submitted.header": "Creazione della nuova versione...", + + // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", + "item.version.create.modal.submitted.text": "La nuova versione è in fase di creazione. Questa operazione potrebbe richiedere un po' di temo se l'item ha molte relazioni.", + + // "item.version.create.notification.success" : "New version has been created with version number {{version}}", + "item.version.create.notification.success" : "È stata creata una nuova versione con il numero {{version}}", + + // "item.version.create.notification.failure" : "New version has not been created", + "item.version.create.notification.failure" : "Non è stata creata una nuova versione", + + // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + "item.version.create.notification.inProgress" : "Non è possibile creare una nuova versione perchè c'è già una submission in progress nella cronologia delle versioni", + + + // "item.version.delete.modal.header": "Delete version", + "item.version.delete.modal.header": "Elimina versione", + + // "item.version.delete.modal.text": "Do you want to delete version {{version}}?", + "item.version.delete.modal.text": "Vuoi eliminare la versione {{version}}?", + + // "item.version.delete.modal.button.confirm": "Delete", + "item.version.delete.modal.button.confirm": "Elimina", + + // "item.version.delete.modal.button.confirm.tooltip": "Delete this version", + "item.version.delete.modal.button.confirm.tooltip": "Elimina questa versione", + + // "item.version.delete.modal.button.cancel": "Cancel", + "item.version.delete.modal.button.cancel": "Annulla", + + // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", + "item.version.delete.modal.button.cancel.tooltip": "Non eliminare questa versione", + + // "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + "item.version.delete.notification.success" : "La versione numero {{version}} è stata eliminata", + + // "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + "item.version.delete.notification.failure" : "La versione numero {{version}} non è stata eliminata", + + + // "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", + "item.version.edit.notification.success" : "Il riepilogo della versione numero {{version}} è stato modificato", + + // "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + "item.version.edit.notification.failure" : "Il riepilogo della versione numero {{version}} non è stato modificato", + + + + // "journal.listelement.badge": "Journal", + "journal.listelement.badge": "Periodico", + + // "journal.page.description": "Description", + "journal.page.description": "Descrizione", + + // "journal.page.edit": "Edit this item", + "journal.page.edit": "Modifica questo item", + + // "journal.page.editor": "Editor-in-Chief", + "journal.page.editor": "Redattore Capo", + + // "journal.page.issn": "ISSN", + "journal.page.issn": "ISSN", + + // "journal.page.publisher": "Publisher", + "journal.page.publisher": "Editore", + + // "journal.page.titleprefix": "Journal: ", + "journal.page.titleprefix": "Periodico: ", + + // "journal.search.results.head": "Journal Search Results", + "journal.search.results.head": "Risultati della ricerca Periodici", + + // "journal-relationships.search.results.head": "Journal Search Results", + "journal-relationships.search.results.head": "Risultati della ricerca Periodici", + + // "journal.search.title": "Journal Search", + "journal.search.title": "Ricerca Periodici", + + + + // "journalissue.listelement.badge": "Journal Issue", + "journalissue.listelement.badge": "Fascicolo del periodico", + + // "journalissue.page.description": "Description", + "journalissue.page.description": "Descrizione", + + // "journalissue.page.edit": "Edit this item", + "journalissue.page.edit": "Modifica questo item", + + // "journalissue.page.issuedate": "Issue Date", + "journalissue.page.issuedate": "Data di pubblicazione", + + // "journalissue.page.journal-issn": "Journal ISSN", + "journalissue.page.journal-issn": "ISSN", + + // "journalissue.page.journal-title": "Journal Title", + "journalissue.page.journal-title": "Titolo del periodico", + + // "journalissue.page.keyword": "Keywords", + "journalissue.page.keyword": "Keywords", + + // "journalissue.page.number": "Number", + "journalissue.page.number": "Numero", + + // "journalissue.page.titleprefix": "Journal Issue: ", + "journalissue.page.titleprefix": "Fascicolo del periodico: ", + + + + // "journalvolume.listelement.badge": "Journal Volume", + "journalvolume.listelement.badge": "Volume del periodico", + + // "journalvolume.page.description": "Description", + "journalvolume.page.description": "Descrizione", + + // "journalvolume.page.edit": "Edit this item", + "journalvolume.page.edit": "Modifica questo item", + + // "journalvolume.page.issuedate": "Issue Date", + "journalvolume.page.issuedate": "Data di pubblicazione", + + // "journalvolume.page.titleprefix": "Journal Volume: ", + "journalvolume.page.titleprefix": "Volume del periodico: ", + + // "journalvolume.page.volume": "Volume", + "journalvolume.page.volume": "Volume", + + + // "iiifsearchable.listelement.badge": "Document Media", + "iiifsearchable.listelement.badge": "Allegati", + + // "iiifsearchable.page.titleprefix": "Document: ", + "iiifsearchable.page.titleprefix": "Documento: ", + + // "iiifsearchable.page.doi": "Permanent Link: ", + "iiifsearchable.page.doi": "Link Permanente: ", + + // "iiifsearchable.page.issue": "Issue: ", + "iiifsearchable.page.issue": "Item:", + + // "iiifsearchable.page.description": "Description: ", + "iiifsearchable.page.description": "Descrizione: ", + + // "iiifviewer.fullscreen.notice": "Use full screen for better viewing.", + "iiifviewer.fullscreen.notice": "Usa lo schermo intero per una migliore visualizzazione.", + + // "iiif.listelement.badge": "Image Media", + "iiif.listelement.badge": "Immagini multimediali", + + // "iiif.page.titleprefix": "Image: ", + "iiif.page.titleprefix": "Immagine: ", + + // "iiif.page.doi": "Permanent Link: ", + "iiif.page.doi": "Link Permanente: ", + + // "iiif.page.issue": "Issue: ", + "iiif.page.issue": "Item: ", + + // "iiif.page.description": "Description: ", + "iiif.page.description": "Descrizione: ", + + + // "loading.bitstream": "Loading bitstream...", + "loading.bitstream": "Caricamento bitstream...", + + // "loading.bitstreams": "Loading bitstreams...", + "loading.bitstreams": "Caricamento bitstream...", + + // "loading.browse-by": "Loading items...", + "loading.browse-by": "Caricamento articoli...", + + // "loading.browse-by-page": "Loading page...", + "loading.browse-by-page": "Caricamento pagina...", + + // "loading.collection": "Loading collection...", + "loading.collection": "Caricamento collezione...", + + // "loading.collections": "Loading collections...", + "loading.collections": "Caricamento collezioni...", + + // "loading.content-source": "Loading content source...", + "loading.content-source": "Caricamento contenuto originale...", + + // "loading.community": "Loading community...", + "loading.community": "Caricamento community...", + + // "loading.default": "Loading...", + "loading.default": "Caricamento...", + + // "loading.item": "Loading item...", + "loading.item": "Caricamento articolo...", + + // "loading.items": "Loading items...", + "loading.items": "Caricamento articoli...", + + // "loading.mydspace-results": "Loading items...", + "loading.mydspace-results": "Caricamento articoli...", + + // "loading.objects": "Loading...", + "loading.objects": "Caricamento...", + + // "loading.recent-submissions": "Loading recent submissions...", + "loading.recent-submissions": "Caricamento immissioni recenti...", + + // "loading.search-results": "Loading search results...", + "loading.search-results": "Caricamento risultati della ricerca...", + + // "loading.sub-collections": "Loading sub-collections...", + "loading.sub-collections": "Caricamento sotto-collezioni...", + + // "loading.sub-communities": "Loading sub-communities...", + "loading.sub-communities": "Caricamento sotto-comunità...", + + // "loading.top-level-communities": "Loading top-level communities...", + "loading.top-level-communities": "Caricamento di community di primo livello...", + + + + // "login.form.email": "Email address", + "login.form.email": "Indirizzo email", + + // "login.form.forgot-password": "Have you forgotten your password?", + "login.form.forgot-password": "Hai dimenticato la password?", + + // "login.form.header": "Please log in to DSpace", + "login.form.header": "Accedi a DSpace", + + // "login.form.new-user": "New user? Click here to register.", + "login.form.new-user": "Nuovo utente? Clicca qui per registrarti.", + + // "login.form.or-divider": "or", + "login.form.or-divider": "oppure", + + // "login.form.oidc": "Log in with OIDC", + "login.form.oidc": "Accedi con OIDC", + + // "login.form.orcid": "Log in with ORCID", + "login.form.orcid": "Accedi con ORCID", + + // "login.form.password": "Password", + "login.form.password": "Password", + + // "login.form.shibboleth": "Log in with Shibboleth", + "login.form.shibboleth": "Accedi con Shibboleth", + + // "login.form.submit": "Log in", + "login.form.submit": "Accedi", + + // "login.title": "Login", + "login.title": "Accesso", + + // "login.breadcrumbs": "Login", + "login.breadcrumbs": "Accesso", + + + + // "logout.form.header": "Log out from DSpace", + "logout.form.header": "Disconnettersi da DSpace", + + // "logout.form.submit": "Log out", + "logout.form.submit": "Esci", + + // "logout.title": "Logout", + "logout.title": "Logout", + + + + // "menu.header.admin": "Management", + "menu.header.admin": "Gestione", + + // "menu.header.image.logo": "Repository logo", + "menu.header.image.logo": "Logo del repository", + + // "menu.header.admin.description": "Management menu", + "menu.header.admin.description": "Menu di gestione", + + + + // "menu.section.access_control": "Access Control", + "menu.section.access_control": "Controllo di accesso", + + // "menu.section.access_control_authorizations": "Authorizations", + "menu.section.access_control_authorizations": "Autorizzazioni", + + // "menu.section.access_control_groups": "Groups", + "menu.section.access_control_groups": "Gruppi", + + // "menu.section.access_control_people": "People", + "menu.section.access_control_people": "Persone", + + + + // "menu.section.admin_search": "Admin Search", + "menu.section.admin_search": "Ricerca admin", + + + + // "menu.section.browse_community": "This Community", + "menu.section.browse_community": "Questa Community", + + // "menu.section.browse_community_by_author": "By Author", + "menu.section.browse_community_by_author": "Per Autore", + + // "menu.section.browse_community_by_issue_date": "By Issue Date", + "menu.section.browse_community_by_issue_date": "Per data di pubblicazione", + + // "menu.section.browse_community_by_title": "By Title", + "menu.section.browse_community_by_title": "Per titolo", + + // "menu.section.browse_global": "All of DSpace", + // TODO New key - Add a translation + "menu.section.browse_global": "All of DSpace", + + // "menu.section.browse_global_by_author": "By Author", + // TODO New key - Add a translation + "menu.section.browse_global_by_author": "By Author", + + // "menu.section.browse_global_by_dateissued": "By Issue Date", + // TODO New key - Add a translation + "menu.section.browse_global_by_dateissued": "By Issue Date", + + // "menu.section.browse_global_by_subject": "By Subject", + // TODO New key - Add a translation + "menu.section.browse_global_by_subject": "By Subject", + + // "menu.section.browse_global_by_title": "By Title", + // TODO New key - Add a translation + "menu.section.browse_global_by_title": "By Title", + + // "menu.section.browse_global_communities_and_collections": "Communities & Collections", + // TODO New key - Add a translation + "menu.section.browse_global_communities_and_collections": "Communities & Collections", + + + + // "menu.section.control_panel": "Control Panel", + "menu.section.control_panel": "Pannello di controllo", + + // "menu.section.curation_task": "Curation Task", + "menu.section.curation_task": "Curation Task", + + + + // "menu.section.edit": "Edit", + "menu.section.edit": "Modificare", + + // "menu.section.edit_collection": "Collection", + "menu.section.edit_collection": "Collezione", + + // "menu.section.edit_community": "Community", + "menu.section.edit_community": "Community", + + // "menu.section.edit_item": "Item", + "menu.section.edit_item": "Articolo", + + + + // "menu.section.export": "Export", + "menu.section.export": "Esporta", + + // "menu.section.export_collection": "Collection", + "menu.section.export_collection": "Collezione", + + // "menu.section.export_community": "Community", + "menu.section.export_community": "Community", + + // "menu.section.export_item": "Item", + "menu.section.export_item": "Articolo", + + // "menu.section.export_metadata": "Metadata", + "menu.section.export_metadata": "Metadati", + + // "menu.section.export_batch": "Batch Export (ZIP)", + // TODO New key - Add a translation + "menu.section.export_batch": "Batch Export (ZIP)", + + + // "menu.section.icon.access_control": "Access Control menu section", + "menu.section.icon.access_control": "Sezione del menu Controllo di accesso", + + // "menu.section.icon.admin_search": "Admin search menu section", + "menu.section.icon.admin_search": "Sezione del menu di ricerca dell'amministratore", + + // "menu.section.icon.control_panel": "Control Panel menu section", + "menu.section.icon.control_panel": "Sezione del menu del Pannello di controllo", + + // "menu.section.icon.curation_tasks": "Curation Task menu section", + "menu.section.icon.curation_tasks": "Sezione del menu Curation task", + + // "menu.section.icon.edit": "Edit menu section", + "menu.section.icon.edit": "Modifica sezione menu", + + // "menu.section.icon.export": "Export menu section", + "menu.section.icon.export": "Sezione del menu Esporta", + + // "menu.section.icon.find": "Find menu section", + "menu.section.icon.find": "Trova sezione menu", + + // "menu.section.icon.health": "Health check menu section", + // TODO New key - Add a translation + "menu.section.icon.health": "Health check menu section", + + // "menu.section.icon.import": "Import menu section", + "menu.section.icon.import": "Sezione del menu Importa", + + // "menu.section.icon.new": "New menu section", + "menu.section.icon.new": "Nuova sezione menu", + + // "menu.section.icon.pin": "Pin sidebar", + "menu.section.icon.pin": "Fissa la barra laterale", + + // "menu.section.icon.processes": "Processes Health", + // TODO Source message changed - Revise the translation + "menu.section.icon.processes": "Sezione del menu Processi", + + // "menu.section.icon.registries": "Registries menu section", + "menu.section.icon.registries": "Sezione del menu Registri", + + // "menu.section.icon.statistics_task": "Statistics Task menu section", + "menu.section.icon.statistics_task": "Sezione del menu Task statistiche", + + // "menu.section.icon.workflow": "Administer workflow menu section", + "menu.section.icon.workflow": "Amministrare la sezione del menu del flusso di lavoro", + + // "menu.section.icon.unpin": "Unpin sidebar", + "menu.section.icon.unpin": "Rimuovi la barra laterale", + + + + // "menu.section.import": "Import", + "menu.section.import": "Importazione", + + // "menu.section.import_batch": "Batch Import (ZIP)", + "menu.section.import_batch": "Importazione batch (ZIP)", + + // "menu.section.import_metadata": "Metadata", + "menu.section.import_metadata": "Metadata", + + + + // "menu.section.new": "New", + "menu.section.new": "Nuovo", + + // "menu.section.new_collection": "Collection", + "menu.section.new_collection": "Collezione", + + // "menu.section.new_community": "Community", + "menu.section.new_community": "Community", + + // "menu.section.new_item": "Item", + "menu.section.new_item": "Item", + + // "menu.section.new_item_version": "Item Version", + "menu.section.new_item_version": "Versione dell'item", + + // "menu.section.new_process": "Process", + "menu.section.new_process": "Processo", + + + + // "menu.section.pin": "Pin sidebar", + "menu.section.pin": "Pin barra laterale", + + // "menu.section.unpin": "Unpin sidebar", + "menu.section.unpin": "Rimuovere la barra laterale", + + + + // "menu.section.processes": "Processes", + "menu.section.processes": "Processi", + + // "menu.section.health": "Health", + "menu.section.health": "Salute", + + + + // "menu.section.registries": "Registries", + "menu.section.registries": "Registri", + + // "menu.section.registries_format": "Format", + "menu.section.registries_format": "Formato", + + // "menu.section.registries_metadata": "Metadata", + "menu.section.registries_metadata": "Metadati", + + + + // "menu.section.statistics": "Statistics", + "menu.section.statistics": "Statistica", + + // "menu.section.statistics_task": "Statistics Task", + "menu.section.statistics_task": "Statistiche", + + + + // "menu.section.toggle.access_control": "Toggle Access Control section", + "menu.section.toggle.access_control": "Attiva/disattiva la sezione Controllo accessi", + + // "menu.section.toggle.control_panel": "Toggle Control Panel section", + "menu.section.toggle.control_panel": "Attiva/disattiva la sezione Pannello di controllo", + + // "menu.section.toggle.curation_task": "Toggle Curation Task section", + "menu.section.toggle.curation_task": "Attiva/disattiva la sezione Curation task", + + // "menu.section.toggle.edit": "Toggle Edit section", + "menu.section.toggle.edit": "Attiva/disattiva sezione Modifica", + + // "menu.section.toggle.export": "Toggle Export section", + "menu.section.toggle.export": "Attiva/disattiva la sezione Esporta", + + // "menu.section.toggle.find": "Toggle Find section", + "menu.section.toggle.find": "Attiva/disattiva la sezione Trova", + + // "menu.section.toggle.import": "Toggle Import section", + "menu.section.toggle.import": "Attiva/disattiva la sezione Importa", + + // "menu.section.toggle.new": "Toggle New section", + "menu.section.toggle.new": "Attiva/disattiva Nuova sezione", + + // "menu.section.toggle.registries": "Toggle Registries section", + "menu.section.toggle.registries": "Attiva/disattiva la sezione Registri", + + // "menu.section.toggle.statistics_task": "Toggle Statistics Task section", + "menu.section.toggle.statistics_task": "Attiva/disattiva la sezione Task statistiche", + + + // "menu.section.workflow": "Administer Workflow", + "menu.section.workflow": "Amministrare il flusso di lavoro", + + + // "metadata-export-search.tooltip": "Export search results as CSV", + "metadata-export-search.tooltip": "Esporta i risultati in CSV", + // "metadata-export-search.submit.success": "The export was started successfully", + "metadata-export-search.submit.success": "L'export è iniziato con successo", + // "metadata-export-search.submit.error": "Starting the export has failed", + "metadata-export-search.submit.error": "L'export è fallito", + + + // "mydspace.breadcrumbs": "MyDSpace", + "mydspace.breadcrumbs": "MyDSpace", + + // "mydspace.description": "", + "mydspace.description": "Mio spazio personale", + + // "mydspace.messages.controller-help": "Select this option to send a message to item's submitter.", + "mydspace.messages.controller-help": "Selezionare questa opzione per inviare un messaggio al mittente dell'item.", + + // "mydspace.messages.description-placeholder": "Insert your message here...", + "mydspace.messages.description-placeholder": "Inserisci qui il tuo messaggio...", + + // "mydspace.messages.hide-msg": "Hide message", + "mydspace.messages.hide-msg": "Nascondi messaggio", + + // "mydspace.messages.mark-as-read": "Mark as read", + "mydspace.messages.mark-as-read": "Contrassegna come letto", + + // "mydspace.messages.mark-as-unread": "Mark as unread", + "mydspace.messages.mark-as-unread": "Contrassegna come non letto", + + // "mydspace.messages.no-content": "No content.", + "mydspace.messages.no-content": "Nessun contenuto.", + + // "mydspace.messages.no-messages": "No messages yet.", + "mydspace.messages.no-messages": "Nessun messaggio ancora.", + + // "mydspace.messages.send-btn": "Send", + "mydspace.messages.send-btn": "Invia", + + // "mydspace.messages.show-msg": "Show message", + "mydspace.messages.show-msg": "Mostra messaggio", + + // "mydspace.messages.subject-placeholder": "Subject...", + "mydspace.messages.subject-placeholder": "Oggetto...", + + // "mydspace.messages.submitter-help": "Select this option to send a message to controller.", + "mydspace.messages.submitter-help": "Selezionare questa opzione per inviare un messaggio al controller.", + + // "mydspace.messages.title": "Messages", + "mydspace.messages.title": "Messaggi", + + // "mydspace.messages.to": "To", + "mydspace.messages.to": "A", + + // "mydspace.new-submission": "New submission", + "mydspace.new-submission": "Nuova immissione", + + // "mydspace.new-submission-external": "Import metadata from external source", + "mydspace.new-submission-external": "Importare metadati da un'origine esterna", + + // "mydspace.new-submission-external-short": "Import metadata", + "mydspace.new-submission-external-short": "Importare metadati", + + // "mydspace.results.head": "Your submissions", + "mydspace.results.head": "I tuoi contributi", + + // "mydspace.results.no-abstract": "No Abstract", + "mydspace.results.no-abstract": "Nessun abstract", + + // "mydspace.results.no-authors": "No Authors", + "mydspace.results.no-authors": "Nessun autore", + + // "mydspace.results.no-collections": "No Collections", + "mydspace.results.no-collections": "Nessuna collezione", + + // "mydspace.results.no-date": "No Date", + "mydspace.results.no-date": "Nessuna data", + + // "mydspace.results.no-files": "No Files", + "mydspace.results.no-files": "Nessun file", + + // "mydspace.results.no-results": "There were no items to show", + "mydspace.results.no-results": "Non c'erano oggetti da mostrare", + + // "mydspace.results.no-title": "No title", + "mydspace.results.no-title": "Nessun titolo", + + // "mydspace.results.no-uri": "No Uri", + "mydspace.results.no-uri": "Nessun URI", + + // "mydspace.search-form.placeholder": "Search in mydspace...", + "mydspace.search-form.placeholder": "Cerca in mydspace...", + + // "mydspace.show.workflow": "Workflow tasks", + "mydspace.show.workflow": "Workflow Tasks", + + // "mydspace.show.workspace": "Your Submissions", + "mydspace.show.workspace": "I tuoi contributi", + + // "mydspace.status.archived": "Archived", + "mydspace.status.archived": "Archiviati", + + // "mydspace.status.validation": "Validation", + "mydspace.status.validation": "Convalida", + + // "mydspace.status.waiting-for-controller": "Waiting for controller", + "mydspace.status.waiting-for-controller": "In attesa del controllo", + + // "mydspace.status.workflow": "Workflow", + "mydspace.status.workflow": "Workflow", + + // "mydspace.status.workspace": "Workspace", + "mydspace.status.workspace": "Workspace", + + // "mydspace.title": "MyDSpace", + "mydspace.title": "MyDSpace", + + // "mydspace.upload.upload-failed": "Error creating new workspace. Please verify the content uploaded before retry.", + "mydspace.upload.upload-failed": "Errore durante la creazione di una nuova area di lavoro. Verifica il contenuto caricato prima di riprovare.", + + // "mydspace.upload.upload-failed-manyentries": "Unprocessable file. Detected too many entries but allowed only one for file.", + "mydspace.upload.upload-failed-manyentries": "File non elaborabile. Rilevate troppe voci ma ne è consentita solo una per il file.", + + // "mydspace.upload.upload-failed-moreonefile": "Unprocessable request. Only one file is allowed.", + "mydspace.upload.upload-failed-moreonefile": "Richiesta non elaborabile. È consentito un solo file.", + + // "mydspace.upload.upload-multiple-successful": "{{qty}} new workspace items created.", + "mydspace.upload.upload-multiple-successful": "{{qty}} nuovi item dell'area di lavoro creati.", + + // "mydspace.view-btn": "View", + "mydspace.view-btn": "Vista", + + + + // "nav.browse.header": "All of DSpace", + "nav.browse.header": "Tutto DSpace", + + // "nav.community-browse.header": "By Community", + "nav.community-browse.header": "Per Community", + + // "nav.language": "Language switch", + "nav.language": "Cambio di lingua", + + // "nav.login": "Log In", + "nav.login": "Accedi", + + // "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + // TODO New key - Add a translation + "nav.user-profile-menu-and-logout": "User profile menu and Log Out", + + // "nav.logout": "Log Out", + // TODO Source message changed - Revise the translation + "nav.logout": "Menu profilo utente e Disconnetti", + + // "nav.main.description": "Main navigation bar", + "nav.main.description": "Barra di navigazione principale", + + // "nav.mydspace": "MyDSpace", + "nav.mydspace": "MyDSpace", + + // "nav.profile": "Profile", + "nav.profile": "Profilo", + + // "nav.search": "Search", + "nav.search": "Ricerca", + + // "nav.statistics.header": "Statistics", + "nav.statistics.header": "Statistica", + + // "nav.stop-impersonating": "Stop impersonating EPerson", + "nav.stop-impersonating": "Smetti di impersonare EPerson", + + // "nav.toggle" : "Toggle navigation", + // TODO New key - Add a translation + "nav.toggle" : "Toggle navigation", + + // "nav.user.description" : "User profile bar", + // TODO New key - Add a translation + "nav.user.description" : "User profile bar", + + // "none.listelement.badge": "Item", + "none.listelement.badge": "Articolo", + + + // "orgunit.listelement.badge": "Organizational Unit", + "orgunit.listelement.badge": "Unità organizzativa", + + // "orgunit.listelement.no-title": "Untitled", + // TODO New key - Add a translation + "orgunit.listelement.no-title": "Untitled", + + // "orgunit.page.city": "City", + "orgunit.page.city": "Città", + + // "orgunit.page.country": "Country", + "orgunit.page.country": "Paese", + + // "orgunit.page.dateestablished": "Date established", + "orgunit.page.dateestablished": "Data stabilita", + + // "orgunit.page.description": "Description", + "orgunit.page.description": "Descrizione", + + // "orgunit.page.edit": "Edit this item", + "orgunit.page.edit": "Modifica questo item", + + // "orgunit.page.id": "ID", + "orgunit.page.id": "ID", + + // "orgunit.page.titleprefix": "Organizational Unit: ", + // TODO New key - Add a translation + "orgunit.page.titleprefix": "Organizational Unit: ", + + + + // "pagination.options.description": "Pagination options", + "pagination.options.description": "Opzioni di impaginazione", + + // "pagination.results-per-page": "Results Per Page", + "pagination.results-per-page": "Risultati per pagina", + + // "pagination.showing.detail": "{{ range }} of {{ total }}", + "pagination.showing.detail": "{{ range }} di {{ total }}", + + // "pagination.showing.label": "Now showing ", + "pagination.showing.label": "Ora in mostra ", + + // "pagination.sort-direction": "Sort Options", + "pagination.sort-direction": "Opzioni di ordinamento", + + + + // "person.listelement.badge": "Person", + "person.listelement.badge": "Persona", + + // "person.listelement.no-title": "No name found", + "person.listelement.no-title": "Nessun nome trovato", + + // "person.page.birthdate": "Birth Date", + "person.page.birthdate": "Data di nascita", + + // "person.page.edit": "Edit this item", + "person.page.edit": "Modifica questo item", + + // "person.page.email": "Email Address", + "person.page.email": "Indirizzo email", + + // "person.page.firstname": "First Name", + "person.page.firstname": "Nome di battesimo", + + // "person.page.jobtitle": "Job Title", + "person.page.jobtitle": "Titolo di lavoro", + + // "person.page.lastname": "Last Name", + "person.page.lastname": "Cognome", + + // "person.page.name": "Name", + // TODO New key - Add a translation + "person.page.name": "Name", + + // "person.page.link.full": "Show all metadata", + "person.page.link.full": "Mostra tutti i metadati", + + // "person.page.orcid": "ORCID", + "person.page.orcid": "ORCID", + + // "person.page.staffid": "Staff ID", + "person.page.staffid": "ID personale", + + // "person.page.titleprefix": "Person: ", + "person.page.titleprefix": "Persona: ", + + // "person.search.results.head": "Person Search Results", + "person.search.results.head": "Risultati della ricerca per Ricercatore", + + // "person-relationships.search.results.head": "Person Search Results", + // TODO New key - Add a translation + "person-relationships.search.results.head": "Person Search Results", + + // "person.search.title": "Person Search", + "person.search.title": "Cerca i Ricercatori", + + + + // "process.new.select-parameters": "Parameters", + "process.new.select-parameters": "Parametri", + + // "process.new.cancel": "Cancel", + "process.new.cancel": "Annulla", + + // "process.new.submit": "Save", + "process.new.submit": "Salvare", + + // "process.new.select-script": "Script", + "process.new.select-script": "Script", + + // "process.new.select-script.placeholder": "Choose a script...", + "process.new.select-script.placeholder": "Scegli uno script...", + + // "process.new.select-script.required": "Script is required", + "process.new.select-script.required": "Lo script è obbligatorio", + + // "process.new.parameter.file.upload-button": "Select file...", + "process.new.parameter.file.upload-button": "Seleziona file...", + + // "process.new.parameter.file.required": "Please select a file", + "process.new.parameter.file.required": "Seleziona un file", + + // "process.new.parameter.string.required": "Parameter value is required", + "process.new.parameter.string.required": "Il valore del parametro è obbligatorio", + + // "process.new.parameter.type.value": "value", + "process.new.parameter.type.value": "valore", + + // "process.new.parameter.type.file": "file", + "process.new.parameter.type.file": "file", + + // "process.new.parameter.required.missing": "The following parameters are required but still missing:", + // TODO New key - Add a translation + "process.new.parameter.required.missing": "The following parameters are required but still missing:", + + // "process.new.notification.success.title": "Success", + "process.new.notification.success.title": "Successo", + + // "process.new.notification.success.content": "The process was successfully created", + "process.new.notification.success.content": "Il processo è stato creato con successo", + + // "process.new.notification.error.title": "Error", + "process.new.notification.error.title": "Errore", + + // "process.new.notification.error.content": "An error occurred while creating this process", + "process.new.notification.error.content": "Si è verificato un errore durante la creazione di questo processo", + + // "process.new.header": "Create a new process", + "process.new.header": "Creare un nuovo processo", + + // "process.new.title": "Create a new process", + "process.new.title": "Creare un nuovo processo", + + // "process.new.breadcrumbs": "Create a new process", + "process.new.breadcrumbs": "Creare un nuovo processo", + + + + // "process.detail.arguments" : "Arguments", + // TODO New key - Add a translation + "process.detail.arguments" : "Arguments", + + // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + // TODO New key - Add a translation + "process.detail.arguments.empty" : "This process doesn't contain any arguments", + + // "process.detail.back" : "Back", + // TODO New key - Add a translation + "process.detail.back" : "Back", + + // "process.detail.output" : "Process Output", + // TODO New key - Add a translation + "process.detail.output" : "Process Output", + + // "process.detail.logs.button": "Retrieve process output", + "process.detail.logs.button": "Recupera l'output del processo", + + // "process.detail.logs.loading": "Retrieving", + "process.detail.logs.loading": "Recupero", + + // "process.detail.logs.none": "This process has no output", + "process.detail.logs.none": "Questo processo non ha output", + + // "process.detail.output-files" : "Output Files", + // TODO New key - Add a translation + "process.detail.output-files" : "Output Files", + + // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // TODO New key - Add a translation + "process.detail.output-files.empty" : "This process doesn't contain any output files", + + // "process.detail.script" : "Script", + // TODO New key - Add a translation + "process.detail.script" : "Script", + + // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // TODO New key - Add a translation + "process.detail.title" : "Process: {{ id }} - {{ name }}", + + // "process.detail.start-time" : "Start time", + // TODO New key - Add a translation + "process.detail.start-time" : "Start time", + + // "process.detail.end-time" : "Finish time", + // TODO New key - Add a translation + "process.detail.end-time" : "Finish time", + + // "process.detail.status" : "Status", + // TODO New key - Add a translation + "process.detail.status" : "Status", + + // "process.detail.create" : "Create similar process", + // TODO New key - Add a translation + "process.detail.create" : "Create similar process", + + // "process.detail.actions": "Actions", + // TODO New key - Add a translation + "process.detail.actions": "Actions", + + // "process.detail.delete.button": "Delete process", + // TODO New key - Add a translation + "process.detail.delete.button": "Delete process", + + // "process.detail.delete.header": "Delete process", + // TODO New key - Add a translation + "process.detail.delete.header": "Delete process", + + // "process.detail.delete.body": "Are you sure you want to delete the current process?", + // TODO New key - Add a translation + "process.detail.delete.body": "Are you sure you want to delete the current process?", + + // "process.detail.delete.cancel": "Cancel", + // TODO New key - Add a translation + "process.detail.delete.cancel": "Cancel", + + // "process.detail.delete.confirm": "Delete process", + // TODO New key - Add a translation + "process.detail.delete.confirm": "Delete process", + + // "process.detail.delete.success": "The process was successfully deleted.", + // TODO New key - Add a translation + "process.detail.delete.success": "The process was successfully deleted.", + + // "process.detail.delete.error": "Something went wrong when deleting the process", + // TODO New key - Add a translation + "process.detail.delete.error": "Something went wrong when deleting the process", + + + + // "process.overview.table.finish" : "Finish time (UTC)", + // TODO New key - Add a translation + "process.overview.table.finish" : "Finish time (UTC)", + + // "process.overview.table.id" : "Process ID", + // TODO New key - Add a translation + "process.overview.table.id" : "Process ID", + + // "process.overview.table.name" : "Name", + // TODO New key - Add a translation + "process.overview.table.name" : "Name", + + // "process.overview.table.start" : "Start time (UTC)", + // TODO New key - Add a translation + "process.overview.table.start" : "Start time (UTC)", + + // "process.overview.table.status" : "Status", + // TODO New key - Add a translation + "process.overview.table.status" : "Status", + + // "process.overview.table.user" : "User", + // TODO New key - Add a translation + "process.overview.table.user" : "User", + + // "process.overview.title": "Processes Overview", + "process.overview.title": "Panoramica dei processi", + + // "process.overview.breadcrumbs": "Processes Overview", + "process.overview.breadcrumbs": "Panoramica dei processi", + + // "process.overview.new": "New", + "process.overview.new": "Nuovo", + + // "process.overview.table.actions": "Actions", + // TODO New key - Add a translation + "process.overview.table.actions": "Actions", + + // "process.overview.delete": "Delete {{count}} processes", + // TODO New key - Add a translation + "process.overview.delete": "Delete {{count}} processes", + + // "process.overview.delete.clear": "Clear delete selection", + // TODO New key - Add a translation + "process.overview.delete.clear": "Clear delete selection", + + // "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + // TODO New key - Add a translation + "process.overview.delete.processing": "{{count}} process(es) are being deleted. Please wait for the deletion to fully complete. Note that this can take a while.", + + // "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + // TODO New key - Add a translation + "process.overview.delete.body": "Are you sure you want to delete {{count}} process(es)?", + + // "process.overview.delete.header": "Delete processes", + // TODO New key - Add a translation + "process.overview.delete.header": "Delete processes", + + // "process.bulk.delete.error.head": "Error on deleteing process", + // TODO New key - Add a translation + "process.bulk.delete.error.head": "Error on deleteing process", + + // "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + // TODO New key - Add a translation + "process.bulk.delete.error.body": "The process with ID {{processId}} could not be deleted. The remaining processes will continue being deleted. ", + + // "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + // TODO New key - Add a translation + "process.bulk.delete.success": "{{count}} process(es) have been succesfully deleted", + + + + // "profile.breadcrumbs": "Update Profile", + "profile.breadcrumbs": "Aggiorna profilo", + + // "profile.card.identify": "Identify", + "profile.card.identify": "Identificare", + + // "profile.card.security": "Security", + "profile.card.security": "Sicurezza", + + // "profile.form.submit": "Save", + // TODO Source message changed - Revise the translation + "profile.form.submit": "Aggiorna profilo", + + // "profile.groups.head": "Authorization groups you belong to", + "profile.groups.head": "Gruppi di autorizzazione a cui appartieni", + + // "profile.special.groups.head": "Authorization special groups you belong to", + // TODO New key - Add a translation + "profile.special.groups.head": "Authorization special groups you belong to", + + // "profile.head": "Update Profile", + "profile.head": "Aggiorna profilo", + + // "profile.metadata.form.error.firstname.required": "First Name is required", + "profile.metadata.form.error.firstname.required": "Il nome è obbligatorio", + + // "profile.metadata.form.error.lastname.required": "Last Name is required", + "profile.metadata.form.error.lastname.required": "Il cognome è obbligatorio", + + // "profile.metadata.form.label.email": "Email Address", + "profile.metadata.form.label.email": "Indirizzo e-mail", + + // "profile.metadata.form.label.firstname": "First Name", + "profile.metadata.form.label.firstname": "Nome", + + // "profile.metadata.form.label.language": "Language", + "profile.metadata.form.label.language": "Lingua", + + // "profile.metadata.form.label.lastname": "Last Name", + "profile.metadata.form.label.lastname": "Cognome", + + // "profile.metadata.form.label.phone": "Contact Telephone", + "profile.metadata.form.label.phone": "Telefono di contatto", + + // "profile.metadata.form.notifications.success.content": "Your changes to the profile were saved.", + "profile.metadata.form.notifications.success.content": "Le modifiche apportate al profilo sono state salvate.", + + // "profile.metadata.form.notifications.success.title": "Profile saved", + "profile.metadata.form.notifications.success.title": "Profilo salvato", + + // "profile.notifications.warning.no-changes.content": "No changes were made to the Profile.", + "profile.notifications.warning.no-changes.content": "Non sono state apportate modifiche al Profilo.", + + // "profile.notifications.warning.no-changes.title": "No changes", + "profile.notifications.warning.no-changes.title": "Nessuna modifica", + + // "profile.security.form.error.matching-passwords": "The passwords do not match.", + "profile.security.form.error.matching-passwords": "Le password non corrispondono.", + + // "profile.security.form.info": "Optionally, you can enter a new password in the box below, and confirm it by typing it again into the second box.", + // TODO Source message changed - Revise the translation + "profile.security.form.info": "Facoltativamente, è possibile inserire una nuova password nella casella qui sotto e confermarla digitandola nuovamente nella seconda casella. Dovrebbe essere lungo almeno sei caratteri.", + + // "profile.security.form.label.password": "Password", + "profile.security.form.label.password": "Password", + + // "profile.security.form.label.passwordrepeat": "Retype to confirm", + "profile.security.form.label.passwordrepeat": "Ridigitare per confermare", + + // "profile.security.form.label.current-password": "Current password", + // TODO New key - Add a translation + "profile.security.form.label.current-password": "Current password", + + // "profile.security.form.notifications.success.content": "Your changes to the password were saved.", + "profile.security.form.notifications.success.content": "Le modifiche apportate alla password sono state salvate.", + + // "profile.security.form.notifications.success.title": "Password saved", + "profile.security.form.notifications.success.title": "Password salvata", + + // "profile.security.form.notifications.error.title": "Error changing passwords", + "profile.security.form.notifications.error.title": "Errore durante la modifica delle password", + + // "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + // TODO New key - Add a translation + "profile.security.form.notifications.error.change-failed": "An error occurred while trying to change the password. Please check if the current password is correct.", + + // "profile.security.form.notifications.error.not-same": "The provided passwords are not the same.", + "profile.security.form.notifications.error.not-same": "Le password fornite non sono le stesse.", + + // "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + // TODO New key - Add a translation + "profile.security.form.notifications.error.general": "Please fill required fields of security form.", + + // "profile.title": "Update Profile", + "profile.title": "Aggiorna profilo", + + // "profile.card.researcher": "Researcher Profile", + "profile.card.researcher": "Profilo del ricercatore", + + // "project.listelement.badge": "Research Project", + "project.listelement.badge": "Risultati della ricerca: Progetti", + + // "project.page.contributor": "Contributors", + "project.page.contributor": "Progetto di ricerca", + + // "project.page.description": "Description", + "project.page.description": "Collaboratori", + + // "project.page.edit": "Edit this item", + "project.page.edit": "Descrizione", + + // "project.page.expectedcompletion": "Expected Completion", + "project.page.expectedcompletion": "Modifica questo item", + + // "project.page.funder": "Funders", + "project.page.funder": "Completamento previsto", + + // "project.page.id": "ID", + "project.page.id": "Finanziatori", + + // "project.page.keyword": "Keywords", + "project.page.keyword": "ID", + + // "project.page.status": "Status", + "project.page.status": "Parole chiave", + + // "project.page.titleprefix": "Research Project: ", + // TODO New key - Add a translation + "project.page.titleprefix": "Research Project: ", + + // "project.search.results.head": "Project Search Results", + "project.search.results.head": "Progetto di ricerca: ", + + // "project-relationships.search.results.head": "Project Search Results", + // TODO New key - Add a translation + "project-relationships.search.results.head": "Project Search Results", + + + + // "publication.listelement.badge": "Publication", + "publication.listelement.badge": "Pubblicazione", + + // "publication.page.description": "Description", + "publication.page.description": "Descrizione", + + // "publication.page.edit": "Edit this item", + "publication.page.edit": "Modifica questo item", + + // "publication.page.journal-issn": "Journal ISSN", + "publication.page.journal-issn": "ISSN Periodico", + + // "publication.page.journal-title": "Journal Title", + "publication.page.journal-title": "Titolo del Periodico", + + // "publication.page.publisher": "Publisher", + "publication.page.publisher": "Editore", + + // "publication.page.titleprefix": "Publication: ", + // TODO New key - Add a translation + "publication.page.titleprefix": "Publication: ", + + // "publication.page.volume-title": "Volume Title", + "publication.page.volume-title": "Titolo volume", + + // "publication.search.results.head": "Publication Search Results", + "publication.search.results.head": "Risultati della ricerca di pubblicazioni", + + // "publication-relationships.search.results.head": "Publication Search Results", + // TODO New key - Add a translation + "publication-relationships.search.results.head": "Publication Search Results", + + // "publication.search.title": "Publication Search", + "publication.search.title": "Ricerca pubblicazione", + + + // "media-viewer.next": "Next", + "media-viewer.next": "Avanti", + + // "media-viewer.previous": "Previous", + "media-viewer.previous": "Precedente", + + // "media-viewer.playlist": "Playlist", + "media-viewer.playlist": "Playlist", + + + // "register-email.title": "New user registration", + "register-email.title": "Registrazione nuovo utente", + + // "register-page.create-profile.header": "Create Profile", + "register-page.create-profile.header": "Crea profilo", + + // "register-page.create-profile.identification.header": "Identify", + "register-page.create-profile.identification.header": "Identificare", + + // "register-page.create-profile.identification.email": "Email Address", + "register-page.create-profile.identification.email": "Indirizzo e-mail", + + // "register-page.create-profile.identification.first-name": "First Name *", + "register-page.create-profile.identification.first-name": "Nome *", + + // "register-page.create-profile.identification.first-name.error": "Please fill in a First Name", + "register-page.create-profile.identification.first-name.error": "Inserire un nome", + + // "register-page.create-profile.identification.last-name": "Last Name *", + "register-page.create-profile.identification.last-name": "Cognome *", + + // "register-page.create-profile.identification.last-name.error": "Please fill in a Last Name", + "register-page.create-profile.identification.last-name.error": "Inserire un cognome", + + // "register-page.create-profile.identification.contact": "Contact Telephone", + "register-page.create-profile.identification.contact": "Telefono di contatto", + + // "register-page.create-profile.identification.language": "Language", + "register-page.create-profile.identification.language": "Lingua", + + // "register-page.create-profile.security.header": "Security", + "register-page.create-profile.security.header": "Sicurezza", + + // "register-page.create-profile.security.info": "Please enter a password in the box below, and confirm it by typing it again into the second box.", + // TODO Source message changed - Revise the translation + "register-page.create-profile.security.info": "Inserisci una password nella casella qui sotto e confermala digitandola nuovamente nella seconda casella. Dovrebbe essere lungo almeno sei caratteri.", + + // "register-page.create-profile.security.label.password": "Password *", + "register-page.create-profile.security.label.password": "Password *", + + // "register-page.create-profile.security.label.passwordrepeat": "Retype to confirm *", + "register-page.create-profile.security.label.passwordrepeat": "Ridigitare per confermare *", + + // "register-page.create-profile.security.error.empty-password": "Please enter a password in the box below.", + "register-page.create-profile.security.error.empty-password": "Inserisci una password nella casella qui sotto.", + + // "register-page.create-profile.security.error.matching-passwords": "The passwords do not match.", + "register-page.create-profile.security.error.matching-passwords": "Le password non corrispondono.", + + // "register-page.create-profile.submit": "Complete Registration", + "register-page.create-profile.submit": "Registrazione completa", + + // "register-page.create-profile.submit.error.content": "Something went wrong while registering a new user.", + "register-page.create-profile.submit.error.content": "Qualcosa è andato storto durante la registrazione di un nuovo utente.", + + // "register-page.create-profile.submit.error.head": "Registration failed", + "register-page.create-profile.submit.error.head": "Registrazione non riuscita", + + // "register-page.create-profile.submit.success.content": "The registration was successful. You have been logged in as the created user.", + "register-page.create-profile.submit.success.content": "La registrazione è andata a buon fine. Hai effettuato l'accesso come utente creato.", + + // "register-page.create-profile.submit.success.head": "Registration completed", + "register-page.create-profile.submit.success.head": "Registrazione completata", + + + // "register-page.registration.header": "New user registration", + "register-page.registration.header": "Registrazione nuovo utente", + + // "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to DSpace.", + "register-page.registration.info": "Registra un account per iscriverti alle collezioni per gli aggiornamenti via e-mail e invia nuovi item a DSpace.", + + // "register-page.registration.email": "Email Address *", + "register-page.registration.email": "Indirizzo e-mail *", + + // "register-page.registration.email.error.required": "Please fill in an email address", + "register-page.registration.email.error.required": "Inserire un indirizzo e-mail", + + // "register-page.registration.email.error.pattern": "Please fill in a valid email address", + "register-page.registration.email.error.pattern": "Si prega di inserire un indirizzo e-mail valido", + + // "register-page.registration.email.hint": "This address will be verified and used as your login name.", + "register-page.registration.email.hint": "Questo indirizzo verrà verificato e utilizzato come nome di accesso.", + + // "register-page.registration.submit": "Register", + "register-page.registration.submit": "Registrati", + + // "register-page.registration.success.head": "Verification email sent", + "register-page.registration.success.head": "Email di verifica inviata", + + // "register-page.registration.success.content": "An email has been sent to {{ email }} containing a special URL and further instructions.", + "register-page.registration.success.content": "È stata inviata un'e-mail a {{ email }} contenente un URL speciale e ulteriori istruzioni.", + + // "register-page.registration.error.head": "Error when trying to register email", + "register-page.registration.error.head": "Errore durante il tentativo di registrazione dell'e-mail", + + // "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", + // TODO New key - Add a translation + "register-page.registration.error.content": "An error occured when registering the following email address: {{ email }}", + + // "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + // TODO New key - Add a translation + "register-page.registration.error.recaptcha": "Error when trying to authenticate with recaptcha", + + // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", + + // "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.notification.title": "Google reCaptcha", + + // "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.notification.message.error": "An error occurred during reCaptcha verification", + + // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + // TODO New key - Add a translation + "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + + // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", + "relationships.add.error.relationship-type.content": "Non è stata trovata alcuna corrispondenza adatta per il tipo di relazione {{ type }} tra i due item", + + // "relationships.add.error.server.content": "The server returned an error", + "relationships.add.error.server.content": "Il server ha restituito un errore", + + // "relationships.add.error.title": "Unable to add relationship", + "relationships.add.error.title": "Impossibile aggiungere relazione", + + // "relationships.isAuthorOf": "Authors", + "relationships.isAuthorOf": "Autori", + + // "relationships.isAuthorOf.Person": "Authors (persons)", + "relationships.isAuthorOf.Person": "Autori (persone)", + + // "relationships.isAuthorOf.OrgUnit": "Authors (organizational units)", + "relationships.isAuthorOf.OrgUnit": "Autori (struttura)", + + // "relationships.isIssueOf": "Journal Issues", + "relationships.isIssueOf": "Fascicolo Periodico", + + // "relationships.isJournalIssueOf": "Journal Issue", + "relationships.isJournalIssueOf": "Fascicolo Periodico", + + // "relationships.isJournalOf": "Journals", + "relationships.isJournalOf": "Periodico", + + // "relationships.isOrgUnitOf": "Organizational Units", + "relationships.isOrgUnitOf": "Strutture", + + // "relationships.isPersonOf": "Authors", + "relationships.isPersonOf": "Autori", + + // "relationships.isProjectOf": "Research Projects", + "relationships.isProjectOf": "Progetti di ricerca", + + // "relationships.isPublicationOf": "Publications", + "relationships.isPublicationOf": "Pubblicazioni", + + // "relationships.isPublicationOfJournalIssue": "Articles", + "relationships.isPublicationOfJournalIssue": "Articoli", + + // "relationships.isSingleJournalOf": "Journal", + "relationships.isSingleJournalOf": "Periodico", + + // "relationships.isSingleVolumeOf": "Journal Volume", + "relationships.isSingleVolumeOf": "Volume del Periodico", + + // "relationships.isVolumeOf": "Journal Volumes", + "relationships.isVolumeOf": "Volumi di Periodico", + + // "relationships.isContributorOf": "Contributors", + "relationships.isContributorOf": "Collaboratori", + + // "relationships.isContributorOf.OrgUnit": "Contributor (Organizational Unit)", + "relationships.isContributorOf.OrgUnit": "Collaboratore (Struttura)", + + // "relationships.isContributorOf.Person": "Contributor", + "relationships.isContributorOf.Person": "Collaboratore", + + // "relationships.isFundingAgencyOf.OrgUnit": "Funder", + "relationships.isFundingAgencyOf.OrgUnit": "Finanziatore", + + + // "repository.image.logo": "Repository logo", + "repository.image.logo": "Logo del repository", + + // "repository.title.prefix": "DSpace Angular :: ", + // TODO New key - Add a translation + "repository.title.prefix": "DSpace Angular :: ", + + // "repository.title.prefixDSpace": "DSpace Angular ::", + "repository.title.prefixDSpace": "DSpace Angular ::", + + + // "resource-policies.add.button": "Add", + "resource-policies.add.button": "Aggiungi", + + // "resource-policies.add.for.": "Add a new policy", + "resource-policies.add.for.": "Aggiungi un nuovo criterio", + + // "resource-policies.add.for.bitstream": "Add a new Bitstream policy", + "resource-policies.add.for.bitstream": "Aggiungi un nuovo criterio Bitstream", + + // "resource-policies.add.for.bundle": "Add a new Bundle policy", + "resource-policies.add.for.bundle": "Aggiungi un nuovo criterio Bundle", + + // "resource-policies.add.for.item": "Add a new Item policy", + "resource-policies.add.for.item": "Aggiungi un nuovo criterio item", + + // "resource-policies.add.for.community": "Add a new Community policy", + "resource-policies.add.for.community": "Aggiungere un nuovo criterio comunitario", + + // "resource-policies.add.for.collection": "Add a new Collection policy", + "resource-policies.add.for.collection": "Aggiungere un nuovo criterio di collezione", + + // "resource-policies.create.page.heading": "Create new resource policy for ", + "resource-policies.create.page.heading": "Creare nuovi criteri di risorsa per ", + + // "resource-policies.create.page.failure.content": "An error occurred while creating the resource policy.", + "resource-policies.create.page.failure.content": "Si è verificato un errore durante la creazione del criterio della risorsa.", + + // "resource-policies.create.page.success.content": "Operation successful", + "resource-policies.create.page.success.content": "Operazione riuscita", + + // "resource-policies.create.page.title": "Create new resource policy", + "resource-policies.create.page.title": "Creare nuovi criteri risorse", + + // "resource-policies.delete.btn": "Delete selected", + "resource-policies.delete.btn": "Elimina selezionato", + + // "resource-policies.delete.btn.title": "Delete selected resource policies", + "resource-policies.delete.btn.title": "Elimina criteri risorse selezionati", + + // "resource-policies.delete.failure.content": "An error occurred while deleting selected resource policies.", + "resource-policies.delete.failure.content": "Si è verificato un errore durante l'eliminazione dei criteri delle risorse selezionati.", + + // "resource-policies.delete.success.content": "Operation successful", + "resource-policies.delete.success.content": "Operazione riuscita", + + // "resource-policies.edit.page.heading": "Edit resource policy ", + "resource-policies.edit.page.heading": "Modifica criterio risorse", + + // "resource-policies.edit.page.failure.content": "An error occurred while editing the resource policy.", + "resource-policies.edit.page.failure.content": "Si è verificato un errore durante la modifica del criterio delle risorse.", + + // "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + // TODO New key - Add a translation + "resource-policies.edit.page.target-failure.content": "An error occurred while editing the target (ePerson or group) of the resource policy.", + + // "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + // TODO New key - Add a translation + "resource-policies.edit.page.other-failure.content": "An error occurred while editing the resource policy. The target (ePerson or group) has been successfully updated.", + + // "resource-policies.edit.page.success.content": "Operation successful", + "resource-policies.edit.page.success.content": "Operazione riuscita", + + // "resource-policies.edit.page.title": "Edit resource policy", + "resource-policies.edit.page.title": "Modifica criterio risorse", + + // "resource-policies.form.action-type.label": "Select the action type", + "resource-policies.form.action-type.label": "Selezionare il tipo di azione", + + // "resource-policies.form.action-type.required": "You must select the resource policy action.", + "resource-policies.form.action-type.required": "È necessario selezionare l'azione del criterio delle risorse.", + + // "resource-policies.form.eperson-group-list.label": "The eperson or group that will be granted the permission", + "resource-policies.form.eperson-group-list.label": "L'eperson o il gruppo a cui verrà concessa l'autorizzazione", + + // "resource-policies.form.eperson-group-list.select.btn": "Select", + "resource-policies.form.eperson-group-list.select.btn": "Seleziona", + + // "resource-policies.form.eperson-group-list.tab.eperson": "Search for a ePerson", + "resource-policies.form.eperson-group-list.tab.eperson": "Cerca un ePerson", + + // "resource-policies.form.eperson-group-list.tab.group": "Search for a group", + "resource-policies.form.eperson-group-list.tab.group": "Cerca un gruppo", + + // "resource-policies.form.eperson-group-list.table.headers.action": "Action", + "resource-policies.form.eperson-group-list.table.headers.action": "Azione", + + // "resource-policies.form.eperson-group-list.table.headers.id": "ID", + "resource-policies.form.eperson-group-list.table.headers.id": "ID", + + // "resource-policies.form.eperson-group-list.table.headers.name": "Name", + "resource-policies.form.eperson-group-list.table.headers.name": "Nome", + + // "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.header": "Cannot change type", + + // "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.text1.toGroup": "It is not possible to replace an ePerson with a group.", + + // "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.text1.toEPerson": "It is not possible to replace a group with an ePerson.", + + // "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + // TODO New key - Add a translation + "resource-policies.form.eperson-group-list.modal.text2": "Delete the current resource policy and create a new one with the desired type.", + + // "resource-policies.form.eperson-group-list.modal.close": "Ok", + "resource-policies.form.eperson-group-list.modal.close": "Ok", + + // "resource-policies.form.date.end.label": "End Date", + "resource-policies.form.date.end.label": "Data di fine", + + // "resource-policies.form.date.start.label": "Start Date", + "resource-policies.form.date.start.label": "Data di inizio", + + // "resource-policies.form.description.label": "Description", + "resource-policies.form.description.label": "Descrizione", + + // "resource-policies.form.name.label": "Name", + "resource-policies.form.name.label": "Nome", + + // "resource-policies.form.policy-type.label": "Select the policy type", + "resource-policies.form.policy-type.label": "Selezionare il tipo di criterio", + + // "resource-policies.form.policy-type.required": "You must select the resource policy type.", + "resource-policies.form.policy-type.required": "È necessario selezionare il tipo di criterio risorsa.", + + // "resource-policies.table.headers.action": "Action", + "resource-policies.table.headers.action": "Azione", + + // "resource-policies.table.headers.date.end": "End Date", + "resource-policies.table.headers.date.end": "Data di fine", + + // "resource-policies.table.headers.date.start": "Start Date", + "resource-policies.table.headers.date.start": "Data di inizio", + + // "resource-policies.table.headers.edit": "Edit", + "resource-policies.table.headers.edit": "Modifica", + + // "resource-policies.table.headers.edit.group": "Edit group", + "resource-policies.table.headers.edit.group": "Modifica gruppo", + + // "resource-policies.table.headers.edit.policy": "Edit policy", + "resource-policies.table.headers.edit.policy": "Modifica criterio", + + // "resource-policies.table.headers.eperson": "EPerson", + "resource-policies.table.headers.eperson": "EPerson", + + // "resource-policies.table.headers.group": "Group", + "resource-policies.table.headers.group": "Gruppo", + + // "resource-policies.table.headers.id": "ID", + "resource-policies.table.headers.id": "ID", + + // "resource-policies.table.headers.name": "Name", + "resource-policies.table.headers.name": "Nome", + + // "resource-policies.table.headers.policyType": "type", + "resource-policies.table.headers.policyType": "tipo", + + // "resource-policies.table.headers.title.for.bitstream": "Policies for Bitstream", + "resource-policies.table.headers.title.for.bitstream": "Criteri per Bitstream", + + // "resource-policies.table.headers.title.for.bundle": "Policies for Bundle", + "resource-policies.table.headers.title.for.bundle": "Criteri per Bundle", + + // "resource-policies.table.headers.title.for.item": "Policies for Item", + "resource-policies.table.headers.title.for.item": "Criteri per l'item", + + // "resource-policies.table.headers.title.for.community": "Policies for Community", + "resource-policies.table.headers.title.for.community": "Politiche per la community", + + // "resource-policies.table.headers.title.for.collection": "Policies for Collection", + "resource-policies.table.headers.title.for.collection": "Criteri per la collezione", + + + + // "search.description": "", + "search.description": "", + + // "search.switch-configuration.title": "Show", + "search.switch-configuration.title": "Mostra", + + // "search.title": "Search", + "search.title": "Cerca", + + // "search.breadcrumbs": "Search", + "search.breadcrumbs": "Cerca", + + // "search.search-form.placeholder": "Search the repository ...", + "search.search-form.placeholder": "Cerca nel repository ...", + + + // "search.filters.applied.f.author": "Author", + "search.filters.applied.f.author": "Autore", + + // "search.filters.applied.f.dateIssued.max": "End date", + "search.filters.applied.f.dateIssued.max": "Data di fine", + + // "search.filters.applied.f.dateIssued.min": "Start date", + "search.filters.applied.f.dateIssued.min": "Data di inizio", + + // "search.filters.applied.f.dateSubmitted": "Date submitted", + "search.filters.applied.f.dateSubmitted": "Data di invio", + + // "search.filters.applied.f.discoverable": "Non-discoverable", + // TODO Source message changed - Revise the translation + "search.filters.applied.f.discoverable": "Privato", + + // "search.filters.applied.f.entityType": "Item Type", + "search.filters.applied.f.entityType": "Tipo di item", + + // "search.filters.applied.f.has_content_in_original_bundle": "Has files", + "search.filters.applied.f.has_content_in_original_bundle": "Ha file", + + // "search.filters.applied.f.itemtype": "Type", + "search.filters.applied.f.itemtype": "Tipo", + + // "search.filters.applied.f.namedresourcetype": "Status", + "search.filters.applied.f.namedresourcetype": "Stato", + + // "search.filters.applied.f.subject": "Subject", + "search.filters.applied.f.subject": "Oggetto", + + // "search.filters.applied.f.submitter": "Submitter", + "search.filters.applied.f.submitter": "Mittente", + + // "search.filters.applied.f.jobTitle": "Job Title", + "search.filters.applied.f.jobTitle": "Titolo di lavoro", + + // "search.filters.applied.f.birthDate.max": "End birth date", + "search.filters.applied.f.birthDate.max": "Data di fine nascita", + + // "search.filters.applied.f.birthDate.min": "Start birth date", + "search.filters.applied.f.birthDate.min": "Data di nascita iniziale", + + // "search.filters.applied.f.withdrawn": "Withdrawn", + "search.filters.applied.f.withdrawn": "Ritirato", + + + + // "search.filters.filter.author.head": "Author", + "search.filters.filter.author.head": "Autore", + + // "search.filters.filter.author.placeholder": "Author name", + "search.filters.filter.author.placeholder": "Nome autore", + + // "search.filters.filter.author.label": "Search author name", + "search.filters.filter.author.label": "Cerca nome autore", + + // "search.filters.filter.birthDate.head": "Birth Date", + "search.filters.filter.birthDate.head": "Data di nascita", + + // "search.filters.filter.birthDate.placeholder": "Birth Date", + "search.filters.filter.birthDate.placeholder": "Data di nascita", + + // "search.filters.filter.birthDate.label": "Search birth date", + "search.filters.filter.birthDate.label": "Cerca data di nascita", + + // "search.filters.filter.collapse": "Collapse filter", + "search.filters.filter.collapse": "Comprimi filtro", + + // "search.filters.filter.creativeDatePublished.head": "Date Published", + "search.filters.filter.creativeDatePublished.head": "Data di pubblicazione", + + // "search.filters.filter.creativeDatePublished.placeholder": "Date Published", + "search.filters.filter.creativeDatePublished.placeholder": "Data di pubblicazione", + + // "search.filters.filter.creativeDatePublished.label": "Search date published", + "search.filters.filter.creativeDatePublished.label": "Data di ricerca pubblicata", + + // "search.filters.filter.creativeWorkEditor.head": "Editor", + "search.filters.filter.creativeWorkEditor.head": "Editor", + + // "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + "search.filters.filter.creativeWorkEditor.placeholder": "Editor", + + // "search.filters.filter.creativeWorkEditor.label": "Search editor", + "search.filters.filter.creativeWorkEditor.label": "Editor di ricerca", + + // "search.filters.filter.creativeWorkKeywords.head": "Subject", + "search.filters.filter.creativeWorkKeywords.head": "Oggetto", + + // "search.filters.filter.creativeWorkKeywords.placeholder": "Subject", + "search.filters.filter.creativeWorkKeywords.placeholder": "Oggetto", + + // "search.filters.filter.creativeWorkKeywords.label": "Search subject", + "search.filters.filter.creativeWorkKeywords.label": "Oggetto della ricerca", + + // "search.filters.filter.creativeWorkPublisher.head": "Publisher", + "search.filters.filter.creativeWorkPublisher.head": "Editore", + + // "search.filters.filter.creativeWorkPublisher.placeholder": "Publisher", + "search.filters.filter.creativeWorkPublisher.placeholder": "Editore", + + // "search.filters.filter.creativeWorkPublisher.label": "Search publisher", + "search.filters.filter.creativeWorkPublisher.label": "Cerca editore", + + // "search.filters.filter.dateIssued.head": "Date", + "search.filters.filter.dateIssued.head": "Data", + + // "search.filters.filter.dateIssued.max.placeholder": "Maximum Date", + "search.filters.filter.dateIssued.max.placeholder": "Data massima", + + // "search.filters.filter.dateIssued.max.label": "End", + "search.filters.filter.dateIssued.max.label": "Fine", + + // "search.filters.filter.dateIssued.min.placeholder": "Minimum Date", + "search.filters.filter.dateIssued.min.placeholder": "Data minima", + + // "search.filters.filter.dateIssued.min.label": "Start", + "search.filters.filter.dateIssued.min.label": "Inizio", + + // "search.filters.filter.dateSubmitted.head": "Date submitted", + "search.filters.filter.dateSubmitted.head": "Data inviata", + + // "search.filters.filter.dateSubmitted.placeholder": "Date submitted", + "search.filters.filter.dateSubmitted.placeholder": "Data di invio", + + // "search.filters.filter.dateSubmitted.label": "Search date submitted", + "search.filters.filter.dateSubmitted.label": "Data di ricerca inviata", + + // "search.filters.filter.discoverable.head": "Non-discoverable", + // TODO Source message changed - Revise the translation + "search.filters.filter.discoverable.head": "Privato", + + // "search.filters.filter.withdrawn.head": "Withdrawn", + "search.filters.filter.withdrawn.head": "Ritirato", + + // "search.filters.filter.entityType.head": "Item Type", + "search.filters.filter.entityType.head": "Tipo di item", + + // "search.filters.filter.entityType.placeholder": "Item Type", + "search.filters.filter.entityType.placeholder": "Tipo di item", + + // "search.filters.filter.entityType.label": "Search item type", + "search.filters.filter.entityType.label": "Tipo di item di ricerca", + + // "search.filters.filter.expand": "Expand filter", + "search.filters.filter.expand": "Espandi filtro", + + // "search.filters.filter.has_content_in_original_bundle.head": "Has files", + "search.filters.filter.has_content_in_original_bundle.head": "Ha file", + + // "search.filters.filter.itemtype.head": "Type", + "search.filters.filter.itemtype.head": "Tipo", + + // "search.filters.filter.itemtype.placeholder": "Type", + "search.filters.filter.itemtype.placeholder": "Tipo", + + // "search.filters.filter.itemtype.label": "Search type", + "search.filters.filter.itemtype.label": "Tipo di ricerca", + + // "search.filters.filter.jobTitle.head": "Job Title", + "search.filters.filter.jobTitle.head": "Titolo di lavoro", + + // "search.filters.filter.jobTitle.placeholder": "Job Title", + "search.filters.filter.jobTitle.placeholder": "Titolo di lavoro", + + // "search.filters.filter.jobTitle.label": "Search job title", + "search.filters.filter.jobTitle.label": "Cerca titolo di lavoro", + + // "search.filters.filter.knowsLanguage.head": "Known language", + "search.filters.filter.knowsLanguage.head": "Lingua nota", + + // "search.filters.filter.knowsLanguage.placeholder": "Known language", + "search.filters.filter.knowsLanguage.placeholder": "Lingua nota", + + // "search.filters.filter.knowsLanguage.label": "Search known language", + "search.filters.filter.knowsLanguage.label": "Cerca nella lingua nota", + + // "search.filters.filter.namedresourcetype.head": "Status", + "search.filters.filter.namedresourcetype.head": "Status", + + // "search.filters.filter.namedresourcetype.placeholder": "Status", + "search.filters.filter.namedresourcetype.placeholder": "Status", + + // "search.filters.filter.namedresourcetype.label": "Search status", + "search.filters.filter.namedresourcetype.label": "Status Ricerca", + + // "search.filters.filter.objectpeople.head": "People", + "search.filters.filter.objectpeople.head": "Ricercatori", + + // "search.filters.filter.objectpeople.placeholder": "People", + "search.filters.filter.objectpeople.placeholder": "Ricercatori", + + // "search.filters.filter.objectpeople.label": "Search people", + "search.filters.filter.objectpeople.label": "Cerca Ricercatori", + + // "search.filters.filter.organizationAddressCountry.head": "Country", + "search.filters.filter.organizationAddressCountry.head": "Paese", + + // "search.filters.filter.organizationAddressCountry.placeholder": "Country", + "search.filters.filter.organizationAddressCountry.placeholder": "Paese", + + // "search.filters.filter.organizationAddressCountry.label": "Search country", + "search.filters.filter.organizationAddressCountry.label": "Cerca paese", + + // "search.filters.filter.organizationAddressLocality.head": "City", + "search.filters.filter.organizationAddressLocality.head": "Città", + + // "search.filters.filter.organizationAddressLocality.placeholder": "City", + "search.filters.filter.organizationAddressLocality.placeholder": "Città", + + // "search.filters.filter.organizationAddressLocality.label": "Search city", + "search.filters.filter.organizationAddressLocality.label": "Cerca città", + + // "search.filters.filter.organizationFoundingDate.head": "Date Founded", + "search.filters.filter.organizationFoundingDate.head": "Data di fondazione", + + // "search.filters.filter.organizationFoundingDate.placeholder": "Date Founded", + "search.filters.filter.organizationFoundingDate.placeholder": "Data di fondazione", + + // "search.filters.filter.organizationFoundingDate.label": "Search date founded", + "search.filters.filter.organizationFoundingDate.label": "Data di ricerca fondata", + + // "search.filters.filter.scope.head": "Scope", + "search.filters.filter.scope.head": "Ambito", + + // "search.filters.filter.scope.placeholder": "Scope filter", + "search.filters.filter.scope.placeholder": "Filtro ambito", + + // "search.filters.filter.scope.label": "Search scope filter", + "search.filters.filter.scope.label": "Filtro ambito di ricerca", + + // "search.filters.filter.show-less": "Collapse", + "search.filters.filter.show-less": "Comprimi", + + // "search.filters.filter.show-more": "Show more", + "search.filters.filter.show-more": "Mostra altro", + + // "search.filters.filter.subject.head": "Subject", + "search.filters.filter.subject.head": "Oggetto", + + // "search.filters.filter.subject.placeholder": "Subject", + "search.filters.filter.subject.placeholder": "Oggetto", + + // "search.filters.filter.subject.label": "Search subject", + "search.filters.filter.subject.label": "Oggetto della ricerca", + + // "search.filters.filter.submitter.head": "Submitter", + "search.filters.filter.submitter.head": "Mittente", + + // "search.filters.filter.submitter.placeholder": "Submitter", + "search.filters.filter.submitter.placeholder": "Mittente", + + // "search.filters.filter.submitter.label": "Search submitter", + "search.filters.filter.submitter.label": "Mittente della ricerca", + + + + // "search.filters.entityType.JournalIssue": "Journal Issue", + "search.filters.entityType.JournalIssue": "Fascicolo Periodico", + + // "search.filters.entityType.JournalVolume": "Journal Volume", + "search.filters.entityType.JournalVolume": "Volume del Periodico", + + // "search.filters.entityType.OrgUnit": "Organizational Unit", + "search.filters.entityType.OrgUnit": "Struttura", + + // "search.filters.has_content_in_original_bundle.true": "Yes", + "search.filters.has_content_in_original_bundle.true": "Si", + + // "search.filters.has_content_in_original_bundle.false": "No", + "search.filters.has_content_in_original_bundle.false": "No", + + // "search.filters.discoverable.true": "No", + "search.filters.discoverable.true": "No", + + // "search.filters.discoverable.false": "Yes", + "search.filters.discoverable.false": "Si", + + // "search.filters.withdrawn.true": "Yes", + "search.filters.withdrawn.true": "Si", + + // "search.filters.withdrawn.false": "No", + "search.filters.withdrawn.false": "No", + + + // "search.filters.head": "Filters", + "search.filters.head": "Filtri", + + // "search.filters.reset": "Reset filters", + "search.filters.reset": "Ripristina filtri", + + // "search.filters.search.submit": "Submit", + "search.filters.search.submit": "Invia", + + + + // "search.form.search": "Search", + "search.form.search": "Cerca", + + // "search.form.search_dspace": "All repository", + "search.form.search_dspace": "Tutto il portale", + + // "search.form.scope.all": "All of DSpace", + "search.form.scope.all": "Tutto DSpace", + + + + // "search.results.head": "Search Results", + "search.results.head": "Risultati della ricerca", + + // "search.results.no-results": "Your search returned no results. Having trouble finding what you're looking for? Try putting", + "search.results.no-results": "La ricerca non ha prodotto alcun risultato. Hai problemi a trovare quello che cerchi? Prova a inserire", + + // "search.results.no-results-link": "quotes around it", + "search.results.no-results-link": "le virgolette", + + // "search.results.empty": "Your search returned no results.", + "search.results.empty": "La tua ricerca non ha prodotto risultati.", + + // "search.results.view-result": "View", + // TODO New key - Add a translation + "search.results.view-result": "View", + + // "search.results.response.500": "An error occurred during query execution, please try again later", + // TODO New key - Add a translation + "search.results.response.500": "An error occurred during query execution, please try again later", + + // "default.search.results.head": "Search Results", + "default.search.results.head": "Risultati della ricerca", + + // "default-relationships.search.results.head": "Search Results", + // TODO New key - Add a translation + "default-relationships.search.results.head": "Search Results", + + + // "search.sidebar.close": "Back to results", + "search.sidebar.close": "Ritorna ai risultati", + + // "search.sidebar.filters.title": "Filters", + "search.sidebar.filters.title": "Filtri", + + // "search.sidebar.open": "Search Tools", + "search.sidebar.open": "Strumenti per la ricerca", + + // "search.sidebar.results": "results", + "search.sidebar.results": "risultati", + + // "search.sidebar.settings.rpp": "Results per page", + "search.sidebar.settings.rpp": "Risultati per pagina", + + // "search.sidebar.settings.sort-by": "Sort By", + "search.sidebar.settings.sort-by": "Ordina per", + + // "search.sidebar.settings.title": "Settings", + "search.sidebar.settings.title": "Impostazioni", + + + + // "search.view-switch.show-detail": "Show detail", + "search.view-switch.show-detail": "Mostra dettagli", + + // "search.view-switch.show-grid": "Show as grid", + "search.view-switch.show-grid": "Visualizzazioni a griglia", + + // "search.view-switch.show-list": "Show as list", + "search.view-switch.show-list": "Visualizzazione a lista", + + + + // "sorting.ASC": "Ascending", + "sorting.ASC": "Ascendente", + + // "sorting.DESC": "Descending", + "sorting.DESC": "Discendente", + + // "sorting.dc.title.ASC": "Title Ascending", + "sorting.dc.title.ASC": "Titolo ascendente", + + // "sorting.dc.title.DESC": "Title Descending", + "sorting.dc.title.DESC": "Titolo decrescente", + + // "sorting.score.ASC": "Least Relevant", + "sorting.score.ASC": "Minor rilevanza", + + // "sorting.score.DESC": "Most Relevant", + "sorting.score.DESC": "Maggior rilevanza", + + // "sorting.dc.date.issued.ASC": "Date Issued Ascending", + "sorting.dc.date.issued.ASC": "Data di pubblicazione Ascendente", + + // "sorting.dc.date.issued.DESC": "Date Issued Descending", + "sorting.dc.date.issued.DESC": "Data di pubblicazione Discendente", + + // "sorting.dc.date.accessioned.ASC": "Accessioned Date Ascending", + "sorting.dc.date.accessioned.ASC": "Data di accesso Ascendente", + + // "sorting.dc.date.accessioned.DESC": "Accessioned Date Descending", + "sorting.dc.date.accessioned.DESC": "Data di accesso Discendente", + + // "sorting.lastModified.ASC": "Last modified Ascending", + "sorting.lastModified.ASC": "Ultima modifica Ascendente", + + // "sorting.lastModified.DESC": "Last modified Descending", + "sorting.lastModified.DESC": "Ultima modifica Discendente", + + + // "statistics.title": "Statistics", + "statistics.title": "Statistiche", + + // "statistics.header": "Statistics for {{ scope }}", + "statistics.header": "Statistiche per {{ scope }}", + + // "statistics.breadcrumbs": "Statistics", + "statistics.breadcrumbs": "Statistiche", + + // "statistics.page.no-data": "No data available", + "statistics.page.no-data": "Nessun dato disponibile", + + // "statistics.table.no-data": "No data available", + "statistics.table.no-data": "Nessun dato disponibile", + + // "statistics.table.title.TotalVisits": "Total visits", + // TODO New key - Add a translation + "statistics.table.title.TotalVisits": "Total visits", + + // "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", + // TODO New key - Add a translation + "statistics.table.title.TotalVisitsPerMonth": "Total visits per month", + + // "statistics.table.title.TotalDownloads": "File Visits", + // TODO New key - Add a translation + "statistics.table.title.TotalDownloads": "File Visits", + + // "statistics.table.title.TopCountries": "Top country views", + // TODO New key - Add a translation + "statistics.table.title.TopCountries": "Top country views", + + // "statistics.table.title.TopCities": "Top city views", + // TODO New key - Add a translation + "statistics.table.title.TopCities": "Top city views", + + // "statistics.table.header.views": "Views", + // TODO New key - Add a translation + "statistics.table.header.views": "Views", + + + + // "submission.edit.breadcrumbs": "Edit Submission", + "submission.edit.breadcrumbs": "Modifica immissione", + + // "submission.edit.title": "Edit Submission", + "submission.edit.title": "Modifica immissione", + + // "submission.general.cancel": "Cancel", + "submission.general.cancel": "Annulla", + + // "submission.general.cannot_submit": "You have not the privilege to make a new submission.", + "submission.general.cannot_submit": "Non hai i privilegi per fare una nuova immissione.", + + // "submission.general.deposit": "Deposit", + "submission.general.deposit": "Deposito", + + // "submission.general.discard.confirm.cancel": "Cancel", + "submission.general.discard.confirm.cancel": "Annulla", + + // "submission.general.discard.confirm.info": "This operation can't be undone. Are you sure?", + "submission.general.discard.confirm.info": "Questa operazione non può essere annullata. Sei sicuro?", + + // "submission.general.discard.confirm.submit": "Yes, I'm sure", + "submission.general.discard.confirm.submit": "Sì, sono sicuro", + + // "submission.general.discard.confirm.title": "Discard submission", + "submission.general.discard.confirm.title": "Elimina l'invio", + + // "submission.general.discard.submit": "Discard", + "submission.general.discard.submit": "Scarta", + + // "submission.general.info.saved": "Saved", + "submission.general.info.saved": "Salvato", + + // "submission.general.info.pending-changes": "Unsaved changes", + "submission.general.info.pending-changes": "Modifiche non salvate", + + // "submission.general.save": "Save", + "submission.general.save": "Salva", + + // "submission.general.save-later": "Save for later", + "submission.general.save-later": "Salva per dopo", + + + // "submission.import-external.page.title": "Import metadata from an external source", + "submission.import-external.page.title": "Importare metadati da un'origine esterna", + + // "submission.import-external.title": "Import metadata from an external source", + "submission.import-external.title": "Importare metadati da un'origine esterna", + + // "submission.import-external.title.Journal": "Import a journal from an external source", + "submission.import-external.title.Journal": "Importare un journal da un'origine esterna", + + // "submission.import-external.title.JournalIssue": "Import a journal issue from an external source", + "submission.import-external.title.JournalIssue": "Importare un fascicolo di periodico da una fonte esterna", + + // "submission.import-external.title.JournalVolume": "Import a journal volume from an external source", + "submission.import-external.title.JournalVolume": "Importare un volume di periodico da un'origine esterna", + + // "submission.import-external.title.OrgUnit": "Import a publisher from an external source", + "submission.import-external.title.OrgUnit": "Importare un editore da una fonte esterna", + + // "submission.import-external.title.Person": "Import a person from an external source", + "submission.import-external.title.Person": "Importare una persona da una fonte esterna", + + // "submission.import-external.title.Project": "Import a project from an external source", + "submission.import-external.title.Project": "Importare un progetto da una fonte esterna", + + // "submission.import-external.title.Publication": "Import a publication from an external source", + "submission.import-external.title.Publication": "Importare una pubblicazione da una fonte esterna", + + // "submission.import-external.title.none": "Import metadata from an external source", + "submission.import-external.title.none": "Importare metadati da un'origine esterna", + + // "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to DSpace.", + "submission.import-external.page.hint": "Immettere una query sopra per trovare item dal Web da importare in DSpace.", + + // "submission.import-external.back-to-my-dspace": "Back to MyDSpace", + "submission.import-external.back-to-my-dspace": "Torna a MyDSpace", + + // "submission.import-external.search.placeholder": "Search the external source", + "submission.import-external.search.placeholder": "Cerca nell'origine esterna", + + // "submission.import-external.search.button": "Search", + "submission.import-external.search.button": "Cerca", + + // "submission.import-external.search.button.hint": "Write some words to search", + "submission.import-external.search.button.hint": "Scrivi alcune parole per cercare", + + // "submission.import-external.search.source.hint": "Pick an external source", + "submission.import-external.search.source.hint": "Scegli un'origine esterna", + + // "submission.import-external.source.arxiv": "arXiv", + "submission.import-external.source.arxiv": "arXiv", + + // "submission.import-external.source.ads": "NASA/ADS", + "submission.import-external.source.ads": "NASA/ADS", + + // "submission.import-external.source.cinii": "CiNii", + "submission.import-external.source.cinii": "CiNii", + + // "submission.import-external.source.crossref": "CrossRef", + "submission.import-external.source.crossref": "CrossRef", + + // "submission.import-external.source.scielo": "SciELO", + "submission.import-external.source.scielo": "SciELO", + + // "submission.import-external.source.scopus": "Scopus", + "submission.import-external.source.scopus": "Scopus", + + // "submission.import-external.source.vufind": "VuFind", + "submission.import-external.source.vufind": "VuFind", + + // "submission.import-external.source.wos": "Web Of Science", + "submission.import-external.source.wos": "Web Of Science", + + // "submission.import-external.source.orcidWorks": "ORCID", + "submission.import-external.source.orcidWorks": "ORCID", + + // "submission.import-external.source.epo": "European Patent Office (EPO)", + "submission.import-external.source.epo": "Ufficio europeo dei brevetti (UEB)", + + // "submission.import-external.source.loading": "Loading ...", + "submission.import-external.source.loading": "Caricamento ...", + + // "submission.import-external.source.sherpaJournal": "SHERPA Journals", + "submission.import-external.source.sherpaJournal": "SHERPA Journals", + + // "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + "submission.import-external.source.sherpaJournalIssn": "SHERPA Journals by ISSN", + + // "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", + "submission.import-external.source.sherpaPublisher": "SHERPA Publishers", + + // "submission.import-external.source.openAIREFunding": "Funding OpenAIRE API", + "submission.import-external.source.openAIREFunding": "Finanziamento dell'API OpenAIRE", + + // "submission.import-external.source.orcid": "ORCID", + "submission.import-external.source.orcid": "ORCID", + + // "submission.import-external.source.pubmed": "Pubmed", + "submission.import-external.source.pubmed": "Pubmed", + + // "submission.import-external.source.pubmedeu": "Pubmed Europe", + "submission.import-external.source.pubmedeu": "Pubmed Europe", + + // "submission.import-external.source.lcname": "Library of Congress Names", + "submission.import-external.source.lcname": "Nomi della Biblioteca del Congresso", + + // "submission.import-external.preview.title": "Item Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title": "Item Preview", + + // "submission.import-external.preview.title.Publication": "Publication Preview", + "submission.import-external.preview.title.Publication": "Anteprima pubblicazione", + + // "submission.import-external.preview.title.none": "Item Preview", + // TODO New key - Add a translation + "submission.import-external.preview.title.none": "Item Preview", + + // "submission.import-external.preview.title.Journal": "Journal Preview", + "submission.import-external.preview.title.Journal": "Anteprima journal", + + // "submission.import-external.preview.title.OrgUnit": "Organizational Unit Preview", + // TODO Source message changed - Revise the translation + "submission.import-external.preview.title.OrgUnit": "Anteprima editore", + + // "submission.import-external.preview.title.Person": "Person Preview", + "submission.import-external.preview.title.Person": "Anteprima persona", + + // "submission.import-external.preview.title.Project": "Project Preview", + "submission.import-external.preview.title.Project": "Anteprima progetto", + + // "submission.import-external.preview.subtitle": "The metadata below was imported from an external source. It will be pre-filled when you start the submission.", + "submission.import-external.preview.subtitle": "I metadati riportati di seguito sono stati importati da un'origine esterna. Sarà precompilato quando inizierà l'immissione.", + + // "submission.import-external.preview.button.import": "Start submission", + "submission.import-external.preview.button.import": "Avvia immissione", + + // "submission.import-external.preview.error.import.title": "Submission error", + "submission.import-external.preview.error.import.title": "Errore di immissione", + + // "submission.import-external.preview.error.import.body": "An error occurs during the external source entry import process.", + "submission.import-external.preview.error.import.body": "Si verifica un errore durante il processo di importazione della voce di origine esterna.", + + // "submission.sections.describe.relationship-lookup.close": "Close", + "submission.sections.describe.relationship-lookup.close": "Chiudi", + + // "submission.sections.describe.relationship-lookup.external-source.added": "Successfully added local entry to the selection", + "submission.sections.describe.relationship-lookup.external-source.added": "Aggiunta con successo della voce locale alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Import remote author", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isAuthorOfPublication": "Importa autore remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Import remote journal", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal": "Importa Periodico remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Import remote journal issue", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Issue": "Importare fascicolo periodico remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Import remote journal volume", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Journal Volume": "Importa volume periodico remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.isProjectOfPublication": "Progetto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.none": "Import remote item", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Import remote event", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Event": "Importa evento remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Import remote product", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Product": "Importa prodotto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Import remote equipment", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Equipment": "Importare apparecchiature remote", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Import remote organizational unit", + // TODO Source message changed - Revise the translation + "submission.sections.describe.relationship-lookup.external-source.import-button-title.OrgUnit": "Importa editore remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Import remote fund", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Funding": "Importa fondo remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Import remote person", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Person": "Importa persona remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Import remote patent", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Patent": "Importa brevetto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Import remote project", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Project": "Importa progetto remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Import remote publication", + "submission.sections.describe.relationship-lookup.external-source.import-button-title.Publication": "Importa pubblicazione remota", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "New Entity Added!", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.added.new-entity": "Nuova entità aggiunta!", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Project", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isProjectOfPublication.title": "Progetto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.openAIREFunding": "Finanziamento dell'API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Import Remote Author", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.title": "Importa autore remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Successfully added local author to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.local-entity": "Aggiunto con successo autore locale alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Successfully imported and added external author to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.isAuthorOfPublication.added.new-entity": "Importato e aggiunto con successo autore esterno alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Authority", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority": "Autorità", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Import as a new local authority entry", + "submission.sections.describe.relationship-lookup.external-source.import-modal.authority.new": "Importa come nuova voce dell'autorità locale", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Cancel", + "submission.sections.describe.relationship-lookup.external-source.import-modal.cancel": "Annulla", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Select a collection to import new entries to", + "submission.sections.describe.relationship-lookup.external-source.import-modal.collection": "Selezionare una collezione in cui importare nuove voci", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entities", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities": "Entità", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Import as a new local entity", + "submission.sections.describe.relationship-lookup.external-source.import-modal.entities.new": "Importa come nuova entità locale", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importing from LC Name", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.lcname": "Importazione da LC Name", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importing from ORCID", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.orcid": "Importazione da ORCID", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importing from Sherpa Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaJournal": "Importazione da Sherpa Journal", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importing from Sherpa Publisher", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.sherpaPublisher": "Importazione da Sherpa Publisher", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importing from PubMed", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.pubmed": "Importazione da PubMed", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importing from arXiv", + "submission.sections.describe.relationship-lookup.external-source.import-modal.head.arxiv": "Importazione da arXiv", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Import", + "submission.sections.describe.relationship-lookup.external-source.import-modal.import": "Importa", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Import Remote Journal", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.title": "Importa Periodico remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Successfully added local journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.local-entity": "Aggiunta con successo del journal locale alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Successfully imported and added external journal to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal.added.new-entity": "Importato e aggiunto con successo journal esterno alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Import Remote Journal Issue", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.title": "Importa Fascicolo Periodico remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Successfully added local journal issue to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.local-entity": "Aggiunto con successo il numero del periodico locale alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Successfully imported and added external journal issue to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Issue.added.new-entity": "Importato e aggiunto con successo il numero del journal esterno alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Import Remote Journal Volume", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.title": "Importa volume di giornale remoto", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Successfully added local journal volume to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.local-entity": "Aggiunto con successo volume del journal locale alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Successfully imported and added external journal volume to the selection", + "submission.sections.describe.relationship-lookup.external-source.import-modal.Journal Volume.added.new-entity": "Importato e aggiunto con successo volume di journal esterno alla selezione", + + // "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.external-source.import-modal.select": "Select a local match:", + + // "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deselect all", + "submission.sections.describe.relationship-lookup.search-tab.deselect-all": "Deseleziona tutto", + + // "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deselect page", + "submission.sections.describe.relationship-lookup.search-tab.deselect-page": "Deseleziona pagina", + + // "submission.sections.describe.relationship-lookup.search-tab.loading": "Loading...", + "submission.sections.describe.relationship-lookup.search-tab.loading": "Caricamento...", + + // "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Search query", + "submission.sections.describe.relationship-lookup.search-tab.placeholder": "Query di ricerca", + + // "submission.sections.describe.relationship-lookup.search-tab.search": "Go", + "submission.sections.describe.relationship-lookup.search-tab.search": "Vai", + + // "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.search-tab.search-form.placeholder": "Cerca...", + + // "submission.sections.describe.relationship-lookup.search-tab.select-all": "Select all", + "submission.sections.describe.relationship-lookup.search-tab.select-all": "Seleziona tutto", + + // "submission.sections.describe.relationship-lookup.search-tab.select-page": "Select page", + "submission.sections.describe.relationship-lookup.search-tab.select-page": "Seleziona pagina", + + // "submission.sections.describe.relationship-lookup.selected": "Selected {{ size }} items", + "submission.sections.describe.relationship-lookup.selected": "Selected {{ size }} items", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Local Authors ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isAuthorOfPublication": "Autori locali ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalOfPublication": "Local Journals ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Local Projects ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Project": "Progetti locali ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Publication": "Local Publications ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Local Authors ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Person": "Autori locali ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Local Organizational Units ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.OrgUnit": "Unità organizzative locali ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Local Data Packages ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataPackage": "Pacchetti di dati locali ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "Local Data Files ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.DataFile": "File di dati locali ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.Journal": "Local Journals ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalIssueOfPublication": "Local Journal Issues ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalIssue": "Local Journal Issues ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isJournalVolumeOfPublication": "Local Journal Volumes ({{ count }})", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.JournalVolume": "Local Journal Volumes ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaJournal": "Sherpa Journals ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.sherpaPublisher": "Sherpa Publishers ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.orcid": "ORCID ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "LC Names ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.lcname": "Nomi LC ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.pubmed": "PubMed ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.arxiv": "arXiv ({{ count }})", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Search for Funding Agencies", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfPublication": "Ricerca di agenzie di finanziamento", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Search for Funding", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingOfPublication": "Cerca finanziamenti", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Search for Organizational Units", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isChildOrgUnitOf": "Ricerca di unità organizzative", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.openAIREFunding": "Finanziamento dell'API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isProjectOfPublication": "Progetti", + + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Finanziatore del progetto", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", + "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Finanziamento dell'API OpenAIRE", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Project", + "submission.sections.describe.relationship-lookup.selection-tab.title.isProjectOfPublication": "Progetti", + + // "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Projects", + "submission.sections.describe.relationship-lookup.title.isProjectOfPublication": "Progetti", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Funder of the Project", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfProject": "Finanziatore del Progetto", + + + + + // "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Search...", + "submission.sections.describe.relationship-lookup.selection-tab.search-form.placeholder": "Cerca...", + + // "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Current Selection ({{ count }})", + "submission.sections.describe.relationship-lookup.selection-tab.tab-title": "Selezione corrente ({{ count }})", + + // "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.isJournalIssueOfPublication": "Fascicolo Periodico", + // "submission.sections.describe.relationship-lookup.title.JournalIssue": "Journal Issues", + "submission.sections.describe.relationship-lookup.title.JournalIssue": "Fascicolo Periodico", + + // "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.isJournalVolumeOfPublication": "Volume Periodico", + // "submission.sections.describe.relationship-lookup.title.JournalVolume": "Journal Volumes", + "submission.sections.describe.relationship-lookup.title.JournalVolume": "Volume Periodico", + + // "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Journals", + "submission.sections.describe.relationship-lookup.title.isJournalOfPublication": "Periodico", + + // "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Authors", + "submission.sections.describe.relationship-lookup.title.isAuthorOfPublication": "Autori", + + // "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Funding Agency", + "submission.sections.describe.relationship-lookup.title.isFundingAgencyOfPublication": "Agenzia di finanziamento", + // "submission.sections.describe.relationship-lookup.title.Project": "Projects", + "submission.sections.describe.relationship-lookup.title.Project": "Progetti", + + // "submission.sections.describe.relationship-lookup.title.Publication": "Publications", + "submission.sections.describe.relationship-lookup.title.Publication": "Pubblicazioni", + + // "submission.sections.describe.relationship-lookup.title.Person": "Authors", + "submission.sections.describe.relationship-lookup.title.Person": "Autori", + + // "submission.sections.describe.relationship-lookup.title.OrgUnit": "Organizational Units", + "submission.sections.describe.relationship-lookup.title.OrgUnit": "Unità organizzative", + + // "submission.sections.describe.relationship-lookup.title.DataPackage": "Data Packages", + "submission.sections.describe.relationship-lookup.title.DataPackage": "Pacchetti di dati", + + // "submission.sections.describe.relationship-lookup.title.DataFile": "Data Files", + "submission.sections.describe.relationship-lookup.title.DataFile": "File di dati", + + // "submission.sections.describe.relationship-lookup.title.Funding Agency": "Funding Agency", + "submission.sections.describe.relationship-lookup.title.Funding Agency": "Agenzia di finanziamento", + + // "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Funding", + "submission.sections.describe.relationship-lookup.title.isFundingOfPublication": "Finanziatore", + + // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", + "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Unità organizzativa padre", + + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", + "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", + + // "submission.sections.describe.relationship-lookup.selection-tab.settings": "Settings", + "submission.sections.describe.relationship-lookup.selection-tab.settings": "Impostazioni", + + // "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "Your selection is currently empty.", + "submission.sections.describe.relationship-lookup.selection-tab.no-selection": "La selezione è attualmente vuota.", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Selected Authors", + "submission.sections.describe.relationship-lookup.selection-tab.title.isAuthorOfPublication": "Autori selezionati", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Selected Journals", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalOfPublication": "Riviste selezionate", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalVolumeOfPublication": "Volume del Periodico selezionato", + // "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Selected Projects", + "submission.sections.describe.relationship-lookup.selection-tab.title.Project": "Progetti selezionati", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Selected Publications", + "submission.sections.describe.relationship-lookup.selection-tab.title.Publication": "Pubblicazioni selezionate", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Selected Authors", + "submission.sections.describe.relationship-lookup.selection-tab.title.Person": "Autori selezionati", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Selected Organizational Units", + "submission.sections.describe.relationship-lookup.selection-tab.title.OrgUnit": "Unità organizzative selezionate", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Selected Data Packages", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataPackage": "Pacchetti di dati selezionati", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "Selected Data Files", + "submission.sections.describe.relationship-lookup.selection-tab.title.DataFile": "File di dati selezionati", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Selected Journals", + "submission.sections.describe.relationship-lookup.selection-tab.title.Journal": "Riviste selezionate", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Selected Issue", + "submission.sections.describe.relationship-lookup.selection-tab.title.isJournalIssueOfPublication": "Fascicolo selezionato", + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Selected Journal Volume", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalVolume": "Volume journal selezionato", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Selected Funding Agency", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingAgencyOfPublication": "Agenzia di finanziamento selezionata", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Selected Funding", + "submission.sections.describe.relationship-lookup.selection-tab.title.isFundingOfPublication": "Finanziamento selezionato", + // "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Selected Issue", + "submission.sections.describe.relationship-lookup.selection-tab.title.JournalIssue": "Fascicolo selezionato", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Selected Organizational Unit", + "submission.sections.describe.relationship-lookup.selection-tab.title.isChildOrgUnitOf": "Unità organizzativa selezionata", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaJournal": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.sherpaPublisher": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcid": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.orcidv2": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.lcname": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.pubmed": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.arxiv": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.crossref": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.epo": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scopus": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.scielo": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title.wos": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", + "submission.sections.describe.relationship-lookup.selection-tab.title": "Risultati della ricerca", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", + "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Desideri salvare \"{{ value }}\" come variante del nome per questa persona in modo che tu e altri possiate riutilizzarlo per immissioni future? Se non lo fai, puoi comunque usarlo per questa immissione.", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", + "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Salva una nuova variante del nome", + + // "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Use only for this submission", + "submission.sections.describe.relationship-lookup.name-variant.notification.decline": "Utilizzare solo per questa immissione", + + // "submission.sections.ccLicense.type": "License Type", + "submission.sections.ccLicense.type": "Tipo di licenza", + + // "submission.sections.ccLicense.select": "Select a license type…", + "submission.sections.ccLicense.select": "Selezionare un tipo di licenza...", + + // "submission.sections.ccLicense.change": "Change your license type…", + "submission.sections.ccLicense.change": "Modificare il tipo di licenza...", + + // "submission.sections.ccLicense.none": "No licenses available", + "submission.sections.ccLicense.none": "Nessuna licenza disponibile", + + // "submission.sections.ccLicense.option.select": "Select an option…", + "submission.sections.ccLicense.option.select": "Seleziona un'opzione...", + + // "submission.sections.ccLicense.link": "You’ve selected the following license:", + // TODO New key - Add a translation + "submission.sections.ccLicense.link": "You’ve selected the following license:", + + // "submission.sections.ccLicense.confirmation": "I grant the license above", + "submission.sections.ccLicense.confirmation": "Concedo la licenza di cui sopra", + + // "submission.sections.general.add-more": "Add more", + "submission.sections.general.add-more": "Aggiungi altro", + + // "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + // TODO New key - Add a translation + "submission.sections.general.cannot_deposit": "Deposit cannot be completed due to errors in the form.
    Please fill out all required fields to complete the deposit.", + + // "submission.sections.general.collection": "Collection", + "submission.sections.general.collection": "collezione", + + // "submission.sections.general.deposit_error_notice": "There was an issue when submitting the item, please try again later.", + "submission.sections.general.deposit_error_notice": "Si è verificato un problema durante l'immissione dell'articolo, riprova più tardi.", + + // "submission.sections.general.deposit_success_notice": "Submission deposited successfully.", + "submission.sections.general.deposit_success_notice": "Immissione depositata con successo.", + + // "submission.sections.general.discard_error_notice": "There was an issue when discarding the item, please try again later.", + "submission.sections.general.discard_error_notice": "Si è verificato un problema durante l'eliminazione dell'item, riprova più tardi.", + + // "submission.sections.general.discard_success_notice": "Submission discarded successfully.", + "submission.sections.general.discard_success_notice": "Immissione scartata correttamente.", + + // "submission.sections.general.metadata-extracted": "New metadata have been extracted and added to the {{sectionId}} section.", + "submission.sections.general.metadata-extracted": "Nuovi metadati sono stati estratti e aggiunti alla sezione {{sectionId}}.", + + // "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} section has been added to submission.", + "submission.sections.general.metadata-extracted-new-section": "New {{sectionId}} sezione è stata aggiunta all'invio.", + + // "submission.sections.general.no-collection": "No collection found", + "submission.sections.general.no-collection": "Nessuna collezione trovata", + + // "submission.sections.general.no-sections": "No options available", + "submission.sections.general.no-sections": "Nessuna opzione disponibile", + + // "submission.sections.general.save_error_notice": "There was an issue when saving the item, please try again later.", + // TODO Source message changed - Revise the translation + "submission.sections.general.save_error_notice": "Si è verificato un errore imprevisto durante il salvataggio dell'item. Aggiorna la pagina e riprova. Dopo aver aggiornato le modifiche non salvate potrebbero andare perse.", + + // "submission.sections.general.save_success_notice": "Submission saved successfully.", + "submission.sections.general.save_success_notice": "Immissione salvata correttamente.", + + // "submission.sections.general.search-collection": "Search for a collection", + "submission.sections.general.search-collection": "Cerca una collezione", + + // "submission.sections.general.sections_not_valid": "There are incomplete sections.", + "submission.sections.general.sections_not_valid": "Ci sono sezioni incomplete.", + + + + // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", + "submission.sections.submit.progressbar.accessCondition": "Condizioni di accesso all'item", + + // "submission.sections.submit.progressbar.CClicense": "Creative commons license", + "submission.sections.submit.progressbar.CClicense": "Licenza Creative commons", + + // "submission.sections.submit.progressbar.describe.recycle": "Recycle", + "submission.sections.submit.progressbar.describe.recycle": "Ricicla", + + // "submission.sections.submit.progressbar.describe.stepcustom": "Describe", + "submission.sections.submit.progressbar.describe.stepcustom": "Descrivi", + + // "submission.sections.submit.progressbar.describe.stepone": "Describe", + "submission.sections.submit.progressbar.describe.stepone": "Descrivi", + + // "submission.sections.submit.progressbar.describe.steptwo": "Describe", + "submission.sections.submit.progressbar.describe.steptwo": "Descrivi", + + // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", + "submission.sections.submit.progressbar.detect-duplicate": "Potenziali duplicati", + + // "submission.sections.submit.progressbar.license": "Deposit license", + "submission.sections.submit.progressbar.license": "Licenza di deposito", + + // "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.sherpapolicy": "Sherpa policies", + + // "submission.sections.submit.progressbar.upload": "Upload files", + "submission.sections.submit.progressbar.upload": "Carica file", + + // "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.sherpaPolicies": "Publisher open access policy information", + + + // "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + // TODO New key - Add a translation + "submission.sections.sherpa-policy.title-empty": "No publisher policy information available. If your work has an associated ISSN, please enter it above to see any related publisher open access policies.", + + // "submission.sections.status.errors.title": "Errors", + "submission.sections.status.errors.title": "Errori", + + // "submission.sections.status.valid.title": "Valid", + "submission.sections.status.valid.title": "Valido", + + // "submission.sections.status.warnings.title": "Warnings", + "submission.sections.status.warnings.title": "Avvertenze", + + // "submission.sections.status.errors.aria": "has errors", + "submission.sections.status.errors.aria": "presenta errori", + + // "submission.sections.status.valid.aria": "is valid", + "submission.sections.status.valid.aria": "è valido", + + // "submission.sections.status.warnings.aria": "has warnings", + "submission.sections.status.warnings.aria": "ha avvisi", + + // "submission.sections.status.info.title": "Additional Information", + // TODO New key - Add a translation + "submission.sections.status.info.title": "Additional Information", + + // "submission.sections.status.info.aria": "Additional Information", + // TODO New key - Add a translation + "submission.sections.status.info.aria": "Additional Information", + + // "submission.sections.toggle.open": "Open section", + "submission.sections.toggle.open": "Apri sezione", + + // "submission.sections.toggle.close": "Close section", + "submission.sections.toggle.close": "Chiudi sezione", + + // "submission.sections.toggle.aria.open": "Expand {{sectionHeader}} section", + "submission.sections.toggle.aria.open": "Espandi la sezione {{sectionHeader}}", + + // "submission.sections.toggle.aria.close": "Collapse {{sectionHeader}} section", + "submission.sections.toggle.aria.close": "Comprimi la sezione {{sectionHeader}}", + + // "submission.sections.upload.delete.confirm.cancel": "Cancel", + "submission.sections.upload.delete.confirm.cancel": "Annulla", + + // "submission.sections.upload.delete.confirm.info": "This operation can't be undone. Are you sure?", + "submission.sections.upload.delete.confirm.info": "Questa operazione non può essere annullata. Sei sicuro?", + + // "submission.sections.upload.delete.confirm.submit": "Yes, I'm sure", + "submission.sections.upload.delete.confirm.submit": "Sì, ne sono sicuro", + + // "submission.sections.upload.delete.confirm.title": "Delete bitstream", + "submission.sections.upload.delete.confirm.title": "Elimina bitstream", + + // "submission.sections.upload.delete.submit": "Delete", + "submission.sections.upload.delete.submit": "Elimina", + + // "submission.sections.upload.download.title": "Download bitstream", + "submission.sections.upload.download.title": "Scarica bitstream", + + // "submission.sections.upload.drop-message": "Drop files to attach them to the item", + "submission.sections.upload.drop-message": "Rilascia i file per allegarli all'item", + + // "submission.sections.upload.edit.title": "Edit bitstream", + "submission.sections.upload.edit.title": "Modifica bitstream", + + // "submission.sections.upload.form.access-condition-label": "Access condition type", + "submission.sections.upload.form.access-condition-label": "Tipo di condizione di accesso", + + // "submission.sections.upload.form.access-condition-hint": "Select an access condition to apply on the bitstream once the item is deposited", + "submission.sections.upload.form.access-condition-hint": "Selezionare una condizione di accesso da applicare sul bitstream una volta depositato l'articolo", + + // "submission.sections.upload.form.date-required": "Date is required.", + "submission.sections.upload.form.date-required": "Data obbligatoria.", + + // "submission.sections.upload.form.date-required-from": "Grant access from date is required.", + "submission.sections.upload.form.date-required-from": "È richiesto concedere l'accesso dalla data.", + + // "submission.sections.upload.form.date-required-until": "Grant access until date is required.", + "submission.sections.upload.form.date-required-until": "Concedi l'accesso fino a quando la data è richiesta.", + + // "submission.sections.upload.form.from-label": "Grant access from", + "submission.sections.upload.form.from-label": "Concedere l'accesso da", + + // "submission.sections.upload.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.upload.form.from-hint": "Selezionare la data a partire dalla quale viene applicata la relativa condizione di accesso", + + // "submission.sections.upload.form.from-placeholder": "From", + "submission.sections.upload.form.from-placeholder": "Da", + + // "submission.sections.upload.form.group-label": "Group", + "submission.sections.upload.form.group-label": "Gruppo", + + // "submission.sections.upload.form.group-required": "Group is required.", + "submission.sections.upload.form.group-required": "Il gruppo è obbligatorio.", + + // "submission.sections.upload.form.until-label": "Grant access until", + "submission.sections.upload.form.until-label": "Concedi l'accesso fino a", + + // "submission.sections.upload.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.upload.form.until-hint": "Selezionare la data fino alla quale viene applicata la relativa condizione di accesso", + + // "submission.sections.upload.form.until-placeholder": "Until", + "submission.sections.upload.form.until-placeholder": "Fino a quando", + + // "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", + // TODO New key - Add a translation + "submission.sections.upload.header.policy.default.nolist": "Uploaded files in the {{collectionName}} collection will be accessible according to the following group(s):", + + // "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", + // TODO New key - Add a translation + "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", + + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + "submission.sections.upload.info": "Qui troverai tutti i file attualmente presenti nell'articolo. È possibile aggiornare i metadati dei file e le condizioni di accesso o upload di file aggiuntivi semplicemente trascinandoli e rilasciandoli ovunque nella pagina", + + // "submission.sections.upload.no-entry": "No", + "submission.sections.upload.no-entry": "No", + + // "submission.sections.upload.no-file-uploaded": "No file uploaded yet.", + "submission.sections.upload.no-file-uploaded": "Nessun file ancora caricato.", + + // "submission.sections.upload.save-metadata": "Save metadata", + "submission.sections.upload.save-metadata": "Salva metadati", + + // "submission.sections.upload.undo": "Cancel", + "submission.sections.upload.undo": "Annulla", + + // "submission.sections.upload.upload-failed": "Upload failed", + "submission.sections.upload.upload-failed": "Caricamento non riuscito", + + // "submission.sections.upload.upload-successful": "Upload successful", + "submission.sections.upload.upload-successful": "Caricamento riuscito", + + // "submission.sections.accesses.form.discoverable-description": "When checked, this item will be discoverable in search/browse. When unchecked, the item will only be available via a direct link and will never appear in search/browse.", + "submission.sections.accesses.form.discoverable-description": "Una volta selezionato, questo item sarà individuabile nella ricerca/navigazione. Se deselezionato, l'item sarà disponibile solo tramite un collegamento diretto e non apparirà mai nella ricerca / navigazione.", + + // "submission.sections.accesses.form.discoverable-label": "Discoverable", + "submission.sections.accesses.form.discoverable-label": "Individuabile", + + // "submission.sections.accesses.form.access-condition-label": "Access condition type", + "submission.sections.accesses.form.access-condition-label": "Tipo di condizione di accesso", + + // "submission.sections.accesses.form.access-condition-hint": "Select an access condition to apply on the item once it is deposited", + "submission.sections.accesses.form.access-condition-hint": "Selezionare una condizione di accesso da applicare all'articolo una volta depositato", + + // "submission.sections.accesses.form.date-required": "Date is required.", + "submission.sections.accesses.form.date-required": "Data obbligatoria.", + + // "submission.sections.accesses.form.date-required-from": "Grant access from date is required.", + "submission.sections.accesses.form.date-required-from": "Concedere l'accesso dalla data è obbligatorio.", + + // "submission.sections.accesses.form.date-required-until": "Grant access until date is required.", + "submission.sections.accesses.form.date-required-until": "Concedi l'accesso fino a quando la data è richiesta.", + + // "submission.sections.accesses.form.from-label": "Grant access from", + "submission.sections.accesses.form.from-label": "Concedere l'accesso da", + + // "submission.sections.accesses.form.from-hint": "Select the date from which the related access condition is applied", + "submission.sections.accesses.form.from-hint": "Selezionare la data a partire dalla quale viene applicata la relativa condizione di accesso", + + // "submission.sections.accesses.form.from-placeholder": "From", + "submission.sections.accesses.form.from-placeholder": "Da", + + // "submission.sections.accesses.form.group-label": "Group", + "submission.sections.accesses.form.group-label": "Gruppo", + + // "submission.sections.accesses.form.group-required": "Group is required.", + "submission.sections.accesses.form.group-required": "Il gruppo è obbligatorio.", + + // "submission.sections.accesses.form.until-label": "Grant access until", + "submission.sections.accesses.form.until-label": "Concedi l'accesso fino a", + + // "submission.sections.accesses.form.until-hint": "Select the date until which the related access condition is applied", + "submission.sections.accesses.form.until-hint": "Selezionare la data fino alla quale viene applicata la relativa condizione di accesso", + + // "submission.sections.accesses.form.until-placeholder": "Until", + "submission.sections.accesses.form.until-placeholder": "Fino a quando", + + // "submission.sections.license.granted-label": "I confirm the license above", + // TODO New key - Add a translation + "submission.sections.license.granted-label": "I confirm the license above", + + // "submission.sections.license.required": "You must accept the license", + // TODO New key - Add a translation + "submission.sections.license.required": "You must accept the license", + + // "submission.sections.license.notgranted": "You must accept the license", + // TODO New key - Add a translation + "submission.sections.license.notgranted": "You must accept the license", + + + // "submission.sections.sherpa.publication.information": "Publication information", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information": "Publication information", + + // "submission.sections.sherpa.publication.information.title": "Title", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.title": "Title", + + // "submission.sections.sherpa.publication.information.issns": "ISSNs", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.issns": "ISSNs", + + // "submission.sections.sherpa.publication.information.url": "URL", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.url": "URL", + + // "submission.sections.sherpa.publication.information.publishers": "Publisher", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.publishers": "Publisher", + + // "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.romeoPub": "Romeo Pub", + + // "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + // TODO New key - Add a translation + "submission.sections.sherpa.publication.information.zetoPub": "Zeto Pub", + + // "submission.sections.sherpa.publisher.policy": "Publisher Policy", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy": "Publisher Policy", + + // "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.description": "The below information was found via Sherpa Romeo. Based on the policies of your publisher, it provides advice regarding whether an embargo may be necessary and/or which files you are allowed to upload. If you have questions, please contact your site administrator via the feedback form in the footer.", + + // "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.openaccess": "Open Access pathways permitted by this journal's policy are listed below by article version. Click on a pathway for a more detailed view", + + // "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.more.information": "For more information, please see the following links:", + + // "submission.sections.sherpa.publisher.policy.version": "Version", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.version": "Version", + + // "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.embargo": "Embargo", + + // "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.noembargo": "No Embargo", + + // "submission.sections.sherpa.publisher.policy.nolocation": "None", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.nolocation": "None", + + // "submission.sections.sherpa.publisher.policy.license": "License", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.license": "License", + + // "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.prerequisites": "Prerequisites", + + // "submission.sections.sherpa.publisher.policy.location": "Location", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.location": "Location", + + // "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.conditions": "Conditions", + + // "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + // TODO New key - Add a translation + "submission.sections.sherpa.publisher.policy.refresh": "Refresh", + + // "submission.sections.sherpa.record.information": "Record Information", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information": "Record Information", + + // "submission.sections.sherpa.record.information.id": "ID", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.id": "ID", + + // "submission.sections.sherpa.record.information.date.created": "Date Created", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.date.created": "Date Created", + + // "submission.sections.sherpa.record.information.date.modified": "Last Modified", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.date.modified": "Last Modified", + + // "submission.sections.sherpa.record.information.uri": "URI", + // TODO New key - Add a translation + "submission.sections.sherpa.record.information.uri": "URI", + + // "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + // TODO New key - Add a translation + "submission.sections.sherpa.error.message": "There was an error retrieving sherpa informations", + + + + // "submission.submit.breadcrumbs": "New submission", + "submission.submit.breadcrumbs": "Nuova immissione", + + // "submission.submit.title": "New submission", + "submission.submit.title": "Nuova immissione", + + + + // "submission.workflow.generic.delete": "Delete", + "submission.workflow.generic.delete": "Elimina", + + // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", + "submission.workflow.generic.delete-help": "Se si desidera eliminare questo item, selezionare \"Elimina\". Ti verrà quindi chiesto di confermarlo.", + + // "submission.workflow.generic.edit": "Edit", + "submission.workflow.generic.edit": "Modifica", + + // "submission.workflow.generic.edit-help": "Select this option to change the item's metadata.", + "submission.workflow.generic.edit-help": "Selezionare questa opzione per modificare i metadati dell'item.", + + // "submission.workflow.generic.view": "View", + "submission.workflow.generic.view": "Visualizza", + + // "submission.workflow.generic.view-help": "Select this option to view the item's metadata.", + "submission.workflow.generic.view-help": "Selezionare questa opzione per visualizzare i metadati dell'item.", + + + + // "submission.workflow.tasks.claimed.approve": "Approve", + "submission.workflow.tasks.claimed.approve": "Approva", + + // "submission.workflow.tasks.claimed.approve_help": "If you have reviewed the item and it is suitable for inclusion in the collection, select \"Approve\".", + "submission.workflow.tasks.claimed.approve_help": "Se hai esaminato l'item ed è adatto per l'inclusione nella collezione, seleziona \"Approva\".", + + // "submission.workflow.tasks.claimed.edit": "Edit", + "submission.workflow.tasks.claimed.edit": "Modifica", + + // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", + "submission.workflow.tasks.claimed.edit_help": "Selezionare questa opzione per modificare i metadati dell'item.", + + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", + "submission.workflow.tasks.claimed.reject.reason.info": "Se hai esaminato l'item e hai scoperto che non è adatto per essere inserito nella collezione, seleziona \"Rifiuta\". Ti verrà quindi chiesto di inserire un messaggio che indichi perché l'item non è adatto e se chi ha inviato l'item deve cambiare qualcosa e inviarlo di nuovo.", + + // "submission.workflow.tasks.claimed.reject.reason.placeholder": "Describe the reason of reject", + "submission.workflow.tasks.claimed.reject.reason.placeholder": "Descrivi il motivo del rifiuto", + + // "submission.workflow.tasks.claimed.reject.reason.submit": "Reject item", + "submission.workflow.tasks.claimed.reject.reason.submit": "Rifiuta l'item", + + // "submission.workflow.tasks.claimed.reject.reason.title": "Reason", + "submission.workflow.tasks.claimed.reject.reason.title": "Motivo", + + // "submission.workflow.tasks.claimed.reject.submit": "Reject", + "submission.workflow.tasks.claimed.reject.submit": "Rifiuta", + + // "submission.workflow.tasks.claimed.reject_help": "If you have reviewed the item and found it is not suitable for inclusion in the collection, select \"Reject\". You will then be asked to enter a message indicating why the item is unsuitable, and whether the submitter should change something and resubmit.", + "submission.workflow.tasks.claimed.reject_help": "Se l'item esaminato non è adatto per essere inserito nella collezione, seleziona \"Rifiuta\". Ti verrà quindi chiesto di inserire un messaggio che indichi perché l'item non è adatto e se chi ha inviato l'item deve cambiare qualcosa e inviarlo di nuovo.", + + // "submission.workflow.tasks.claimed.return": "Return to pool", + "submission.workflow.tasks.claimed.return": "Restituisci al pool", + + // "submission.workflow.tasks.claimed.return_help": "Return the task to the pool so that another user may perform the task.", + "submission.workflow.tasks.claimed.return_help": "Restituire il task al pool in modo che un altro utente possa prenderlo in carico.", + + + + // "submission.workflow.tasks.generic.error": "Error occurred during operation...", + "submission.workflow.tasks.generic.error": "Si è verificato un errore durante l'operazione...", + + // "submission.workflow.tasks.generic.processing": "Processing...", + "submission.workflow.tasks.generic.processing": "Elaborazione...", + + // "submission.workflow.tasks.generic.submitter": "Submitter", + "submission.workflow.tasks.generic.submitter": "Operatore", + + // "submission.workflow.tasks.generic.success": "Operation successful", + "submission.workflow.tasks.generic.success": "Operazione riuscita", + + + + // "submission.workflow.tasks.pool.claim": "Claim", + "submission.workflow.tasks.pool.claim": "Associa", + + // "submission.workflow.tasks.pool.claim_help": "Assign this task to yourself.", + "submission.workflow.tasks.pool.claim_help": "Assegnati il task.", + + // "submission.workflow.tasks.pool.hide-detail": "Hide detail", + "submission.workflow.tasks.pool.hide-detail": "Nascondi dettaglio", + + // "submission.workflow.tasks.pool.show-detail": "Show detail", + "submission.workflow.tasks.pool.show-detail": "Mostra dettagli", + + + // "submission.workspace.generic.view": "View", + "submission.workspace.generic.view": "Elenco", + + // "submission.workspace.generic.view-help": "Select this option to view the item's metadata.", + "submission.workspace.generic.view-help": "Seleziona questa opzione per vedere i metadata dell'item.", + + + // "thumbnail.default.alt": "Thumbnail Image", + "thumbnail.default.alt": "Immagine di anteprima", + + // "thumbnail.default.placeholder": "No Thumbnail Available", + "thumbnail.default.placeholder": "Nessuna immagine disponibile", + + // "thumbnail.project.alt": "Project Logo", + "thumbnail.project.alt": "Logo del progetto", + + // "thumbnail.project.placeholder": "Project Placeholder Image", + "thumbnail.project.placeholder": "Immagine segnaposto progetto", + + // "thumbnail.orgunit.alt": "OrgUnit Logo", + "thumbnail.orgunit.alt": "Logo Struttura", + + // "thumbnail.orgunit.placeholder": "OrgUnit Placeholder Image", + "thumbnail.orgunit.placeholder": "Immagine segnaposto Struttura", + + // "thumbnail.person.alt": "Profile Picture", + "thumbnail.person.alt": "Immagine del profilo", + + // "thumbnail.person.placeholder": "No Profile Picture Available", + "thumbnail.person.placeholder": "Nessuna immagine del profilo disponibile", + + + + // "title": "DSpace", + // TODO Source message changed - Revise the translation + "title": "DSpace-CRIS", + + + + // "vocabulary-treeview.header": "Hierarchical tree view", + "vocabulary-treeview.header": "Visualizzazione gerarchica ad albero", + + // "vocabulary-treeview.load-more": "Load more", + "vocabulary-treeview.load-more": "Carica di più", + + // "vocabulary-treeview.search.form.reset": "Reset", + "vocabulary-treeview.search.form.reset": "Cancella", + + // "vocabulary-treeview.search.form.search": "Search", + "vocabulary-treeview.search.form.search": "Cerca", + + // "vocabulary-treeview.search.no-result": "There were no items to show", + "vocabulary-treeview.search.no-result": "Non ci sono item da mostrare", + + // "vocabulary-treeview.tree.description.nsi": "The Norwegian Science Index", + "vocabulary-treeview.tree.description.nsi": "Il Norwegian Science Index", + + // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", + "vocabulary-treeview.tree.description.srsc": "Categorie di argomenti di ricerca", + + + + // "uploader.browse": "browse", + "uploader.browse": "sfoglia", + + // "uploader.drag-message": "Drag & Drop your files here", + "uploader.drag-message": "Trascina e rilascia i tuoi file qui", + + // "uploader.delete.btn-title": "Delete", + "uploader.delete.btn-title": "Elimina", + + // "uploader.or": ", or ", + "uploader.or": ", oppure ", + + // "uploader.processing": "Processing uploaded file(s)... (it's now safe to close this page)", + // TODO Source message changed - Revise the translation + "uploader.processing": "Elaborazione", + + // "uploader.queue-length": "Queue length", + "uploader.queue-length": "Lunghezza coda", + + // "virtual-metadata.delete-item.info": "Select the types for which you want to save the virtual metadata as real metadata", + "virtual-metadata.delete-item.info": "Selezionare i tipi per i quali vuoi salvare i metadati virtuali come metadati reali", + + // "virtual-metadata.delete-item.modal-head": "The virtual metadata of this relation", + "virtual-metadata.delete-item.modal-head": "I metadati virtuali di questa relazione", + + // "virtual-metadata.delete-relationship.modal-head": "Select the items for which you want to save the virtual metadata as real metadata", + "virtual-metadata.delete-relationship.modal-head": "Selezionare gli item per i quali si desidera salvare i metadati virtuali come metadati reali", + + + + // "workspace.search.results.head": "Your submissions", + "workspace.search.results.head": "I tuoi invii", + + // "workflowAdmin.search.results.head": "Administer Workflow", + "workflowAdmin.search.results.head": "Gestire il workflow", + + // "workflow.search.results.head": "Workflow tasks", + "workflow.search.results.head": "Task del workflow", + + + + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", + "workflow-item.edit.breadcrumbs": "Modifica l'item del workflow", + + // "workflow-item.edit.title": "Edit workflowitem", + "workflow-item.edit.title": "Modifica l'item del workflow", + + // "workflow-item.delete.notification.success.title": "Deleted", + "workflow-item.delete.notification.success.title": "Eliminato", + + // "workflow-item.delete.notification.success.content": "This workflow item was successfully deleted", + "workflow-item.delete.notification.success.content": "Questo item del workflow è stato eliminato correttamente", + + // "workflow-item.delete.notification.error.title": "Something went wrong", + "workflow-item.delete.notification.error.title": "Qualcosa è andato storto", + + // "workflow-item.delete.notification.error.content": "The workflow item could not be deleted", + "workflow-item.delete.notification.error.content": "Impossibile eliminare l'item del workflow", + + // "workflow-item.delete.title": "Delete workflow item", + "workflow-item.delete.title": "Elimina item del workflow", + + // "workflow-item.delete.header": "Delete workflow item", + "workflow-item.delete.header": "Elimina item del workflow", + + // "workflow-item.delete.button.cancel": "Cancel", + "workflow-item.delete.button.cancel": "Annulla", + + // "workflow-item.delete.button.confirm": "Delete", + "workflow-item.delete.button.confirm": "Elimina", + + + // "workflow-item.send-back.notification.success.title": "Sent back to submitter", + "workflow-item.send-back.notification.success.title": "Inviato all'operatore", + + // "workflow-item.send-back.notification.success.content": "This workflow item was successfully sent back to the submitter", + "workflow-item.send-back.notification.success.content": "Questo item del workflow è stato rinviato correttamente all'operatore", + + // "workflow-item.send-back.notification.error.title": "Something went wrong", + "workflow-item.send-back.notification.error.title": "Qualcosa è andato storto", + + // "workflow-item.send-back.notification.error.content": "The workflow item could not be sent back to the submitter", + "workflow-item.send-back.notification.error.content": "Impossibile inviare l'item del workflow all'operatore", + + // "workflow-item.send-back.title": "Send workflow item back to submitter", + "workflow-item.send-back.title": "Invia l'item del workflow all'operatore", + + // "workflow-item.send-back.header": "Send workflow item back to submitter", + "workflow-item.send-back.header": "Invia l'item del workflow all'operatore", + + // "workflow-item.send-back.button.cancel": "Cancel", + "workflow-item.send-back.button.cancel": "Annulla", + + // "workflow-item.send-back.button.confirm": "Send back", + "workflow-item.send-back.button.confirm": "Invia indietro", + + // "workflow-item.view.breadcrumbs": "Workflow View", + "workflow-item.view.breadcrumbs": "Vista workflow", + + // "workspace-item.view.breadcrumbs": "Workspace View", + "workspace-item.view.breadcrumbs": "Vista Workspace", + + // "workspace-item.view.title": "Workspace View", + "workspace-item.view.title": "Vista Workspace", + + // "idle-modal.header": "Session will expire soon", + "idle-modal.header": "La sessione scadrà presto", + + // "idle-modal.info": "For security reasons, user sessions expire after {{ timeToExpire }} minutes of inactivity. Your session will expire soon. Would you like to extend it or log out?", + "idle-modal.info": "Per motivi di sicurezza, le sessioni utente scadono dopo {{ timeToExpire }} minuti di inattività. La sessione scadrà presto. Vuoi estenderla o disconnetterti?", + + // "idle-modal.log-out": "Log out", + "idle-modal.log-out": "Logout", + + // "idle-modal.extend-session": "Extend session", + "idle-modal.extend-session": "Estendi sessione", + + // "researcher.profile.action.processing" : "Processing...", + "researcher.profile.action.processing" : "Elaborazione...", + + // "researcher.profile.associated": "Researcher profile associated", + "researcher.profile.associated": "Profilo ricercatore associato", + + // "researcher.profile.change-visibility.fail": "An unexpected error occurs while changing the profile visibility", + "researcher.profile.change-visibility.fail": "Si è verificato un errore inaspettato durante il cambio della visibilità del profilo", + + // "researcher.profile.create.new": "Create new", + "researcher.profile.create.new": "Crea nuovo", + + // "researcher.profile.create.success": "Researcher profile created successfully", + "researcher.profile.create.success": "Profilo del ricercatore creato con successo", + + // "researcher.profile.create.fail": "An error occurs during the researcher profile creation", + "researcher.profile.create.fail": "Si è verificato un errore durante la creazione del profilo del ricercatore", + + // "researcher.profile.delete": "Delete", + "researcher.profile.delete": "Elimina", + + // "researcher.profile.expose": "Expose", + "researcher.profile.expose": "Mostra", + + // "researcher.profile.hide": "Hide", + "researcher.profile.hide": "Nascondi", + + // "researcher.profile.not.associated": "Researcher profile not yet associated", + "researcher.profile.not.associated": "Profilo del ricercatore non ancora associato", + + // "researcher.profile.view": "View", + "researcher.profile.view": "Visualizza", + + // "researcher.profile.private.visibility" : "PRIVATE", + "researcher.profile.private.visibility" : "PRIVATO", + + // "researcher.profile.public.visibility" : "PUBLIC", + "researcher.profile.public.visibility" : "PUBBLICO", + + // "researcher.profile.status": "Status:", + "researcher.profile.status": "Stato:", + + // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", + "researcherprofile.claim.not-authorized": "Non sei autorizzato a richiedere questo item. Per maggiori dettagli contattare l'amministratore/i", + + // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + "researcherprofile.error.claim.body" : "Si è verificato un errore durante l'associazione del profilo, prova più tardi", + + // "researcherprofile.error.claim.title" : "Error", + "researcherprofile.error.claim.title" : "Errore", + + // "researcherprofile.success.claim.body" : "Profile claimed with success", + "researcherprofile.success.claim.body" : "Profilo associato con successo", + + // "researcherprofile.success.claim.title" : "Success", + "researcherprofile.success.claim.title" : "Successo", + + // "person.page.orcid.create": "Create an ORCID ID", + "person.page.orcid.create": "Creare un ID ORCID", + + // "person.page.orcid.granted-authorizations": "Granted authorizations", + "person.page.orcid.granted-authorizations": "Autorizzazioni concesse", + + // "person.page.orcid.grant-authorizations" : "Grant authorizations", + "person.page.orcid.grant-authorizations" : "Concedere autorizzazioni", + + // "person.page.orcid.link": "Connect to ORCID ID", + "person.page.orcid.link": "Connettersi all'ORCID ID", + + // "person.page.orcid.link.processing": "Linking profile to ORCID...", + "person.page.orcid.link.processing": "Collega il profilo a ORCID...", + + // "person.page.orcid.link.error.message": "Something went wrong while connecting the profile with ORCID. If the problem persists, contact the administrator.", + "person.page.orcid.link.error.message": "Si è verifcato un errore nel connettere il profilo a ORCID. Se il problema persiste, contattare l'amministratore", + + // "person.page.orcid.orcid-not-linked-message": "The ORCID iD of this profile ({{ orcid }}) has not yet been connected to an account on the ORCID registry or the connection is expired.", + "person.page.orcid.orcid-not-linked-message": "L'ORCID ID di questo profilo ({{ orcid }}) non è ancora stato collegato a un account del registro ORCID o la connessione è scaduta.", + + // "person.page.orcid.unlink": "Disconnect from ORCID", + "person.page.orcid.unlink": "Disconnessione da ORCID", + + // "person.page.orcid.unlink.processing": "Processing...", + "person.page.orcid.unlink.processing": "Elaborazione...", + + // "person.page.orcid.missing-authorizations": "Missing authorizations", + "person.page.orcid.missing-authorizations": "Autorizzazioni mancanti", + + // "person.page.orcid.missing-authorizations-message": "The following authorizations are missing:", + "person.page.orcid.missing-authorizations-message": "Non si dispone delle seguenti autorizzazioni:", + + // "person.page.orcid.no-missing-authorizations-message": "Great! This box is empty, so you have granted all access rights to use all functions offers by your institution.", + "person.page.orcid.no-missing-authorizations-message": "Benissimo! Questa casella è vuota, quindi hai concesso tutti i diritti di accesso per utilizzare tutte le funzioni offerte dalla tua istituzione.", + + // "person.page.orcid.no-orcid-message": "No ORCID iD associated yet. By clicking on the button below it is possible to link this profile with an ORCID account.", + "person.page.orcid.no-orcid-message": "Nessun ORCID ID ancora associato. Cliccando sul pulsante qui sotto è possibile collegare questo profilo con un account ORCID.", + + // "person.page.orcid.profile-preferences": "Profile preferences", + "person.page.orcid.profile-preferences": "Preferenze del profilo", + + // "person.page.orcid.funding-preferences": "Funding preferences", + "person.page.orcid.funding-preferences": "Preferenze di finanziamento", + + // "person.page.orcid.publications-preferences": "Publication preferences", + "person.page.orcid.publications-preferences": "Preferenze di pubblicazione", + + // "person.page.orcid.remove-orcid-message": "If you need to remove your ORCID, please contact the repository administrator", + "person.page.orcid.remove-orcid-message": "Se vuoi rimuovere l'ORCID, contatta l'amministratore del repository", + + // "person.page.orcid.save.preference.changes": "Update settings", + "person.page.orcid.save.preference.changes": "Impostazioni di aggiornamento", + + // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + "person.page.orcid.sync-profile.affiliation" : "Affiliazione", + + // "person.page.orcid.sync-profile.biographical" : "Biographical data", + "person.page.orcid.sync-profile.biographical" : "Riferimenti biografici", + + // "person.page.orcid.sync-profile.education" : "Education", + "person.page.orcid.sync-profile.education" : "Educazione", + + // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + "person.page.orcid.sync-profile.identifiers" : "Identificativi", + + // "person.page.orcid.sync-fundings.all" : "All fundings", + "person.page.orcid.sync-fundings.all" : "Tutti i finanziamenti", + + // "person.page.orcid.sync-fundings.mine" : "My fundings", + "person.page.orcid.sync-fundings.mine" : "I miei finanziamenti", + + // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + "person.page.orcid.sync-fundings.my_selected" : "Finanziamenti selezionati", + + // "person.page.orcid.sync-fundings.disabled" : "Disabled", + "person.page.orcid.sync-fundings.disabled" : "Disabilitato", + + // "person.page.orcid.sync-publications.all" : "All publications", + "person.page.orcid.sync-publications.all" : "Tutte le pubblicazioni", + + // "person.page.orcid.sync-publications.mine" : "My publications", + "person.page.orcid.sync-publications.mine" : "Le mie pubblicazioni", + + // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + "person.page.orcid.sync-publications.my_selected" : "Pubblicazioni selezionate", + + // "person.page.orcid.sync-publications.disabled" : "Disabled", + "person.page.orcid.sync-publications.disabled" : "Disabilitato", + + // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + "person.page.orcid.sync-queue.discard" : "Scarta la modifica e non sincronizzarla con il registro ORCID.", + + // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", + "person.page.orcid.sync-queue.discard.error": "L'eliminazione del record della coda ORCID non è riuscita", + + // "person.page.orcid.sync-queue.discard.success": "The ORCID queue record have been discarded successfully", + "person.page.orcid.sync-queue.discard.success": "Il record della coda ORCID è stato eliminato correttamente", + + // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", + "person.page.orcid.sync-queue.empty-message": "Il Registro di sistema della coda ORCID è vuoto", + + // "person.page.orcid.sync-queue.table.header.type" : "Type", + "person.page.orcid.sync-queue.table.header.type" : "Tipo", + + // "person.page.orcid.sync-queue.table.header.description" : "Description", + "person.page.orcid.sync-queue.table.header.description" : "Descrizione", + + // "person.page.orcid.sync-queue.table.header.action" : "Action", + "person.page.orcid.sync-queue.table.header.action" : "Azione", + + // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", + "person.page.orcid.sync-queue.description.affiliation": "Affiliazioni", + + // "person.page.orcid.sync-queue.description.country": "Country", + "person.page.orcid.sync-queue.description.country": "Paese", + + // "person.page.orcid.sync-queue.description.education": "Educations", + "person.page.orcid.sync-queue.description.education": "Istruzione", + + // "person.page.orcid.sync-queue.description.external_ids": "External ids", + "person.page.orcid.sync-queue.description.external_ids": "ID esterni", + + // "person.page.orcid.sync-queue.description.other_names": "Other names", + "person.page.orcid.sync-queue.description.other_names": "Altri nomi", + + // "person.page.orcid.sync-queue.description.qualification": "Qualifications", + "person.page.orcid.sync-queue.description.qualification": "Qualifiche", + + // "person.page.orcid.sync-queue.description.researcher_urls": "Researcher urls", + "person.page.orcid.sync-queue.description.researcher_urls": "URL ricercatore", + + // "person.page.orcid.sync-queue.description.keywords": "Keywords", + "person.page.orcid.sync-queue.description.keywords": "Parole chiave", + + // "person.page.orcid.sync-queue.tooltip.insert": "Add a new entry in the ORCID registry", + "person.page.orcid.sync-queue.tooltip.insert": "Aggiungere una nuova voce nel Registro ORCID", + + // "person.page.orcid.sync-queue.tooltip.update": "Update this entry on the ORCID registry", + "person.page.orcid.sync-queue.tooltip.update": "Aggiorna questa voce nel Registro ORCID", + + // "person.page.orcid.sync-queue.tooltip.delete": "Remove this entry from the ORCID registry", + "person.page.orcid.sync-queue.tooltip.delete": "Rimuovere questa voce dal Registro ORCID", + + // "person.page.orcid.sync-queue.tooltip.publication": "Publication", + "person.page.orcid.sync-queue.tooltip.publication": "Pubblicazione", + + // "person.page.orcid.sync-queue.tooltip.project": "Project", + "person.page.orcid.sync-queue.tooltip.project": "Progetto", + + // "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliation", + "person.page.orcid.sync-queue.tooltip.affiliation": "Affiliazione", + + // "person.page.orcid.sync-queue.tooltip.education": "Education", + "person.page.orcid.sync-queue.tooltip.education": "Istruzione", + + // "person.page.orcid.sync-queue.tooltip.qualification": "Qualification", + "person.page.orcid.sync-queue.tooltip.qualification": "Qualificazione", + + // "person.page.orcid.sync-queue.tooltip.other_names": "Other name", + "person.page.orcid.sync-queue.tooltip.other_names": "Altro nome", + + // "person.page.orcid.sync-queue.tooltip.country": "Country", + "person.page.orcid.sync-queue.tooltip.country": "Paese", + + // "person.page.orcid.sync-queue.tooltip.keywords": "Keyword", + "person.page.orcid.sync-queue.tooltip.keywords": "Parola chiave", + + // "person.page.orcid.sync-queue.tooltip.external_ids": "External identifier", + "person.page.orcid.sync-queue.tooltip.external_ids": "Identificatore esterno", + + // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", + "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL ricercatore", + + // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + "person.page.orcid.sync-queue.send" : "Sincronizza con il registro ORCID", + + // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", + "person.page.orcid.sync-queue.send.unauthorized-error.title": "L'immissione a ORCID non è riuscita a causa di autorizzazioni mancanti.", + + // "person.page.orcid.sync-queue.send.unauthorized-error.content": "Click here to grant again the required permissions. If the problem persists, contact the administrator", + "person.page.orcid.sync-queue.send.unauthorized-error.content": "Clicca qui per ottenere di nuovo i permessi necessari. Se il problema persiste contatta l'amministratore", + + // "person.page.orcid.sync-queue.send.bad-request-error": "The submission to ORCID failed because the resource sent to ORCID registry is not valid", + "person.page.orcid.sync-queue.send.bad-request-error": "L'immissione a ORCID non è riuscito perché la risorsa inviata al Registro ORCID non è valida", + + // "person.page.orcid.sync-queue.send.error": "The submission to ORCID failed", + "person.page.orcid.sync-queue.send.error": "L'immissione a ORCID non è riuscita", + + // "person.page.orcid.sync-queue.send.conflict-error": "The submission to ORCID failed because the resource is already present on the ORCID registry", + "person.page.orcid.sync-queue.send.conflict-error": "L'immissione a ORCID non è riuscita perché la risorsa è già presente nel Registro ORCID", + + // "person.page.orcid.sync-queue.send.not-found-warning": "The resource does not exists anymore on the ORCID registry.", + "person.page.orcid.sync-queue.send.not-found-warning": "La risorsa non esiste più nel registro ORCID.", + + // "person.page.orcid.sync-queue.send.success": "The submission to ORCID was completed successfully", + "person.page.orcid.sync-queue.send.success": "L'immissione a ORCID è stata completata con successo", + + // "person.page.orcid.sync-queue.send.validation-error": "The data that you want to synchronize with ORCID is not valid", + "person.page.orcid.sync-queue.send.validation-error": "I dati che si desidera sincronizzare con ORCID non sono validi", + + // "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "The amount's currency is required", + "person.page.orcid.sync-queue.send.validation-error.amount-currency.required": "La valuta dell'importo è obbligatoria", + + // "person.page.orcid.sync-queue.send.validation-error.external-id.required": "The resource to be sent requires at least one identifier", + "person.page.orcid.sync-queue.send.validation-error.external-id.required": "La risorsa da inviare richiede almeno un identificatore", + + // "person.page.orcid.sync-queue.send.validation-error.title.required": "The title is required", + "person.page.orcid.sync-queue.send.validation-error.title.required": "Il titolo è obbligatorio", + + // "person.page.orcid.sync-queue.send.validation-error.type.required": "The dc.type is required", + // TODO Source message changed - Revise the translation + "person.page.orcid.sync-queue.send.validation-error.type.required": "Il tipo è obbligatorio", + + // "person.page.orcid.sync-queue.send.validation-error.start-date.required": "The start date is required", + "person.page.orcid.sync-queue.send.validation-error.start-date.required": "La data di inizio è obbligatoria", + + // "person.page.orcid.sync-queue.send.validation-error.funder.required": "The funder is required", + "person.page.orcid.sync-queue.send.validation-error.funder.required": "Il finanziatore è obbligatorio", + + // "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Invalid 2 digits ISO 3166 country", + "person.page.orcid.sync-queue.send.validation-error.country.invalid": "Codice del paese non valido (formato a due cifre ISO 3166)", + + // "person.page.orcid.sync-queue.send.validation-error.organization.required": "The organization is required", + "person.page.orcid.sync-queue.send.validation-error.organization.required": "L'organizzazione è obbligatoria", + + // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", + "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Il nome dell'organizzazione è obbligatorio", + + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "La data di pubblicazione deve partire dal 1900", + + // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", + "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "L'organizzazione da inviare richiede un indirizzo", + + // "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "The address of the organization to be sent requires a city", + "person.page.orcid.sync-queue.send.validation-error.organization.city-required": "L'indirizzo dell'organizzazione da inviare richiede una città", + + // "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "The address of the organization to be sent requires a valid 2 digits ISO 3166 country", + // TODO Source message changed - Revise the translation + "person.page.orcid.sync-queue.send.validation-error.organization.country-required": "L'indirizzo dell'organizzazione da inviare richiede un paese (inserire 2 cifre secondo l'ISO 3166)", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "An identifier to disambiguate organizations is required. Supported ids are GRID, Ringgold, Legal Entity identifiers (LEIs) and Crossref Funder Registry identifiers", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.required": "È necessario un identificatore per disambiguare le organizzazioni. Gli ID supportati sono gli identificativi della persona giuridica (LEI), GRID, Ringgold e gli identificatori del Registro finanziatore Crossref", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "The organization's identifiers requires a value", + "person.page.orcid.sync-queue.send.validation-error.disambiguated-organization.value-required": "Gli identificatori dell'organizzazione richiedono un valore", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "The organization's identifiers requires a source", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.required": "Gli identificatori dell'organizzazione richiedono un'origine", + + // "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "The source of one of the organization identifiers is invalid. Supported sources are RINGGOLD, GRID, LEI and FUNDREF", + "person.page.orcid.sync-queue.send.validation-error.disambiguation-source.invalid": "L'origine di uno degli identificatori dell'organizzazione non è valida. Le fonti supportate sono RINGGOLD, GRID, LEI e FUNDREF", + + // "person.page.orcid.synchronization-mode": "Synchronization mode", + "person.page.orcid.synchronization-mode": "Sincronizzazione", + + // "person.page.orcid.synchronization-mode.batch": "Batch", + "person.page.orcid.synchronization-mode.batch": "Batch", + + // "person.page.orcid.synchronization-mode.label": "Synchronization mode", + "person.page.orcid.synchronization-mode.label": "Sincronizzazione", + + // "person.page.orcid.synchronization-mode-message": "Please select how you would like synchronization to ORCID to occur. The options include \"Manual\" (you must send your data to ORCID manually), or \"Batch\" (the system will send your data to ORCID via a scheduled script).", + // TODO Source message changed - Revise the translation + "person.page.orcid.synchronization-mode-message": "Abilitare la modalità di sincronizzazione \"manuale\" per disabilitare la sincronizzazione batch in modo da dover inviare manualmente i dati al Registro ORCID", + + // "person.page.orcid.synchronization-mode-funding-message": "Select whether to send your linked Project entities to your ORCID record's list of funding information.", + "person.page.orcid.synchronization-mode-funding-message": "Scegli se sincronizzare i tuoi Progetti con la lista delle informazioni dei progetti sul profilo ORCID.", + + // "person.page.orcid.synchronization-mode-publication-message": "Select whether to send your linked Publication entities to your ORCID record's list of works.", + "person.page.orcid.synchronization-mode-publication-message": "Scegli se sincronizzare le tue Pubblicazioni con la lista dei tuoi lavori sul profilo ORCID.", + + // "person.page.orcid.synchronization-mode-profile-message": "Select whether to send your biographical data or personal identifiers to your ORCID record.", + "person.page.orcid.synchronization-mode-profile-message": "Scegli se sincronizzare le tue informazioni bibliografiche o identificativi personali con il tuo profilo ORCID.", + + // "person.page.orcid.synchronization-settings-update.success": "The synchronization settings have been updated successfully", + "person.page.orcid.synchronization-settings-update.success": "Le impostazioni di sincronizzazione sono state aggiornate correttamente", + + // "person.page.orcid.synchronization-settings-update.error": "The update of the synchronization settings failed", + "person.page.orcid.synchronization-settings-update.error": "L'aggiornamento delle impostazioni di sincronizzazione non è riuscito", + + // "person.page.orcid.synchronization-mode.manual": "Manual", + "person.page.orcid.synchronization-mode.manual": "Manuale", + + // "person.page.orcid.scope.authenticate": "Get your ORCID iD", + "person.page.orcid.scope.authenticate": "Ottieni il tuo ORCID ID", + + // "person.page.orcid.scope.read-limited": "Read your information with visibility set to Trusted Parties", + "person.page.orcid.scope.read-limited": "Leggi le tue informazioni con visibilità impostata su Parti attendibili", + + // "person.page.orcid.scope.activities-update": "Add/update your research activities", + "person.page.orcid.scope.activities-update": "Aggiungi/aggiorna le tue attività di ricerca", + + // "person.page.orcid.scope.person-update": "Add/update other information about you", + "person.page.orcid.scope.person-update": "Aggiungi/aggiorna le tue informazioni", + + // "person.page.orcid.unlink.success": "The disconnection between the profile and the ORCID registry was successful", + "person.page.orcid.unlink.success": "La disconnessione tra il profilo e il registro ORCID è riuscita", + + // "person.page.orcid.unlink.error": "An error occurred while disconnecting between the profile and the ORCID registry. Try again", + "person.page.orcid.unlink.error": "Si è verificato un errore durante la disconnessione tra il profilo e il Registro di sistema ORCID. Riprova", + + // "person.orcid.sync.setting": "ORCID Synchronization settings", + "person.orcid.sync.setting": "Impostazioni di sincronizzazione ORCID", + + // "person.orcid.registry.queue": "ORCID Registry Queue", + "person.orcid.registry.queue": "Coda registro ORCID", + + // "person.orcid.registry.auth": "ORCID Authorizations", + "person.orcid.registry.auth": "Autorizzazioni ORCID", + // "home.recent-submissions.head": "Recent Submissions", + // TODO New key - Add a translation + "home.recent-submissions.head": "Recent Submissions", + + + +} \ No newline at end of file From f3d4754d5bbdf0731231e2d98d8cd1a021723a51 Mon Sep 17 00:00:00 2001 From: Nona Luypaert Date: Fri, 12 May 2023 10:06:03 +0200 Subject: [PATCH 635/833] 101623: Add BrowseDefinitionModels to CoreModule, Fix FlatBrowseDefinition --- src/app/core/core.module.ts | 2 ++ src/app/core/shared/flat-browse-definition.model.ts | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts index 81b70e42c2..c00cfd6002 100644 --- a/src/app/core/core.module.ts +++ b/src/app/core/core.module.ts @@ -170,6 +170,7 @@ import { OrcidHistory } from './orcid/model/orcid-history.model'; import { OrcidAuthService } from './orcid/orcid-auth.service'; import { VocabularyDataService } from './submission/vocabularies/vocabulary.data.service'; import { VocabularyEntryDetailsDataService } from './submission/vocabularies/vocabulary-entry-details.data.service'; +import { HierarchicalBrowseDefinition } from './shared/hierarchical-browse-definition.model'; /** * When not in production, endpoint responses can be mocked for testing purposes @@ -325,6 +326,7 @@ export const models = AuthStatus, BrowseEntry, FlatBrowseDefinition, + HierarchicalBrowseDefinition, ClaimedTask, TaskObject, PoolTask, diff --git a/src/app/core/shared/flat-browse-definition.model.ts b/src/app/core/shared/flat-browse-definition.model.ts index 2002d6bbab..fa664c7747 100644 --- a/src/app/core/shared/flat-browse-definition.model.ts +++ b/src/app/core/shared/flat-browse-definition.model.ts @@ -22,9 +22,6 @@ export class FlatBrowseDefinition extends CacheableObject implements BrowseDefin @autoserialize id: string; - @autoserialize - metadataBrowse: boolean; - @autoserialize sortOptions: SortOption[]; From b4d2f063c6c039ca1d899b15af67cc37c9fd55fa Mon Sep 17 00:00:00 2001 From: lotte Date: Fri, 12 May 2023 10:44:55 +0200 Subject: [PATCH 636/833] 97184: styleurl fix for themed badges component --- .../shared/object-collection/shared/badges/badges.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts index 8cdbf32d36..ecd1a9a43b 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/badges.component.ts @@ -4,6 +4,7 @@ import { BadgesComponent as BaseComponent } from 'src/app/shared/object-collecti @Component({ selector: 'ds-badges', // styleUrls: ['./badges.component.scss'], + styleUrls: ['../../../../../../../app/shared/object-collection/shared/badges/badges.component.scss'], // templateUrl: './badges.component.html', templateUrl: '../../../../../../../app/shared/object-collection/shared/badges/badges.component.html', }) From 84b63a443faebf9c6f66cefd12802e041957bb3c Mon Sep 17 00:00:00 2001 From: Davide Negretti Date: Fri, 12 May 2023 11:55:18 +0200 Subject: [PATCH 637/833] [DURACOM-99] Updated Italian translations (2023-05-12) --- src/assets/i18n/it.json5 | 1242 ++++++++++++++++++++++++++++++++++---- 1 file changed, 1114 insertions(+), 128 deletions(-) diff --git a/src/assets/i18n/it.json5 b/src/assets/i18n/it.json5 index ab8bf0feef..8b90e3fa2a 100644 --- a/src/assets/i18n/it.json5 +++ b/src/assets/i18n/it.json5 @@ -194,9 +194,9 @@ // "admin.registries.bitstream-formats.table.name": "Name", "admin.registries.bitstream-formats.table.name": "Nome", - // "admin.registries.bitstream-formats.table.id" : "ID", + // "admin.registries.bitstream-formats.table.id": "ID", // TODO New key - Add a translation - "admin.registries.bitstream-formats.table.id" : "ID", + "admin.registries.bitstream-formats.table.id": "ID", // "admin.registries.bitstream-formats.table.return": "Back", "admin.registries.bitstream-formats.table.return": "Indietro", @@ -276,9 +276,9 @@ // "admin.registries.schema.fields.table.field": "Field", "admin.registries.schema.fields.table.field": "Campo", - // "admin.registries.schema.fields.table.id" : "ID", + // "admin.registries.schema.fields.table.id": "ID", // TODO New key - Add a translation - "admin.registries.schema.fields.table.id" : "ID", + "admin.registries.schema.fields.table.id": "ID", // "admin.registries.schema.fields.table.scopenote": "Scope Note", "admin.registries.schema.fields.table.scopenote": "Nota di ambito", @@ -750,7 +750,17 @@ // "admin.access-control.groups.form.return": "Back", "admin.access-control.groups.form.return": "Indietro", + // "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + // TODO New key - Add a translation + "admin.access-control.groups.form.tooltip.editGroupPage": "On this page, you can modify the properties and members of a group. In the top section, you can edit the group name and description, unless this is an admin group for a collection or community, in which case the group name and description are auto-generated and cannot be edited. In the following sections, you can edit group membership. See [the wiki](https://wiki.lyrasis.org/display/DSDOC7x/Create+or+manage+a+user+group) for more details.", + // "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + // TODO New key - Add a translation + "admin.access-control.groups.form.tooltip.editGroup.addEpeople": "To add or remove an EPerson to/from this group, either click the 'Browse All' button or use the search bar below to search for users (use the dropdown to the left of the search bar to choose whether to search by metadata or by email). Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + + // "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", + // TODO New key - Add a translation + "admin.access-control.groups.form.tooltip.editGroup.addSubgroups": "To add or remove a Subgroup to/from this group, either click the 'Browse All' button or use the search bar below to search for users. Then click the plus icon for each user you wish to add in the list below, or the trash can icon for each user you wish to remove. The list below may have several pages: use the page controls below the list to navigate to the next pages. Once you are ready, save your changes by clicking the 'Save' button in the top section.", // "admin.search.breadcrumbs": "Administrative Search", "admin.search.breadcrumbs": "Ricerca amministrativa", @@ -800,12 +810,24 @@ // "admin.workflow.item.workflow": "Workflow", "admin.workflow.item.workflow": "Flusso di lavoro", + // "admin.workflow.item.workspace": "Workspace", + // TODO New key - Add a translation + "admin.workflow.item.workspace": "Workspace", + // "admin.workflow.item.delete": "Delete", "admin.workflow.item.delete": "Cancellare", // "admin.workflow.item.send-back": "Send back", "admin.workflow.item.send-back": "Rinviare", + // "admin.workflow.item.policies": "Policies", + // TODO New key - Add a translation + "admin.workflow.item.policies": "Policies", + + // "admin.workflow.item.supervision": "Supervision", + // TODO New key - Add a translation + "admin.workflow.item.supervision": "Supervision", + // "admin.metadata-import.breadcrumbs": "Import Metadata", @@ -873,6 +895,132 @@ // "admin.metadata-import.page.validateOnly.hint": "When selected, the uploaded CSV will be validated. You will receive a report of detected changes, but no changes will be saved.", "admin.metadata-import.page.validateOnly.hint": "Una volta selezionato, il CSV caricato sarà validato. Riceverai un report delle modifiche rilevate, ma nessuna modifica verrà salvata.", + // "advanced-workflow-action.rating.form.rating.label": "Rating", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.rating.label": "Rating", + + // "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.rating.error": "You must rate the item", + + // "advanced-workflow-action.rating.form.review.label": "Review", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.review.label": "Review", + + // "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + // TODO New key - Add a translation + "advanced-workflow-action.rating.form.review.error": "You must enter a review to submit this rating", + + // "advanced-workflow-action.rating.description": "Please select a rating below", + // TODO New key - Add a translation + "advanced-workflow-action.rating.description": "Please select a rating below", + + // "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + // TODO New key - Add a translation + "advanced-workflow-action.rating.description-requiredDescription": "Please select a rating below and also add a review", + + + // "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + // TODO New key - Add a translation + "advanced-workflow-action.select-reviewer.description-single": "Please select a single reviewer below before submitting", + + // "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + // TODO New key - Add a translation + "advanced-workflow-action.select-reviewer.description-multiple": "Please select one or more reviewers below before submitting", + + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.head": "EPeople", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.head": "Add EPeople", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.button.see-all": "Browse All", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.headMembers": "Current Members", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.metadata": "Metadata", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.scope.email": "E-mail (exact)", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.search.button": "Search", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.id": "ID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.name": "Name", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.identity": "Identity", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.email": "Email", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.netid": "NetID", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit": "Remove / Add", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.remove": "Remove member with name \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.addMember": "Successfully added member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.addMember": "Failed to add member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.success.deleteMember": "Successfully deleted member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.deleteMember": "Failed to delete member: \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.table.edit.buttons.add": "Add member with name \"{{name}}\"", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.notification.failure.noActiveGroup": "No current active group, submit a name first.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-members-yet": "No members in group yet, search and add.", + + // "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + // TODO New key - Add a translation + "advanced-workflow-action-select-reviewer.groups.form.reviewers-list.no-items": "No EPeople found in that search", + + // "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + // TODO New key - Add a translation + "advanced-workflow-action.select-reviewer.no-reviewer-selected.error": "No reviewer selected.", + // "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", // TODO New key - Add a translation "admin.batch-import.page.validateOnly.hint": "When selected, the uploaded ZIP will be validated. You will receive a report of detected changes, but no changes will be saved.", @@ -1174,10 +1322,27 @@ "browse.title.page": "Mostra il contenuto di {{ collection }} per {{ field }} {{ value }}", + // "search.browse.item-back": "Back to Results", + // TODO New key - Add a translation + "search.browse.item-back": "Back to Results", + + // "chips.remove": "Remove chip", "chips.remove": "Rimuovere il chip", + // "claimed-approved-search-result-list-element.title": "Approved", + // TODO New key - Add a translation + "claimed-approved-search-result-list-element.title": "Approved", + + // "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + // TODO New key - Add a translation + "claimed-declined-search-result-list-element.title": "Rejected, sent back to submitter", + + // "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + // TODO New key - Add a translation + "claimed-declined-task-search-result-list-element.title": "Declined, sent back to Review Manager's workflow", + // "collection.create.head": "Create a Collection", "collection.create.head": "Creare una collection", @@ -1788,6 +1953,15 @@ "comcol-role.edit.reviewer.description": "I revisori sono in grado di accettare o rifiutare le submissions depositate. Tuttavia, non sono in grado di modificare i metadati della submission.", + // "comcol-role.edit.scorereviewers.name": "Score Reviewers", + // TODO New key - Add a translation + "comcol-role.edit.scorereviewers.name": "Score Reviewers", + + // "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + // TODO New key - Add a translation + "comcol-role.edit.scorereviewers.description": "Reviewers are able to give a score to incoming submissions, this will define whether the submission will be rejected or not.", + + // "community.form.abstract": "Short Description", "community.form.abstract": "Breve descrizione", @@ -1963,11 +2137,12 @@ // "cookies.consent.purpose.sharing": "Sharing", "cookies.consent.purpose.sharing": "Condivisione", - // "curation-task.task.citationpage.label": "Generate Citation Page", + // "curation-task.task.citationpage.label": "Generate Citation Page", // TODO New key - Add a translation - "curation-task.task.citationpage.label": "Generate Citation Page", + "curation-task.task.citationpage.label": "Generate Citation Page", - // "curation-task.task.checklinks.label": "Check Links in Metadata", + // "curation-task.task.checklinks.label": "Check Links in Metadata", + // TODO Source message changed - Revise the translation "curation-task.task.checklinks.label": "Controllare i collegamenti nei metadati", // "curation-task.task.noop.label": "NOOP", @@ -1985,6 +2160,10 @@ // "curation-task.task.vscan.label": "Virus Scan", "curation-task.task.vscan.label": "Scansione antivirus", + // "curation-task.task.register-doi.label": "Register DOI", + // TODO New key - Add a translation + "curation-task.task.register-doi.label": "Register DOI", + // "curation.form.task-select.label": "Task:", @@ -2050,6 +2229,10 @@ // "dso-selector.create.community.head": "New community", "dso-selector.create.community.head": "Nuova Community", + // "dso-selector.create.community.or-divider": "or", + // TODO New key - Add a translation + "dso-selector.create.community.or-divider": "or", + // "dso-selector.create.community.sub-level": "Create a new community in", "dso-selector.create.community.sub-level": "Creare una nuova community in", @@ -2103,6 +2286,10 @@ // "dso-selector.set-scope.community.button": "Search all of DSpace", "dso-selector.set-scope.community.button": "Cerca in tutto DSpace", + // "dso-selector.set-scope.community.or-divider": "or", + // TODO New key - Add a translation + "dso-selector.set-scope.community.or-divider": "or", + // "dso-selector.set-scope.community.input-header": "Search for a community or collection", "dso-selector.set-scope.community.input-header": "Cercare una community o una collection", @@ -2118,6 +2305,62 @@ // "dso-selector.claim.item.create-from-scratch": "Create a new one", "dso-selector.claim.item.create-from-scratch": "Crea uno nuovo profilo", + // "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again ↻", + // TODO New key - Add a translation + "dso-selector.results-could-not-be-retrieved": "Something went wrong, please refresh again ↻", + + // "supervision-group-selector.header": "Supervision Group Selector", + // TODO New key - Add a translation + "supervision-group-selector.header": "Supervision Group Selector", + + // "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.label": "Select a type of Order", + + // "supervision-group-selector.select.type-of-order.option.none": "NONE", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.option.none": "NONE", + + // "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.option.editor": "EDITOR", + + // "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.option.observer": "OBSERVER", + + // "supervision-group-selector.select.group.label": "Select a Group", + // TODO New key - Add a translation + "supervision-group-selector.select.group.label": "Select a Group", + + // "supervision-group-selector.button.cancel": "Cancel", + // TODO New key - Add a translation + "supervision-group-selector.button.cancel": "Cancel", + + // "supervision-group-selector.button.save": "Save", + // TODO New key - Add a translation + "supervision-group-selector.button.save": "Save", + + // "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + // TODO New key - Add a translation + "supervision-group-selector.select.type-of-order.error": "Please select a type of order", + + // "supervision-group-selector.select.group.error": "Please select a group", + // TODO New key - Add a translation + "supervision-group-selector.select.group.error": "Please select a group", + + // "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + // TODO New key - Add a translation + "supervision-group-selector.notification.create.success.title": "Successfully created supervision order for group {{ name }}", + + // "supervision-group-selector.notification.create.failure.title": "Error", + // TODO New key - Add a translation + "supervision-group-selector.notification.create.failure.title": "Error", + + // "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", + // TODO New key - Add a translation + "supervision-group-selector.notification.create.already-existing": "A supervision order already exists on this item for selected group", + // "confirmation-modal.export-metadata.header": "Export metadata for {{ dsoName }}", "confirmation-modal.export-metadata.header": "Esportare i metadati per {{ dsoName }}", @@ -2170,6 +2413,18 @@ // "confirmation-modal.delete-profile.confirm": "Delete", "confirmation-modal.delete-profile.confirm": "Elimina", + // "confirmation-modal.delete-subscription.header": "Delete Subscription", + // TODO Source message changed - Revise the translation + "confirmation-modal.delete-subscription.header": "Elimina iscrizione per \"{{ dsoName }}\"", + + // "confirmation-modal.delete-subscription.info": "Are you sure you want to delete subscription for \"{{ dsoName }}\"", + "confirmation-modal.delete-subscription.info": "Sei sicuro di voler eliminare l'iscrizione per \"{{ dsoName }}\"", + + // "confirmation-modal.delete-subscription.cancel": "Cancel", + "confirmation-modal.delete-subscription.cancel": "Annulla", + + // "confirmation-modal.delete-subscription.confirm": "Delete", + "confirmation-modal.delete-subscription.confirm": "Elimina", // "error.bitstream": "Error fetching bitstream", "error.bitstream": "Errore durante il recupero del bitstream", @@ -2270,10 +2525,12 @@ // "footer.link.privacy-policy": "Privacy policy", "footer.link.privacy-policy": "Informativa sulla privacy", - // "footer.link.end-user-agreement":"End User Agreement", + // "footer.link.end-user-agreement": "End User Agreement", + // TODO Source message changed - Revise the translation "footer.link.end-user-agreement": "Accordo con l'utente finale", - // "footer.link.feedback":"Send Feedback", + // "footer.link.feedback": "Send Feedback", + // TODO Source message changed - Revise the translation "footer.link.feedback": "Invia Feedback", @@ -2291,8 +2548,9 @@ // "forgot-email.form.email.error.required": "Please fill in an email address", "forgot-email.form.email.error.required": "Si prega di inserire un indirizzo email", - // "forgot-email.form.email.error.pattern": "Please fill in a valid email address", - "forgot-email.form.email.error.pattern": "Si prega di inserire un indirizzo email valido", + // "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", + // TODO New key - Add a translation + "forgot-email.form.email.error.not-email-form": "Please fill in a valid email address", // "forgot-email.form.email.hint": "An email will be sent to this address with a further instructions.", // TODO Source message changed - Revise the translation @@ -2449,6 +2707,10 @@ // "form.submit": "Save", "form.submit": "Salva", + // "form.create": "Create", + // TODO New key - Add a translation + "form.create": "Create", + // "form.repeatable.sort.tip": "Drop the item in the new position", "form.repeatable.sort.tip": "Rilascia l'item nella nuova posizione", @@ -2524,17 +2786,17 @@ // TODO New key - Add a translation "health.breadcrumbs": "Health", - // "health-page.heading" : "Health", + // "health-page.heading": "Health", // TODO New key - Add a translation - "health-page.heading" : "Health", + "health-page.heading": "Health", - // "health-page.info-tab" : "Info", + // "health-page.info-tab": "Info", // TODO New key - Add a translation - "health-page.info-tab" : "Info", + "health-page.info-tab": "Info", - // "health-page.status-tab" : "Status", + // "health-page.status-tab": "Status", // TODO New key - Add a translation - "health-page.status-tab" : "Status", + "health-page.status-tab": "Status", // "health-page.error.msg": "The health check service is temporarily unavailable", "health-page.error.msg": "Il servizio di health check è temporaneamente non disponibile.", @@ -2550,21 +2812,21 @@ // TODO New key - Add a translation "health-page.section.geoIp.title": "GeoIp", - // "health-page.section.solrAuthorityCore.title": "Sor: authority core", + // "health-page.section.solrAuthorityCore.title": "Solr: authority core", // TODO New key - Add a translation - "health-page.section.solrAuthorityCore.title": "Sor: authority core", + "health-page.section.solrAuthorityCore.title": "Solr: authority core", - // "health-page.section.solrOaiCore.title": "Sor: oai core", + // "health-page.section.solrOaiCore.title": "Solr: oai core", // TODO New key - Add a translation - "health-page.section.solrOaiCore.title": "Sor: oai core", + "health-page.section.solrOaiCore.title": "Solr: oai core", - // "health-page.section.solrSearchCore.title": "Sor: search core", + // "health-page.section.solrSearchCore.title": "Solr: search core", // TODO New key - Add a translation - "health-page.section.solrSearchCore.title": "Sor: search core", + "health-page.section.solrSearchCore.title": "Solr: search core", - // "health-page.section.solrStatisticsCore.title": "Sor: statistics core", + // "health-page.section.solrStatisticsCore.title": "Solr: statistics core", // TODO New key - Add a translation - "health-page.section.solrStatisticsCore.title": "Sor: statistics core", + "health-page.section.solrStatisticsCore.title": "Solr: statistics core", // "health-page.section-info.app.title": "Application Backend", "health-page.section-info.app.title": "Backend dell'applicativo", @@ -2607,8 +2869,7 @@ "home.title": "Home", // "home.top-level-communities.head": "Communities in DSpace", - // TODO Source message changed - Revise the translation - "home.top-level-communities.head": "DSpace Cris Communities", + "home.top-level-communities.head": "Community in DSpace", // "home.top-level-communities.help": "Select a community to browse its collections.", // TODO Source message changed - Revise the translation @@ -2673,19 +2934,24 @@ // "info.feedback.email-label": "Your Email", "info.feedback.email-label": "La tua email", - // "info.feedback.create.success" : "Feedback Sent Successfully!", + // "info.feedback.create.success": "Feedback Sent Successfully!", + // TODO Source message changed - Revise the translation "info.feedback.create.success" : "Feedback inviato con successo!", - // "info.feedback.error.email.required" : "A valid email address is required", + // "info.feedback.error.email.required": "A valid email address is required", + // TODO Source message changed - Revise the translation "info.feedback.error.email.required" : "Inserire un un indirizzo email valido", - // "info.feedback.error.message.required" : "A comment is required", + // "info.feedback.error.message.required": "A comment is required", + // TODO Source message changed - Revise the translation "info.feedback.error.message.required" : "Inserire un commento", - // "info.feedback.page-label" : "Page", + // "info.feedback.page-label": "Page", + // TODO Source message changed - Revise the translation "info.feedback.page-label" : "Pagina", - // "info.feedback.page_help" : "Tha page related to your feedback", + // "info.feedback.page_help": "Tha page related to your feedback", + // TODO Source message changed - Revise the translation "info.feedback.page_help" : "In questa pagina trovi i tuoi feedback", @@ -2725,7 +2991,8 @@ // "item.bitstreams.upload.bundle.new": "Create bundle", "item.bitstreams.upload.bundle.new": "Crea un bundle", - // "item.bitstreams.upload.bundles.empty": "This item doesn\'t contain any bundles to upload a bitstream to.", + // "item.bitstreams.upload.bundles.empty": "This item doesn't contain any bundles to upload a bitstream to.", + // TODO Source message changed - Revise the translation "item.bitstreams.upload.bundles.empty": "Questo item non contiene alcun bundle in cui caricare un bitstream.", // "item.bitstreams.upload.cancel": "Cancel", @@ -2877,6 +3144,90 @@ // "item.edit.tabs.item-mapper.title": "Item Edit - Collection Mapper", "item.edit.tabs.item-mapper.title": "Modifica item - Mapper Collection", + // "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UNKNOWN": "Unknown", + + // "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.TO_BE_REGISTERED": "Queued for registration", + + // "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.TO_BE_RESERVED": "Queued for reservation", + + // "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.IS_REGISTERED": "Registered", + + // "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.IS_RESERVED": "Reserved", + + // "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UPDATE_RESERVED": "Reserved (update queued)", + + // "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UPDATE_REGISTERED": "Registered (update queued)", + + // "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.UPDATE_BEFORE_REGISTRATION": "Queued for update and registration", + + // "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.TO_BE_DELETED": "Queued for deletion", + + // "item.edit.identifiers.doi.status.DELETED": "Deleted", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.DELETED": "Deleted", + + // "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.PENDING": "Pending (not registered)", + + // "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + // TODO New key - Add a translation + "item.edit.identifiers.doi.status.MINTED": "Minted (not registered)", + + // "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.register-doi.label": "Register a new or pending DOI", + + // "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + // TODO New key - Add a translation + "item.edit.tabs.status.buttons.register-doi.button": "Register DOI...", + + // "item.edit.register-doi.header": "Register a new or pending DOI", + // TODO New key - Add a translation + "item.edit.register-doi.header": "Register a new or pending DOI", + + // "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + // TODO New key - Add a translation + "item.edit.register-doi.description": "Review any pending identifiers and item metadata below and click Confirm to proceed with DOI registration, or Cancel to back out", + + // "item.edit.register-doi.confirm": "Confirm", + // TODO New key - Add a translation + "item.edit.register-doi.confirm": "Confirm", + + // "item.edit.register-doi.cancel": "Cancel", + // TODO New key - Add a translation + "item.edit.register-doi.cancel": "Cancel", + + // "item.edit.register-doi.success": "DOI queued for registration successfully.", + // TODO New key - Add a translation + "item.edit.register-doi.success": "DOI queued for registration successfully.", + + // "item.edit.register-doi.error": "Error registering DOI", + // TODO New key - Add a translation + "item.edit.register-doi.error": "Error registering DOI", + + // "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + // TODO New key - Add a translation + "item.edit.register-doi.to-update": "The following DOI has already been minted and will be queued for registration online", + // "item.edit.item-mapper.buttons.add": "Map item to selected collections", "item.edit.item-mapper.buttons.add": "Mappare l'item nelle collections selezionate", @@ -2939,6 +3290,14 @@ // "item.edit.metadata.discard-button": "Discard", "item.edit.metadata.discard-button": "Annulla", + // "item.edit.metadata.edit.buttons.confirm": "Confirm", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.confirm": "Confirm", + + // "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.drag": "Drag to reorder", + // "item.edit.metadata.edit.buttons.edit": "Edit", "item.edit.metadata.edit.buttons.edit": "Edita", @@ -2951,6 +3310,10 @@ // "item.edit.metadata.edit.buttons.unedit": "Stop editing", "item.edit.metadata.edit.buttons.unedit": "Interrompi la modifica", + // "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + // TODO New key - Add a translation + "item.edit.metadata.edit.buttons.virtual": "This is a virtual metadata value, i.e. a value inherited from a related entity. It can’t be modified directly. Add or remove the corresponding relationship in the \"Relationships\" tab", + // "item.edit.metadata.empty": "The item currently doesn't contain any metadata. Click Add to start adding a metadata value.", "item.edit.metadata.empty": "Attualmente l'item non contiene metadati. Fai clic su Aggiungi per iniziare ad aggiungere il valore di un metadata.", @@ -2966,6 +3329,10 @@ // "item.edit.metadata.headers.value": "Value", "item.edit.metadata.headers.value": "Valore", + // "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + // TODO New key - Add a translation + "item.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + // "item.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", "item.edit.metadata.metadatafield.invalid": "Scegli un campo di metadati valido", @@ -3001,6 +3368,10 @@ // "item.edit.metadata.reinstate-button": "Undo", "item.edit.metadata.reinstate-button": "Annulla", + // "item.edit.metadata.reset-order-button": "Undo reorder", + // TODO New key - Add a translation + "item.edit.metadata.reset-order-button": "Undo reorder", + // "item.edit.metadata.save-button": "Save", "item.edit.metadata.save-button": "Salva", @@ -3186,6 +3557,9 @@ // "item.edit.tabs.curate.title": "Item Edit - Curate", "item.edit.tabs.curate.title": "Modifica item - Curate", + // "item.edit.curate.title": "Curate Item: {{item}}", + // TODO New key - Add a translation + "item.edit.curate.title": "Curate Item: {{item}}", // "item.edit.tabs.metadata.head": "Metadata", "item.edit.tabs.metadata.head": "Metadati", @@ -3217,7 +3591,8 @@ // "item.edit.tabs.status.buttons.mappedCollections.label": "Manage mapped collections", "item.edit.tabs.status.buttons.mappedCollections.label": "Gestire le collections mappate", - // "item.edit.tabs.status.buttons.move.button": "Move...", + // "item.edit.tabs.status.buttons.move.button": "Move this Item to a different Collection", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.move.button": "Sposta...", // "item.edit.tabs.status.buttons.move.label": "Move item to another collection", @@ -3248,7 +3623,8 @@ // "item.edit.tabs.status.buttons.unauthorized": "You're not authorized to perform this action", "item.edit.tabs.status.buttons.unauthorized": "Non sei autorizzato a eseguire questa azione", - // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw...", + // "item.edit.tabs.status.buttons.withdraw.button": "Withdraw this item", + // TODO Source message changed - Revise the translation "item.edit.tabs.status.buttons.withdraw.button": "Rimozione...", // "item.edit.tabs.status.buttons.withdraw.label": "Withdraw item from the repository", @@ -3347,6 +3723,38 @@ // "item.truncatable-part.show-less": "Collapse", "item.truncatable-part.show-less": "Riduci", + // "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.header": "Delete Supervision Order", + + // "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.info": "Are you sure you want to delete Supervision Order", + + // "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.cancel": "Cancel", + + // "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + // TODO New key - Add a translation + "workflow-item.search.result.delete-supervision.modal.confirm": "Delete", + + // "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + // TODO New key - Add a translation + "workflow-item.search.result.notification.deleted.success": "Successfully deleted supervision order \"{{name}}\"", + + // "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + // TODO New key - Add a translation + "workflow-item.search.result.notification.deleted.failure": "Failed to delete supervision order \"{{name}}\"", + + // "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + // TODO New key - Add a translation + "workflow-item.search.result.list.element.supervised-by": "Supervised by:", + + // "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + // TODO New key - Add a translation + "workflow-item.search.result.list.element.supervised.remove-tooltip": "Remove supervision group", + // "item.page.abstract": "Abstract", @@ -3439,13 +3847,13 @@ // "item.page.bitstreams.collapse": "Collapse", "item.page.bitstreams.collapse": "Riduci", - // "item.page.filesection.original.bundle" : "Original bundle", + // "item.page.filesection.original.bundle": "Original bundle", // TODO New key - Add a translation - "item.page.filesection.original.bundle" : "Original bundle", + "item.page.filesection.original.bundle": "Original bundle", - // "item.page.filesection.license.bundle" : "License bundle", + // "item.page.filesection.license.bundle": "License bundle", // TODO New key - Add a translation - "item.page.filesection.license.bundle" : "License bundle", + "item.page.filesection.license.bundle": "License bundle", // "item.page.return": "Back", "item.page.return": "Indietro", @@ -3490,25 +3898,31 @@ // "item.preview.dc.type": "Type:", "item.preview.dc.type": "Tipologia:", - // "item.preview.oaire.citation.issue" : "Issue", + // "item.preview.oaire.citation.issue": "Issue", + // TODO Source message changed - Revise the translation "item.preview.oaire.citation.issue" : "Fascicolo", - // "item.preview.oaire.citation.volume" : "Volume", + // "item.preview.oaire.citation.volume": "Volume", + // TODO Source message changed - Revise the translation "item.preview.oaire.citation.volume" : "Volume", - // "item.preview.dc.relation.issn" : "ISSN", + // "item.preview.dc.relation.issn": "ISSN", + // TODO Source message changed - Revise the translation "item.preview.dc.relation.issn" : "ISSN", - // "item.preview.dc.identifier.isbn" : "ISBN", + // "item.preview.dc.identifier.isbn": "ISBN", + // TODO Source message changed - Revise the translation "item.preview.dc.identifier.isbn" : "ISBN", // "item.preview.dc.identifier": "Identifier:", "item.preview.dc.identifier": "Identificativo:", - // "item.preview.dc.relation.ispartof" : "Journal or Serie", + // "item.preview.dc.relation.ispartof": "Journal or Serie", + // TODO Source message changed - Revise the translation "item.preview.dc.relation.ispartof" : "Periodico or Serie", - // "item.preview.dc.identifier.doi" : "DOI", + // "item.preview.dc.identifier.doi": "DOI", + // TODO Source message changed - Revise the translation "item.preview.dc.identifier.doi" : "DOI", // "item.preview.person.familyName": "Surname:", @@ -3655,13 +4069,16 @@ // "item.version.create.modal.submitted.text": "The new version is being created. This may take some time if the item has a lot of relationships.", "item.version.create.modal.submitted.text": "La nuova versione è in fase di creazione. Questa operazione potrebbe richiedere un po' di temo se l'item ha molte relazioni.", - // "item.version.create.notification.success" : "New version has been created with version number {{version}}", + // "item.version.create.notification.success": "New version has been created with version number {{version}}", + // TODO Source message changed - Revise the translation "item.version.create.notification.success" : "È stata creata una nuova versione con il numero {{version}}", - // "item.version.create.notification.failure" : "New version has not been created", + // "item.version.create.notification.failure": "New version has not been created", + // TODO Source message changed - Revise the translation "item.version.create.notification.failure" : "Non è stata creata una nuova versione", - // "item.version.create.notification.inProgress" : "A new version cannot be created because there is an inprogress submission in the version history", + // "item.version.create.notification.inProgress": "A new version cannot be created because there is an inprogress submission in the version history", + // TODO Source message changed - Revise the translation "item.version.create.notification.inProgress" : "Non è possibile creare una nuova versione perchè c'è già una submission in progress nella cronologia delle versioni", @@ -3683,21 +4100,135 @@ // "item.version.delete.modal.button.cancel.tooltip": "Do not delete this version", "item.version.delete.modal.button.cancel.tooltip": "Non eliminare questa versione", - // "item.version.delete.notification.success" : "Version number {{version}} has been deleted", + // "item.version.delete.notification.success": "Version number {{version}} has been deleted", + // TODO Source message changed - Revise the translation "item.version.delete.notification.success" : "La versione numero {{version}} è stata eliminata", - // "item.version.delete.notification.failure" : "Version number {{version}} has not been deleted", + // "item.version.delete.notification.failure": "Version number {{version}} has not been deleted", + // TODO Source message changed - Revise the translation "item.version.delete.notification.failure" : "La versione numero {{version}} non è stata eliminata", - // "item.version.edit.notification.success" : "The summary of version number {{version}} has been changed", + // "item.version.edit.notification.success": "The summary of version number {{version}} has been changed", + // TODO Source message changed - Revise the translation "item.version.edit.notification.success" : "Il riepilogo della versione numero {{version}} è stato modificato", - // "item.version.edit.notification.failure" : "The summary of version number {{version}} has not been changed", + // "item.version.edit.notification.failure": "The summary of version number {{version}} has not been changed", + // TODO Source message changed - Revise the translation "item.version.edit.notification.failure" : "Il riepilogo della versione numero {{version}} non è stato modificato", + // "itemtemplate.edit.metadata.add-button": "Add", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.add-button": "Add", + + // "itemtemplate.edit.metadata.discard-button": "Discard", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.discard-button": "Discard", + + // "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.confirm": "Confirm", + + // "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.drag": "Drag to reorder", + + // "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.edit": "Edit", + + // "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.remove": "Remove", + + // "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.undo": "Undo changes", + + // "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.edit.buttons.unedit": "Stop editing", + + // "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.empty": "The item template currently doesn't contain any metadata. Click Add to start adding a metadata value.", + + // "itemtemplate.edit.metadata.headers.edit": "Edit", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.edit": "Edit", + + // "itemtemplate.edit.metadata.headers.field": "Field", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.field": "Field", + + // "itemtemplate.edit.metadata.headers.language": "Lang", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.language": "Lang", + + // "itemtemplate.edit.metadata.headers.value": "Value", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.headers.value": "Value", + + // "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.metadatafield.error": "An error occurred validating the metadata field", + + // "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.metadatafield.invalid": "Please choose a valid metadata field", + + // "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.discarded.content": "Your changes were discarded. To reinstate your changes click the 'Undo' button", + + // "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.discarded.title": "Changes discarded", + + // "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.error.title": "An error occurred", + + // "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.invalid.content": "Your changes were not saved. Please make sure all fields are valid before you save.", + + // "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.invalid.title": "Metadata invalid", + + // "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.outdated.content": "The item template you're currently working on has been changed by another user. Your current changes are discarded to prevent conflicts", + + // "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.outdated.title": "Changes outdated", + + // "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.saved.content": "Your changes to this item template's metadata were saved.", + + // "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.notifications.saved.title": "Metadata saved", + + // "itemtemplate.edit.metadata.reinstate-button": "Undo", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.reinstate-button": "Undo", + + // "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.reset-order-button": "Undo reorder", + + // "itemtemplate.edit.metadata.save-button": "Save", + // TODO New key - Add a translation + "itemtemplate.edit.metadata.save-button": "Save", + + + // "journal.listelement.badge": "Journal", "journal.listelement.badge": "Periodico", @@ -4278,6 +4809,10 @@ // "mydspace.show.workspace": "Your Submissions", "mydspace.show.workspace": "I tuoi contributi", + // "mydspace.show.supervisedWorkspace": "Supervised items", + // TODO New key - Add a translation + "mydspace.show.supervisedWorkspace": "Supervised items", + // "mydspace.status.archived": "Archived", "mydspace.status.archived": "Archiviati", @@ -4319,6 +4854,10 @@ // "nav.community-browse.header": "By Community", "nav.community-browse.header": "Per Community", + // "nav.context-help-toggle": "Toggle context help", + // TODO New key - Add a translation + "nav.context-help-toggle": "Toggle context help", + // "nav.language": "Language switch", "nav.language": "Cambio di lingua", @@ -4345,19 +4884,28 @@ // "nav.search": "Search", "nav.search": "Ricerca", + // "nav.search.button": "Submit search", + // TODO New key - Add a translation + "nav.search.button": "Submit search", + + // "nav.statistics.header": "Statistics", "nav.statistics.header": "Statistica", // "nav.stop-impersonating": "Stop impersonating EPerson", "nav.stop-impersonating": "Smetti di impersonare EPerson", - // "nav.toggle" : "Toggle navigation", + // "nav.subscriptions": "Subscriptions", // TODO New key - Add a translation - "nav.toggle" : "Toggle navigation", + "nav.subscriptions": "Subscriptions", - // "nav.user.description" : "User profile bar", + // "nav.toggle": "Toggle navigation", // TODO New key - Add a translation - "nav.user.description" : "User profile bar", + "nav.toggle": "Toggle navigation", + + // "nav.user.description": "User profile bar", + // TODO New key - Add a translation + "nav.user.description": "User profile bar", // "none.listelement.badge": "Item", "none.listelement.badge": "Articolo", @@ -4512,6 +5060,10 @@ // "process.new.notification.error.content": "An error occurred while creating this process", "process.new.notification.error.content": "Si è verificato un errore durante la creazione di questo processo", + // "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + // TODO New key - Add a translation + "process.new.notification.error.max-upload.content": "The file exceeds the maximum upload size", + // "process.new.header": "Create a new process", "process.new.header": "Creare un nuovo processo", @@ -4523,21 +5075,21 @@ - // "process.detail.arguments" : "Arguments", + // "process.detail.arguments": "Arguments", // TODO New key - Add a translation - "process.detail.arguments" : "Arguments", + "process.detail.arguments": "Arguments", - // "process.detail.arguments.empty" : "This process doesn't contain any arguments", + // "process.detail.arguments.empty": "This process doesn't contain any arguments", // TODO New key - Add a translation - "process.detail.arguments.empty" : "This process doesn't contain any arguments", + "process.detail.arguments.empty": "This process doesn't contain any arguments", - // "process.detail.back" : "Back", + // "process.detail.back": "Back", // TODO New key - Add a translation - "process.detail.back" : "Back", + "process.detail.back": "Back", - // "process.detail.output" : "Process Output", + // "process.detail.output": "Process Output", // TODO New key - Add a translation - "process.detail.output" : "Process Output", + "process.detail.output": "Process Output", // "process.detail.logs.button": "Retrieve process output", "process.detail.logs.button": "Recupera l'output del processo", @@ -4548,37 +5100,37 @@ // "process.detail.logs.none": "This process has no output", "process.detail.logs.none": "Questo processo non ha output", - // "process.detail.output-files" : "Output Files", + // "process.detail.output-files": "Output Files", // TODO New key - Add a translation - "process.detail.output-files" : "Output Files", + "process.detail.output-files": "Output Files", - // "process.detail.output-files.empty" : "This process doesn't contain any output files", + // "process.detail.output-files.empty": "This process doesn't contain any output files", // TODO New key - Add a translation - "process.detail.output-files.empty" : "This process doesn't contain any output files", + "process.detail.output-files.empty": "This process doesn't contain any output files", - // "process.detail.script" : "Script", + // "process.detail.script": "Script", // TODO New key - Add a translation - "process.detail.script" : "Script", + "process.detail.script": "Script", - // "process.detail.title" : "Process: {{ id }} - {{ name }}", + // "process.detail.title": "Process: {{ id }} - {{ name }}", // TODO New key - Add a translation - "process.detail.title" : "Process: {{ id }} - {{ name }}", + "process.detail.title": "Process: {{ id }} - {{ name }}", - // "process.detail.start-time" : "Start time", + // "process.detail.start-time": "Start time", // TODO New key - Add a translation - "process.detail.start-time" : "Start time", + "process.detail.start-time": "Start time", - // "process.detail.end-time" : "Finish time", + // "process.detail.end-time": "Finish time", // TODO New key - Add a translation - "process.detail.end-time" : "Finish time", + "process.detail.end-time": "Finish time", - // "process.detail.status" : "Status", + // "process.detail.status": "Status", // TODO New key - Add a translation - "process.detail.status" : "Status", + "process.detail.status": "Status", - // "process.detail.create" : "Create similar process", + // "process.detail.create": "Create similar process", // TODO New key - Add a translation - "process.detail.create" : "Create similar process", + "process.detail.create": "Create similar process", // "process.detail.actions": "Actions", // TODO New key - Add a translation @@ -4614,29 +5166,29 @@ - // "process.overview.table.finish" : "Finish time (UTC)", + // "process.overview.table.finish": "Finish time (UTC)", // TODO New key - Add a translation - "process.overview.table.finish" : "Finish time (UTC)", + "process.overview.table.finish": "Finish time (UTC)", - // "process.overview.table.id" : "Process ID", + // "process.overview.table.id": "Process ID", // TODO New key - Add a translation - "process.overview.table.id" : "Process ID", + "process.overview.table.id": "Process ID", - // "process.overview.table.name" : "Name", + // "process.overview.table.name": "Name", // TODO New key - Add a translation - "process.overview.table.name" : "Name", + "process.overview.table.name": "Name", - // "process.overview.table.start" : "Start time (UTC)", + // "process.overview.table.start": "Start time (UTC)", // TODO New key - Add a translation - "process.overview.table.start" : "Start time (UTC)", + "process.overview.table.start": "Start time (UTC)", - // "process.overview.table.status" : "Status", + // "process.overview.table.status": "Status", // TODO New key - Add a translation - "process.overview.table.status" : "Status", + "process.overview.table.status": "Status", - // "process.overview.table.user" : "User", + // "process.overview.table.user": "User", // TODO New key - Add a translation - "process.overview.table.user" : "User", + "process.overview.table.user": "User", // "process.overview.title": "Processes Overview", "process.overview.title": "Panoramica dei processi", @@ -4947,8 +5499,13 @@ // "register-page.registration.email.error.required": "Please fill in an email address", "register-page.registration.email.error.required": "Inserire un indirizzo e-mail", - // "register-page.registration.email.error.pattern": "Please fill in a valid email address", - "register-page.registration.email.error.pattern": "Si prega di inserire un indirizzo e-mail valido", + // "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + // TODO New key - Add a translation + "register-page.registration.email.error.not-email-form": "Please fill in a valid email address.", + + // "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", + // TODO New key - Add a translation + "register-page.registration.email.error.not-valid-domain": "Use email with allowed domains: {{ domains }}", // "register-page.registration.email.hint": "This address will be verified and used as your login name.", "register-page.registration.email.hint": "Questo indirizzo verrà verificato e utilizzato come nome di accesso.", @@ -4976,6 +5533,10 @@ // "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", // TODO New key - Add a translation "register-page.registration.google-recaptcha.must-accept-cookies": "In order to register you must accept the Registration and Password recovery (Google reCaptcha) cookies.", + // "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + // TODO New key - Add a translation + "register-page.registration.error.maildomain": "This email address is not on the list of domains who can register. Allowed domains are {{ domains }}", + // "register-page.registration.google-recaptcha.open-cookie-settings": "Open cookie settings", // TODO New key - Add a translation @@ -4992,6 +5553,9 @@ // "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", // TODO New key - Add a translation "register-page.registration.google-recaptcha.notification.message.expired": "Verification expired. Please verify again.", + // "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", + // TODO New key - Add a translation + "register-page.registration.info.maildomain": "Accounts can be registered for mail addresses of the domains", // "relationships.add.error.relationship-type.content": "No suitable match could be found for relationship type {{ type }} between the two items", "relationships.add.error.relationship-type.content": "Non è stata trovata alcuna corrispondenza adatta per il tipo di relazione {{ type }} tra i due item", @@ -5306,6 +5870,10 @@ // "search.filters.applied.f.birthDate.min": "Start birth date", "search.filters.applied.f.birthDate.min": "Data di nascita iniziale", + // "search.filters.applied.f.supervisedBy": "Supervised by", + // TODO New key - Add a translation + "search.filters.applied.f.supervisedBy": "Supervised by", + // "search.filters.applied.f.withdrawn": "Withdrawn", "search.filters.applied.f.withdrawn": "Ritirato", @@ -5519,6 +6087,22 @@ // "search.filters.filter.submitter.label": "Search submitter", "search.filters.filter.submitter.label": "Mittente della ricerca", + // "search.filters.filter.show-tree": "Browse {{ name }} tree", + // TODO New key - Add a translation + "search.filters.filter.show-tree": "Browse {{ name }} tree", + + // "search.filters.filter.supervisedBy.head": "Supervised By", + // TODO New key - Add a translation + "search.filters.filter.supervisedBy.head": "Supervised By", + + // "search.filters.filter.supervisedBy.placeholder": "Supervised By", + // TODO New key - Add a translation + "search.filters.filter.supervisedBy.placeholder": "Supervised By", + + // "search.filters.filter.supervisedBy.label": "Search Supervised By", + // TODO New key - Add a translation + "search.filters.filter.supervisedBy.label": "Search Supervised By", + // "search.filters.entityType.JournalIssue": "Journal Issue", @@ -5709,6 +6293,10 @@ // TODO New key - Add a translation "statistics.table.header.views": "Views", + // "statistics.table.no-name": "(object name could not be loaded)", + // TODO New key - Add a translation + "statistics.table.no-name": "(object name could not be loaded)", + // "submission.edit.breadcrumbs": "Edit Submission", @@ -5814,6 +6402,10 @@ // "submission.import-external.source.crossref": "CrossRef", "submission.import-external.source.crossref": "CrossRef", + // "submission.import-external.source.datacite": "DataCite", + // TODO New key - Add a translation + "submission.import-external.source.datacite": "DataCite", + // "submission.import-external.source.scielo": "SciELO", "submission.import-external.source.scielo": "SciELO", @@ -6135,6 +6727,10 @@ // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Funder of the Project", "submission.sections.describe.relationship-lookup.search-tab.tab-title.isFundingAgencyOfProject": "Finanziatore del progetto", + // "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.search-tab.tab-title.isPublicationOfAuthor": "Publication of the Author", + // "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Funding OpenAIRE API", "submission.sections.describe.relationship-lookup.selection-tab.title.openAIREFunding": "Finanziamento dell'API OpenAIRE", @@ -6201,6 +6797,10 @@ // "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Parent Organizational Unit", "submission.sections.describe.relationship-lookup.title.isChildOrgUnitOf": "Unità organizzativa padre", + // "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + // TODO New key - Add a translation + "submission.sections.describe.relationship-lookup.title.isPublicationOfAuthor": "Publication", + // "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", "submission.sections.describe.relationship-lookup.search-tab.toggle-dropdown": "Toggle dropdown", @@ -6294,7 +6894,8 @@ // "submission.sections.describe.relationship-lookup.selection-tab.title": "Search Results", "submission.sections.describe.relationship-lookup.selection-tab.title": "Risultati della ricerca", - // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don\'t you can still use it for this submission.", + // "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Would you like to save \"{{ value }}\" as a name variant for this person so you and others can reuse it for future submissions? If you don't you can still use it for this submission.", + // TODO Source message changed - Revise the translation "submission.sections.describe.relationship-lookup.name-variant.notification.content": "Desideri salvare \"{{ value }}\" come variante del nome per questa persona in modo che tu e altri possiate riutilizzarlo per immissioni future? Se non lo fai, puoi comunque usarlo per questa immissione.", // "submission.sections.describe.relationship-lookup.name-variant.notification.confirm": "Save a new name variant", @@ -6372,7 +6973,29 @@ // "submission.sections.general.sections_not_valid": "There are incomplete sections.", "submission.sections.general.sections_not_valid": "Ci sono sezioni incomplete.", + // "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + // TODO New key - Add a translation + "submission.sections.identifiers.info": "The following identifiers will be created for your item:", + // "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + // TODO New key - Add a translation + "submission.sections.identifiers.no_handle": "No handles have been minted for this item.", + + // "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + // TODO New key - Add a translation + "submission.sections.identifiers.no_doi": "No DOIs have been minted for this item.", + + // "submission.sections.identifiers.handle_label": "Handle: ", + // TODO New key - Add a translation + "submission.sections.identifiers.handle_label": "Handle: ", + + // "submission.sections.identifiers.doi_label": "DOI: ", + // TODO New key - Add a translation + "submission.sections.identifiers.doi_label": "DOI: ", + + // "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", + // TODO New key - Add a translation + "submission.sections.identifiers.otherIdentifiers_label": "Other identifiers: ", // "submission.sections.submit.progressbar.accessCondition": "Item access conditions", "submission.sections.submit.progressbar.accessCondition": "Condizioni di accesso all'item", @@ -6395,6 +7018,10 @@ // "submission.sections.submit.progressbar.detect-duplicate": "Potential duplicates", "submission.sections.submit.progressbar.detect-duplicate": "Potenziali duplicati", + // "submission.sections.submit.progressbar.identifiers": "Identifiers", + // TODO New key - Add a translation + "submission.sections.submit.progressbar.identifiers": "Identifiers", + // "submission.sections.submit.progressbar.license": "Deposit license", "submission.sections.submit.progressbar.license": "Licenza di deposito", @@ -6523,7 +7150,8 @@ // TODO New key - Add a translation "submission.sections.upload.header.policy.default.withlist": "Please note that uploaded files in the {{collectionName}} collection will be accessible, in addition to what is explicitly decided for the single file, with the following group(s):", - // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files just dragging & dropping them everywhere in the page", + // "submission.sections.upload.info": "Here you will find all the files currently in the item. You can update the file metadata and access conditions or upload additional files by dragging & dropping them anywhere on the page.", + // TODO Source message changed - Revise the translation "submission.sections.upload.info": "Qui troverai tutti i file attualmente presenti nell'articolo. È possibile aggiornare i metadati dei file e le condizioni di accesso o upload di file aggiuntivi semplicemente trascinandoli e rilasciandoli ovunque nella pagina", // "submission.sections.upload.no-entry": "No", @@ -6597,9 +7225,9 @@ // TODO New key - Add a translation "submission.sections.license.required": "You must accept the license", - // "submission.sections.license.notgranted": "You must accept the license", + // "submission.sections.license.notgranted": "You must accept the license", // TODO New key - Add a translation - "submission.sections.license.notgranted": "You must accept the license", + "submission.sections.license.notgranted": "You must accept the license", // "submission.sections.sherpa.publication.information": "Publication information", @@ -6719,7 +7347,8 @@ // "submission.workflow.generic.delete": "Delete", "submission.workflow.generic.delete": "Elimina", - // "submission.workflow.generic.delete-help": "If you would to discard this item, select \"Delete\". You will then be asked to confirm it.", + // "submission.workflow.generic.delete-help": "Select this option to discard this item. You will then be asked to confirm it.", + // TODO Source message changed - Revise the translation "submission.workflow.generic.delete-help": "Se si desidera eliminare questo item, selezionare \"Elimina\". Ti verrà quindi chiesto di confermarlo.", // "submission.workflow.generic.edit": "Edit", @@ -6735,6 +7364,23 @@ "submission.workflow.generic.view-help": "Selezionare questa opzione per visualizzare i metadati dell'item.", + // "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + // TODO New key - Add a translation + "submission.workflow.generic.submit_select_reviewer": "Select Reviewer", + + // "submission.workflow.generic.submit_select_reviewer-help": "", + // TODO New key - Add a translation + "submission.workflow.generic.submit_select_reviewer-help": "", + + + // "submission.workflow.generic.submit_score": "Rate", + // TODO New key - Add a translation + "submission.workflow.generic.submit_score": "Rate", + + // "submission.workflow.generic.submit_score-help": "", + // TODO New key - Add a translation + "submission.workflow.generic.submit_score-help": "", + // "submission.workflow.tasks.claimed.approve": "Approve", "submission.workflow.tasks.claimed.approve": "Approva", @@ -6748,6 +7394,14 @@ // "submission.workflow.tasks.claimed.edit_help": "Select this option to change the item's metadata.", "submission.workflow.tasks.claimed.edit_help": "Selezionare questa opzione per modificare i metadati dell'item.", + // "submission.workflow.tasks.claimed.decline": "Decline", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.decline": "Decline", + + // "submission.workflow.tasks.claimed.decline_help": "", + // TODO New key - Add a translation + "submission.workflow.tasks.claimed.decline_help": "", + // "submission.workflow.tasks.claimed.reject.reason.info": "Please enter your reason for rejecting the submission into the box below, indicating whether the submitter may fix a problem and resubmit.", "submission.workflow.tasks.claimed.reject.reason.info": "Se hai esaminato l'item e hai scoperto che non è adatto per essere inserito nella collezione, seleziona \"Rifiuta\". Ti verrà quindi chiesto di inserire un messaggio che indichi perché l'item non è adatto e se chi ha inviato l'item deve cambiare qualcosa e inviarlo di nuovo.", @@ -6808,6 +7462,134 @@ "submission.workspace.generic.view-help": "Seleziona questa opzione per vedere i metadata dell'item.", + // "subscriptions.title": "Subscriptions", + "subscriptions.title": "Sottoscrizioni", + + // "subscriptions.item": "Subscriptions for items", + "subscriptions.item": "Sottoscrizioni per articoli", + + // "subscriptions.collection": "Subscriptions for collections", + "subscriptions.collection": "Sottoscrizioni per collezioni", + + // "subscriptions.community": "Subscriptions for communities", + "subscriptions.community": "Sottoscrizioni per community", + + // "subscriptions.subscription_type": "Subscription type", + "subscriptions.subscription_type": "Tipo di sottoscrizione", + + // "subscriptions.frequency": "Subscription frequency", + "subscriptions.frequency": "Frequenza di sottoscrizione", + + // "subscriptions.frequency.D": "Daily", + "subscriptions.frequency.D": "Giornaliero", + + // "subscriptions.frequency.M": "Monthly", + "subscriptions.frequency.M": "Mensile", + + // "subscriptions.frequency.W": "Weekly", + "subscriptions.frequency.W": "Settimanale", + + // "subscriptions.tooltip": "Subscribe", + // TODO New key - Add a translation + "subscriptions.tooltip": "Subscribe", + + // "subscriptions.modal.title": "Subscriptions", + // TODO New key - Add a translation + "subscriptions.modal.title": "Subscriptions", + + // "subscriptions.modal.type-frequency": "Type and frequency", + // TODO New key - Add a translation + "subscriptions.modal.type-frequency": "Type and frequency", + + // "subscriptions.modal.close": "Close", + // TODO New key - Add a translation + "subscriptions.modal.close": "Close", + + // "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", + // TODO New key - Add a translation + "subscriptions.modal.delete-info": "To remove this subscription, please visit the \"Subscriptions\" page under your user profile", + + // "subscriptions.modal.new-subscription-form.type.content": "Content", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.type.content": "Content", + + // "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.frequency.D": "Daily", + + // "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.frequency.W": "Weekly", + + // "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.frequency.M": "Monthly", + + // "subscriptions.modal.new-subscription-form.submit": "Submit", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.submit": "Submit", + + // "subscriptions.modal.new-subscription-form.processing": "Processing...", + // TODO New key - Add a translation + "subscriptions.modal.new-subscription-form.processing": "Processing...", + + // "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + // TODO New key - Add a translation + "subscriptions.modal.create.success": "Subscribed to {{ type }} successfully.", + + // "subscriptions.modal.delete.success": "Subscription deleted successfully", + // TODO New key - Add a translation + "subscriptions.modal.delete.success": "Subscription deleted successfully", + + // "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + // TODO New key - Add a translation + "subscriptions.modal.update.success": "Subscription to {{ type }} updated successfully", + + // "subscriptions.modal.create.error": "An error occurs during the subscription creation", + // TODO New key - Add a translation + "subscriptions.modal.create.error": "An error occurs during the subscription creation", + + // "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + // TODO New key - Add a translation + "subscriptions.modal.delete.error": "An error occurs during the subscription delete", + + // "subscriptions.modal.update.error": "An error occurs during the subscription update", + // TODO New key - Add a translation + "subscriptions.modal.update.error": "An error occurs during the subscription update", + + // "subscriptions.table.dso": "Subject", + "subscriptions.table.dso": "Oggetto", + + // "subscriptions.table.subscription_type": "Subscription Type", + "subscriptions.table.subscription_type": "Tipo di sottoscrizione", + + // "subscriptions.table.subscription_frequency": "Subscription Frequency", + "subscriptions.table.subscription_frequency": "Frequenza di sottoscrizione", + + // "subscriptions.table.action": "Action", + "subscriptions.table.action": "Azione", + + // "subscriptions.table.edit": "Edit", + // TODO New key - Add a translation + "subscriptions.table.edit": "Edit", + + // "subscriptions.table.delete": "Delete", + // TODO New key - Add a translation + "subscriptions.table.delete": "Delete", + + // "subscriptions.table.not-available": "Not available", + // TODO New key - Add a translation + "subscriptions.table.not-available": "Not available", + + // "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + // TODO New key - Add a translation + "subscriptions.table.not-available-message": "The subscribed item has been deleted, or you don't currently have the permission to view it", + + // "subscriptions.table.empty.message": "You do not have any subscriptions at this time. To subscribe to email updates for a Community or Collection, use the subscription button on the object's page.", + // TODO Source message changed - Revise the translation + "subscriptions.table.empty.message": "Non hai ancora sottoscritto alcuna notifica. Per sottoscrivere la notifica relativa a un oggetto, usa il menu contestuale nella pagina di dettaglio dell'oggetto", + + // "thumbnail.default.alt": "Thumbnail Image", "thumbnail.default.alt": "Immagine di anteprima", @@ -6835,8 +7617,7 @@ // "title": "DSpace", - // TODO Source message changed - Revise the translation - "title": "DSpace-CRIS", + "title": "DSpace", @@ -6861,7 +7642,9 @@ // "vocabulary-treeview.tree.description.srsc": "Research Subject Categories", "vocabulary-treeview.tree.description.srsc": "Categorie di argomenti di ricerca", - + // "vocabulary-treeview.info": "Select a subject to add as search filter", + // TODO New key - Add a translation + "vocabulary-treeview.info": "Select a subject to add as search filter", // "uploader.browse": "browse", "uploader.browse": "sfoglia", @@ -6893,6 +7676,10 @@ + // "supervisedWorkspace.search.results.head": "Supervised Items", + // TODO New key - Add a translation + "supervisedWorkspace.search.results.head": "Supervised Items", + // "workspace.search.results.head": "Your submissions", "workspace.search.results.head": "I tuoi invii", @@ -6902,6 +7689,10 @@ // "workflow.search.results.head": "Workflow tasks", "workflow.search.results.head": "Task del workflow", + // "supervision.search.results.head": "Workflow and Workspace tasks", + // TODO New key - Add a translation + "supervision.search.results.head": "Workflow and Workspace tasks", + // "workflow-item.edit.breadcrumbs": "Edit workflowitem", @@ -6968,6 +7759,77 @@ // "workspace-item.view.title": "Workspace View", "workspace-item.view.title": "Vista Workspace", + + // "workflow-item.advanced.title": "Advanced workflow", + // TODO New key - Add a translation + "workflow-item.advanced.title": "Advanced workflow", + + + // "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.success.title": "Selected reviewer", + + // "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.success.content": "The reviewer for this workflow item has been successfully selected", + + // "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.error.title": "Something went wrong", + + // "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.notification.error.content": "Couldn't select the reviewer for this workflow item", + + // "workflow-item.selectrevieweraction.title": "Select Reviewer", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.title": "Select Reviewer", + + // "workflow-item.selectrevieweraction.header": "Select Reviewer", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.header": "Select Reviewer", + + // "workflow-item.selectrevieweraction.button.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.button.cancel": "Cancel", + + // "workflow-item.selectrevieweraction.button.confirm": "Confirm", + // TODO New key - Add a translation + "workflow-item.selectrevieweraction.button.confirm": "Confirm", + + + // "workflow-item.scorereviewaction.notification.success.title": "Rating review", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.success.title": "Rating review", + + // "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.success.content": "The rating for this item workflow item has been successfully submitted", + + // "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.error.title": "Something went wrong", + + // "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.notification.error.content": "Couldn't rate this item", + + // "workflow-item.scorereviewaction.title": "Rate this item", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.title": "Rate this item", + + // "workflow-item.scorereviewaction.header": "Rate this item", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.header": "Rate this item", + + // "workflow-item.scorereviewaction.button.cancel": "Cancel", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.button.cancel": "Cancel", + + // "workflow-item.scorereviewaction.button.confirm": "Confirm", + // TODO New key - Add a translation + "workflow-item.scorereviewaction.button.confirm": "Confirm", + // "idle-modal.header": "Session will expire soon", "idle-modal.header": "La sessione scadrà presto", @@ -6980,7 +7842,8 @@ // "idle-modal.extend-session": "Extend session", "idle-modal.extend-session": "Estendi sessione", - // "researcher.profile.action.processing" : "Processing...", + // "researcher.profile.action.processing": "Processing...", + // TODO Source message changed - Revise the translation "researcher.profile.action.processing" : "Elaborazione...", // "researcher.profile.associated": "Researcher profile associated", @@ -7013,10 +7876,12 @@ // "researcher.profile.view": "View", "researcher.profile.view": "Visualizza", - // "researcher.profile.private.visibility" : "PRIVATE", + // "researcher.profile.private.visibility": "PRIVATE", + // TODO Source message changed - Revise the translation "researcher.profile.private.visibility" : "PRIVATO", - // "researcher.profile.public.visibility" : "PUBLIC", + // "researcher.profile.public.visibility": "PUBLIC", + // TODO Source message changed - Revise the translation "researcher.profile.public.visibility" : "PUBBLICO", // "researcher.profile.status": "Status:", @@ -7025,16 +7890,20 @@ // "researcherprofile.claim.not-authorized": "You are not authorized to claim this item. For more details contact the administrator(s).", "researcherprofile.claim.not-authorized": "Non sei autorizzato a richiedere questo item. Per maggiori dettagli contattare l'amministratore/i", - // "researcherprofile.error.claim.body" : "An error occurred while claiming the profile, please try again later", + // "researcherprofile.error.claim.body": "An error occurred while claiming the profile, please try again later", + // TODO Source message changed - Revise the translation "researcherprofile.error.claim.body" : "Si è verificato un errore durante l'associazione del profilo, prova più tardi", - // "researcherprofile.error.claim.title" : "Error", + // "researcherprofile.error.claim.title": "Error", + // TODO Source message changed - Revise the translation "researcherprofile.error.claim.title" : "Errore", - // "researcherprofile.success.claim.body" : "Profile claimed with success", + // "researcherprofile.success.claim.body": "Profile claimed with success", + // TODO Source message changed - Revise the translation "researcherprofile.success.claim.body" : "Profilo associato con successo", - // "researcherprofile.success.claim.title" : "Success", + // "researcherprofile.success.claim.title": "Success", + // TODO Source message changed - Revise the translation "researcherprofile.success.claim.title" : "Successo", // "person.page.orcid.create": "Create an ORCID ID", @@ -7043,7 +7912,8 @@ // "person.page.orcid.granted-authorizations": "Granted authorizations", "person.page.orcid.granted-authorizations": "Autorizzazioni concesse", - // "person.page.orcid.grant-authorizations" : "Grant authorizations", + // "person.page.orcid.grant-authorizations": "Grant authorizations", + // TODO Source message changed - Revise the translation "person.page.orcid.grant-authorizations" : "Concedere autorizzazioni", // "person.page.orcid.link": "Connect to ORCID ID", @@ -7091,43 +7961,56 @@ // "person.page.orcid.save.preference.changes": "Update settings", "person.page.orcid.save.preference.changes": "Impostazioni di aggiornamento", - // "person.page.orcid.sync-profile.affiliation" : "Affiliation", + // "person.page.orcid.sync-profile.affiliation": "Affiliation", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-profile.affiliation" : "Affiliazione", - // "person.page.orcid.sync-profile.biographical" : "Biographical data", + // "person.page.orcid.sync-profile.biographical": "Biographical data", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-profile.biographical" : "Riferimenti biografici", - // "person.page.orcid.sync-profile.education" : "Education", + // "person.page.orcid.sync-profile.education": "Education", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-profile.education" : "Educazione", - // "person.page.orcid.sync-profile.identifiers" : "Identifiers", + // "person.page.orcid.sync-profile.identifiers": "Identifiers", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-profile.identifiers" : "Identificativi", - // "person.page.orcid.sync-fundings.all" : "All fundings", + // "person.page.orcid.sync-fundings.all": "All fundings", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-fundings.all" : "Tutti i finanziamenti", - // "person.page.orcid.sync-fundings.mine" : "My fundings", + // "person.page.orcid.sync-fundings.mine": "My fundings", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-fundings.mine" : "I miei finanziamenti", - // "person.page.orcid.sync-fundings.my_selected" : "Selected fundings", + // "person.page.orcid.sync-fundings.my_selected": "Selected fundings", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-fundings.my_selected" : "Finanziamenti selezionati", - // "person.page.orcid.sync-fundings.disabled" : "Disabled", + // "person.page.orcid.sync-fundings.disabled": "Disabled", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-fundings.disabled" : "Disabilitato", - // "person.page.orcid.sync-publications.all" : "All publications", + // "person.page.orcid.sync-publications.all": "All publications", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-publications.all" : "Tutte le pubblicazioni", - // "person.page.orcid.sync-publications.mine" : "My publications", + // "person.page.orcid.sync-publications.mine": "My publications", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-publications.mine" : "Le mie pubblicazioni", - // "person.page.orcid.sync-publications.my_selected" : "Selected publications", + // "person.page.orcid.sync-publications.my_selected": "Selected publications", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-publications.my_selected" : "Pubblicazioni selezionate", - // "person.page.orcid.sync-publications.disabled" : "Disabled", + // "person.page.orcid.sync-publications.disabled": "Disabled", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-publications.disabled" : "Disabilitato", - // "person.page.orcid.sync-queue.discard" : "Discard the change and do not synchronize with the ORCID registry", + // "person.page.orcid.sync-queue.discard": "Discard the change and do not synchronize with the ORCID registry", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-queue.discard" : "Scarta la modifica e non sincronizzarla con il registro ORCID.", // "person.page.orcid.sync-queue.discard.error": "The discarding of the ORCID queue record failed", @@ -7139,13 +8022,16 @@ // "person.page.orcid.sync-queue.empty-message": "The ORCID queue registry is empty", "person.page.orcid.sync-queue.empty-message": "Il Registro di sistema della coda ORCID è vuoto", - // "person.page.orcid.sync-queue.table.header.type" : "Type", + // "person.page.orcid.sync-queue.table.header.type": "Type", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-queue.table.header.type" : "Tipo", - // "person.page.orcid.sync-queue.table.header.description" : "Description", + // "person.page.orcid.sync-queue.table.header.description": "Description", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-queue.table.header.description" : "Descrizione", - // "person.page.orcid.sync-queue.table.header.action" : "Action", + // "person.page.orcid.sync-queue.table.header.action": "Action", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-queue.table.header.action" : "Azione", // "person.page.orcid.sync-queue.description.affiliation": "Affiliations", @@ -7211,7 +8097,8 @@ // "person.page.orcid.sync-queue.tooltip.researcher_urls": "Researcher url", "person.page.orcid.sync-queue.tooltip.researcher_urls": "URL ricercatore", - // "person.page.orcid.sync-queue.send" : "Synchronize with ORCID registry", + // "person.page.orcid.sync-queue.send": "Synchronize with ORCID registry", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-queue.send" : "Sincronizza con il registro ORCID", // "person.page.orcid.sync-queue.send.unauthorized-error.title": "The submission to ORCID failed for missing authorizations.", @@ -7266,7 +8153,8 @@ // "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "The organization's name is required", "person.page.orcid.sync-queue.send.validation-error.organization.name-required": "Il nome dell'organizzazione è obbligatorio", - // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "The publication date must be one year after 1900", + // "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid": "The publication date must be one year after 1900", + // TODO Source message changed - Revise the translation "person.page.orcid.sync-queue.send.validation-error.publication.date-invalid" : "La data di pubblicazione deve partire dal 1900", // "person.page.orcid.sync-queue.send.validation-error.organization.address-required": "The organization to be sent requires an address", @@ -7352,6 +8240,104 @@ // TODO New key - Add a translation "home.recent-submissions.head": "Recent Submissions", + // "listable-notification-object.default-message": "This object couldn't be retrieved", + // TODO New key - Add a translation + "listable-notification-object.default-message": "This object couldn't be retrieved", + + + // "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + // TODO New key - Add a translation + "system-wide-alert-banner.retrieval.error": "Something went wrong retrieving the system-wide alert banner", + + // "system-wide-alert-banner.countdown.prefix": "In", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.prefix": "In", + + // "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.days": "{{days}} day(s),", + + // "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.hours": "{{hours}} hour(s) and", + + // "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + // TODO New key - Add a translation + "system-wide-alert-banner.countdown.minutes": "{{minutes}} minute(s):", + + + + // "menu.section.system-wide-alert": "System-wide Alert", + // TODO New key - Add a translation + "menu.section.system-wide-alert": "System-wide Alert", + + // "system-wide-alert.form.header": "System-wide Alert", + // TODO New key - Add a translation + "system-wide-alert.form.header": "System-wide Alert", + + // "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + // TODO New key - Add a translation + "system-wide-alert-form.retrieval.error": "Something went wrong retrieving the system-wide alert", + + // "system-wide-alert.form.cancel": "Cancel", + // TODO New key - Add a translation + "system-wide-alert.form.cancel": "Cancel", + + // "system-wide-alert.form.save": "Save", + // TODO New key - Add a translation + "system-wide-alert.form.save": "Save", + + // "system-wide-alert.form.label.active": "ACTIVE", + // TODO New key - Add a translation + "system-wide-alert.form.label.active": "ACTIVE", + + // "system-wide-alert.form.label.inactive": "INACTIVE", + // TODO New key - Add a translation + "system-wide-alert.form.label.inactive": "INACTIVE", + + // "system-wide-alert.form.error.message": "The system wide alert must have a message", + // TODO New key - Add a translation + "system-wide-alert.form.error.message": "The system wide alert must have a message", + + // "system-wide-alert.form.label.message": "Alert message", + // TODO New key - Add a translation + "system-wide-alert.form.label.message": "Alert message", + + // "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + // TODO New key - Add a translation + "system-wide-alert.form.label.countdownTo.enable": "Enable a countdown timer", + + // "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + // TODO New key - Add a translation + "system-wide-alert.form.label.countdownTo.hint": "Hint: Set a countdown timer. When enabled, a date can be set in the future and the system-wide alert banner will perform a countdown to the set date. When this timer ends, it will disappear from the alert. The server will NOT be automatically stopped.", + + // "system-wide-alert.form.label.preview": "System-wide alert preview", + // TODO New key - Add a translation + "system-wide-alert.form.label.preview": "System-wide alert preview", + + // "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + // TODO New key - Add a translation + "system-wide-alert.form.update.success": "The system-wide alert was successfully updated", + + // "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + // TODO New key - Add a translation + "system-wide-alert.form.update.error": "Something went wrong when updating the system-wide alert", + + // "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + // TODO New key - Add a translation + "system-wide-alert.form.create.success": "The system-wide alert was successfully created", + + // "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + // TODO New key - Add a translation + "system-wide-alert.form.create.error": "Something went wrong when creating the system-wide alert", + + // "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + // TODO New key - Add a translation + "admin.system-wide-alert.breadcrumbs": "System-wide Alerts", + + // "admin.system-wide-alert.title": "System-wide Alerts", + // TODO New key - Add a translation + "admin.system-wide-alert.title": "System-wide Alerts", } \ No newline at end of file From 6f4b0ad6b1b03af129f1f3c80c3e8b3c2a419d04 Mon Sep 17 00:00:00 2001 From: Alban Imami Date: Fri, 12 May 2023 12:10:57 +0200 Subject: [PATCH 638/833] [CST-5729] fixed the id on the bitstream api request --- .../bitstream-download-page.component.ts | 10 +++++++++- src/app/core/data/signposting-data.service.ts | 9 +++++---- src/app/core/data/signposting-data.ts | 5 ----- src/app/core/data/signposting-links.model.ts | 7 +++++++ src/app/core/services/server-hard-redirect.service.ts | 11 ----------- 5 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 src/app/core/data/signposting-data.ts create mode 100644 src/app/core/data/signposting-links.model.ts diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 51ec762ec3..38e4d01dd5 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -14,6 +14,8 @@ import { getForbiddenRoute } from '../../app-routing-paths'; import { RemoteData } from '../../core/data/remote-data'; import { redirectOn4xx } from '../../core/shared/authorized.operators'; import { Location } from '@angular/common'; +import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; +import { ServerResponseService } from 'src/app/core/services/server-response.service'; @Component({ selector: 'ds-bitstream-download-page', @@ -36,8 +38,14 @@ export class BitstreamDownloadPageComponent implements OnInit { private fileService: FileService, private hardRedirectService: HardRedirectService, private location: Location, + private signpostginDataService: SignpostingDataService, + private responseService: ServerResponseService ) { - + this.route.params.subscribe(params => { + this.signpostginDataService.getLinksets(params.id).pipe(take(1)).subscribe(linksets => { + this.responseService.setLinksetsHeader(linksets); + }); + }); } back(): void { diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index 0ef2b49f0f..5e965d1ab5 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -7,6 +7,7 @@ import { Observable, of as observableOf } from 'rxjs'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; import { HttpHeaders } from '@angular/common/http'; +import { SignpostingLinks } from './signposting-links.model'; @Injectable({ providedIn: 'root' @@ -15,15 +16,15 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } - getLinks(uuid: string): Observable { + getLinks(uuid: string): Observable { const baseUrl = this.halService.getRootHref().replace('/api', ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( - catchError((err ) => { + catchError((err) => { console.error(err); return observableOf(false); }), - map((res: RawRestResponse) => res) + map((res: SignpostingLinks) => res) ); } @@ -40,7 +41,7 @@ export class SignpostingDataService { } as any; return this.restService.getWithHeaders(`${baseUrl}/signposting/linksets/${uuid}`, requestOptions).pipe( - catchError((err ) => { + catchError((err) => { console.error(err); return observableOf(false); }), diff --git a/src/app/core/data/signposting-data.ts b/src/app/core/data/signposting-data.ts deleted file mode 100644 index 5734d324ec..0000000000 --- a/src/app/core/data/signposting-data.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface SignpostingDataLink { - href: string, - rel: string, - type: string -} diff --git a/src/app/core/data/signposting-links.model.ts b/src/app/core/data/signposting-links.model.ts new file mode 100644 index 0000000000..19d8869ba1 --- /dev/null +++ b/src/app/core/data/signposting-links.model.ts @@ -0,0 +1,7 @@ +import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; + +export interface SignpostingLinks extends RawRestResponse { + href?: string, + rel?: string, + type?: string +} diff --git a/src/app/core/services/server-hard-redirect.service.ts b/src/app/core/services/server-hard-redirect.service.ts index a6c0e09aee..de8b45b0e5 100644 --- a/src/app/core/services/server-hard-redirect.service.ts +++ b/src/app/core/services/server-hard-redirect.service.ts @@ -2,9 +2,6 @@ import { Inject, Injectable } from '@angular/core'; import { Request, Response } from 'express'; import { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens'; import { HardRedirectService } from './hard-redirect.service'; -import { SignpostingDataService } from '../data/signposting-data.service'; -import { ActivatedRoute } from '@angular/router'; -import { take } from 'rxjs'; /** * Service for performing hard redirects within the server app module @@ -15,8 +12,6 @@ export class ServerHardRedirectService extends HardRedirectService { constructor( @Inject(REQUEST) protected req: Request, @Inject(RESPONSE) protected res: Response, - private signpostginDataService: SignpostingDataService, - protected route: ActivatedRoute ) { super(); } @@ -52,12 +47,6 @@ export class ServerHardRedirectService extends HardRedirectService { console.log(`Redirecting from ${this.req.url} to ${url} with ${status}`); - this.route.params.subscribe(params => { - this.signpostginDataService.getLinksets(params.id).pipe(take(1)).subscribe(linksets => { - this.res.setHeader('Link', linksets); - }); - }); - this.res.redirect(status, url); this.res.end(); // I haven't found a way to correctly stop Angular rendering. From 14fb3794196c7c3d28badedf340bb41f6520bdf4 Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 23 Nov 2022 15:40:00 +0100 Subject: [PATCH 639/833] 96598: Test feedback pt. 3: submission - repair auto-refresh --- src/app/submission/sections/form/section-form.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/submission/sections/form/section-form.component.ts b/src/app/submission/sections/form/section-form.component.ts index 9d9fe361de..000e8b0834 100644 --- a/src/app/submission/sections/form/section-form.component.ts +++ b/src/app/submission/sections/form/section-form.component.ts @@ -223,8 +223,8 @@ export class SubmissionSectionFormComponent extends SectionModelComponent { const sectionDataToCheck = {}; Object.keys(sectionData).forEach((key) => { - if (this.sectionMetadata && this.sectionMetadata.includes(key)) { - sectionDataToCheck[key] = sectionData[key]; + if (this.sectionData.data && hasValue(this.sectionData.data[key])) { + sectionDataToCheck[key] = this.sectionData.data[key]; } }); From dff343f62eb67f061a06a235487d8371074d322c Mon Sep 17 00:00:00 2001 From: samuel Date: Wed, 23 Nov 2022 16:16:12 +0100 Subject: [PATCH 640/833] 96598: Test feedback pt. 3: submission - repair auto-refresh - repair tests --- .../submission/sections/form/section-form.component.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/submission/sections/form/section-form.component.spec.ts b/src/app/submission/sections/form/section-form.component.spec.ts index 592691e677..4a6bcf5b9a 100644 --- a/src/app/submission/sections/form/section-form.component.spec.ts +++ b/src/app/submission/sections/form/section-form.component.spec.ts @@ -295,7 +295,9 @@ describe('SubmissionSectionFormComponent test suite', () => { 'dc.title': [new FormFieldMetadataValueObject('test')] }; compAsAny.formData = {}; - compAsAny.sectionMetadata = ['dc.title']; + compAsAny.sectionData.data = { + 'dc.title': [new FormFieldMetadataValueObject('test')] + }; expect(comp.hasMetadataEnrichment(newSectionData)).toBeTruthy(); }); From 4abdea5f62e02dd2d30ae6d91930bbc3c1e983fe Mon Sep 17 00:00:00 2001 From: samuel Date: Thu, 9 Feb 2023 16:55:48 +0100 Subject: [PATCH 641/833] 99221: Fix minor issues with Relationships in submission - hide disabled buttons --- src/app/shared/form/form.component.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/app/shared/form/form.component.html b/src/app/shared/form/form.component.html index 16ced852b1..b48675b304 100644 --- a/src/app/shared/form/form.component.html +++ b/src/app/shared/form/form.component.html @@ -13,22 +13,20 @@ (ngbEvent)="onCustomEvent($event)"> -
    -
    +
    From 9a8dfc229f0940b2242c577dc5769e50f79aed62 Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Fri, 12 May 2023 13:04:43 +0000 Subject: [PATCH 642/833] Add filter name to search filter button aria-label. --- .../search-filters/search-filter/search-filter.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/shared/search/search-filters/search-filter/search-filter.component.html b/src/app/shared/search/search-filters/search-filter/search-filter.component.html index 13457cc008..a6fb0021b7 100644 --- a/src/app/shared/search/search-filters/search-filter/search-filter.component.html +++ b/src/app/shared/search/search-filters/search-filter/search-filter.component.html @@ -3,7 +3,7 @@ -
    diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 6401ed42eb..71e8115d6b 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -81,36 +81,43 @@ export class BulkAccessControlService { } export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => { + let finalPayload: BulkAccessControlFileModel = {}; + const itemEnabled = payload.state.item.toggleStatus; const bitstreamEnabled = payload.state.bitstream.toggleStatus; - const constraints = { uuid: [] }; - - if (bitstreamEnabled && payload.state.bitstream.changesLimit === 'selected') { - // @ts-ignore - constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); + if (itemEnabled) { + finalPayload.item = { + mode: payload.state.item.accessMode, + accessConditions: payload.itemAccess + } } - return { - item: { - mode: itemEnabled ? payload.state.item.accessMode : '', - accessConditions: itemEnabled ? payload.itemAccess : [] - }, - bitstream: { - constraints, - mode: bitstreamEnabled ? payload.state.bitstream.accessMode : '', - accessConditions: bitstreamEnabled ? payload.bitstreamAccess : [] + if (bitstreamEnabled) { + const constraints = { uuid: [] }; + + if (bitstreamEnabled && payload.state.bitstream.changesLimit === 'selected') { + // @ts-ignore + constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id); } - }; + + finalPayload.bitstream = { + constraints, + mode: payload.state.bitstream.accessMode, + accessConditions: payload.bitstreamAccess + } + } + + return finalPayload; }; export interface BulkAccessControlFileModel { - item: { + item?: { mode: string; accessConditions: AccessCondition[]; }, - bitstream: { + bitstream?: { constraints: { uuid: string[] }; mode: string; accessConditions: AccessCondition[]; From 2fc2897a3644f9f37d2dbd3c413a74442269b392 Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Mon, 15 May 2023 13:10:10 +0200 Subject: [PATCH 653/833] [CST-9639] Show warning only when replace is selected --- .../access-control-array-form.component.html | 2 +- .../access-control-array-form.component.ts | 1 + .../access-control-form-container.component.html | 2 ++ .../access-control-form-container.component.ts | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html index 71f327423f..2e6d9c2fc1 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.html @@ -1,5 +1,5 @@
    -
    +
    {{'access-control-no-access-conditions-warning-message' | translate}}
    diff --git a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts index 14f7526cb7..519fc0ae3e 100644 --- a/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts +++ b/src/app/shared/access-control-form-container/access-control-array-form/access-control-array-form.component.ts @@ -14,6 +14,7 @@ import { dateToISOFormat } from '../../date.util'; }) export class AccessControlArrayFormComponent implements OnInit, OnDestroy { @Input() dropdownOptions: AccessesConditionOption[] = []; + @Input() mode!: 'add' | 'replace'; private destroy$ = new Subject(); diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.html b/src/app/shared/access-control-form-container/access-control-form-container.component.html index 9551b5b736..ccb18b9100 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.html +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.html @@ -49,6 +49,7 @@ @@ -130,6 +131,7 @@ diff --git a/src/app/shared/access-control-form-container/access-control-form-container.component.ts b/src/app/shared/access-control-form-container/access-control-form-container.component.ts index f27fb4b5f0..9394b083b1 100644 --- a/src/app/shared/access-control-form-container/access-control-form-container.component.ts +++ b/src/app/shared/access-control-form-container/access-control-form-container.component.ts @@ -173,11 +173,11 @@ const initialState: AccessControlFormState = { export interface AccessControlFormState { item: { toggleStatus: boolean, - accessMode: string, + accessMode: 'add' | 'replace', }, bitstream: { toggleStatus: boolean, - accessMode: string, + accessMode: 'add' | 'replace', changesLimit: string, selectedBitstreams: ListableObject[], } From b4340e0b911cb03af23f87b8e52a9baf6d9a3d5c Mon Sep 17 00:00:00 2001 From: Enea Jahollari Date: Mon, 15 May 2023 15:39:39 +0200 Subject: [PATCH 654/833] [CST-9639] Fix lint issues --- .../bulk-access-control.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/shared/access-control-form-container/bulk-access-control.service.ts b/src/app/shared/access-control-form-container/bulk-access-control.service.ts index 71e8115d6b..5302e3aa4a 100644 --- a/src/app/shared/access-control-form-container/bulk-access-control.service.ts +++ b/src/app/shared/access-control-form-container/bulk-access-control.service.ts @@ -55,7 +55,7 @@ export class BulkAccessControlService { { name: '-f', value: file.name } ]; uuids.forEach((uuid) => { - params.push({ name: '-u', value: uuid }) + params.push({ name: '-u', value: uuid }); }); return this.scriptService.invoke('bulk-access-control', params, [file]).pipe( @@ -90,7 +90,7 @@ export const convertToBulkAccessControlFileModel = (payload: { state: AccessCont finalPayload.item = { mode: payload.state.item.accessMode, accessConditions: payload.itemAccess - } + }; } if (bitstreamEnabled) { @@ -105,7 +105,7 @@ export const convertToBulkAccessControlFileModel = (payload: { state: AccessCont constraints, mode: payload.state.bitstream.accessMode, accessConditions: payload.bitstreamAccess - } + }; } return finalPayload; From 536cb62cc06f83374475e7e31d4b7e920f506304 Mon Sep 17 00:00:00 2001 From: damian Date: Mon, 15 May 2023 16:09:17 +0200 Subject: [PATCH 655/833] Displaying item counts at Communities and Collections list view. --- .../community-list/community-list.component.html | 1 + src/app/core/shared/collection.model.ts | 7 ++++++- src/app/core/shared/community.model.ts | 7 ++++++- .../collection-list-element.component.html | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/app/community-list-page/community-list/community-list.component.html b/src/app/community-list-page/community-list/community-list.component.html index ea772bb891..efc1f086ae 100644 --- a/src/app/community-list-page/community-list/community-list.component.html +++ b/src/app/community-list-page/community-list/community-list.component.html @@ -37,6 +37,7 @@ {{node.name}} + [{{node.payload.archivedItems}}]
    diff --git a/src/app/core/shared/collection.model.ts b/src/app/core/shared/collection.model.ts index d1c49c8d4b..81efc33510 100644 --- a/src/app/core/shared/collection.model.ts +++ b/src/app/core/shared/collection.model.ts @@ -1,4 +1,4 @@ -import { deserialize, inheritSerialization } from 'cerialize'; +import {autoserialize, deserialize, inheritSerialization} from 'cerialize'; import { Observable } from 'rxjs'; import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; @@ -16,12 +16,17 @@ import { COMMUNITY } from './community.resource-type'; import { Community } from './community.model'; import { ChildHALResource } from './child-hal-resource.model'; import { HandleObject } from './handle-object.model'; +import {excludeFromEquals} from '../utilities/equals.decorators'; @typedObject @inheritSerialization(DSpaceObject) export class Collection extends DSpaceObject implements ChildHALResource, HandleObject { static type = COLLECTION; + @excludeFromEquals + @autoserialize + archivedItems: number; + /** * The {@link HALLink}s for this Collection */ diff --git a/src/app/core/shared/community.model.ts b/src/app/core/shared/community.model.ts index f16aad9645..0bab8cfa22 100644 --- a/src/app/core/shared/community.model.ts +++ b/src/app/core/shared/community.model.ts @@ -1,4 +1,4 @@ -import { deserialize, inheritSerialization } from 'cerialize'; +import {autoserialize, deserialize, inheritSerialization} from 'cerialize'; import { Observable } from 'rxjs'; import { link, typedObject } from '../cache/builders/build-decorators'; import { PaginatedList } from '../data/paginated-list.model'; @@ -12,12 +12,17 @@ import { DSpaceObject } from './dspace-object.model'; import { HALLink } from './hal-link.model'; import { ChildHALResource } from './child-hal-resource.model'; import { HandleObject } from './handle-object.model'; +import {excludeFromEquals} from '../utilities/equals.decorators'; @typedObject @inheritSerialization(DSpaceObject) export class Community extends DSpaceObject implements ChildHALResource, HandleObject { static type = COMMUNITY; + @excludeFromEquals + @autoserialize + archivedItems: number; + /** * The {@link HALLink}s for this Community */ diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index c61adf5dad..b45a9a03bc 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -3,7 +3,9 @@ {{object.name}} + [{{object.archivedItems}}] +
    {{object.shortDescription}}
    From 78cf3e1bfc52b43b64023d8a0d75b1354dbc28cf Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 16:27:38 +0200 Subject: [PATCH 656/833] [CST-5729] Finalize signposting implementation --- .../bitstream-download-page.component.spec.ts | 19 +++++- .../bitstream-download-page.component.ts | 13 ++-- .../data/signposting-data.service.spec.ts | 43 ++++++++----- src/app/core/data/signposting-data.service.ts | 33 +++------- src/app/core/data/signposting-links.model.ts | 7 ++- .../core/metadata/metadata.service.spec.ts | 24 +++---- src/app/core/metadata/metadata.service.ts | 63 ++++--------------- .../core/services/server-response.service.ts | 5 +- .../full/full-item-page.component.spec.ts | 41 +++++++++++- .../full/full-item-page.component.ts | 26 ++++---- .../simple/item-page.component.spec.ts | 41 +++++++++++- .../item-page/simple/item-page.component.ts | 50 +++++++++++---- 12 files changed, 218 insertions(+), 147 deletions(-) diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts index 71fd74a707..66024063cd 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.spec.ts @@ -29,6 +29,18 @@ describe('BitstreamDownloadPageComponent', () => { let serverResponseService: jasmine.SpyObj; let signpostingDataService: jasmine.SpyObj; + const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' + }; + + const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' + }; + function init() { authService = jasmine.createSpyObj('authService', { isAuthenticated: observableOf(true), @@ -67,11 +79,11 @@ describe('BitstreamDownloadPageComponent', () => { router = jasmine.createSpyObj('router', ['navigateByUrl']); serverResponseService = jasmine.createSpyObj('ServerResponseService', { - setLinksetsHeader: jasmine.createSpy('setLinksetsHeader'), + setHeader: jasmine.createSpy('setHeader'), }); signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinksets: observableOf('test'), + getLinks: observableOf([mocklink, mocklink2]) }); } @@ -124,6 +136,9 @@ describe('BitstreamDownloadPageComponent', () => { it('should redirect to the content link', () => { expect(hardRedirectService.redirect).toHaveBeenCalledWith('bitstream-content-link'); }); + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + }); }); describe('when the user is authorized and logged in', () => { beforeEach(waitForAsync(() => { diff --git a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts index 4814a9385a..14245c4cd1 100644 --- a/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts +++ b/src/app/bitstream-page/bitstream-download-page/bitstream-download-page.component.ts @@ -16,6 +16,7 @@ import { redirectOn4xx } from '../../core/shared/authorized.operators'; import { Location } from '@angular/common'; import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; import { ServerResponseService } from 'src/app/core/services/server-response.service'; +import { SignpostingLink } from '../../core/data/signposting-links.model'; @Component({ selector: 'ds-bitstream-download-page', @@ -37,14 +38,18 @@ export class BitstreamDownloadPageComponent implements OnInit { private fileService: FileService, private hardRedirectService: HardRedirectService, private location: Location, - private signpostginDataService: SignpostingDataService, + private signpostingDataService: SignpostingDataService, private responseService: ServerResponseService ) { this.route.params.subscribe(params => { - this.signpostginDataService.getLinks(params.id).pipe(take(1)).subscribe(linksets => { - linksets.forEach(link => { - this.responseService.setLinksetsHeader(link.href); + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; }); + + this.responseService.setHeader('Link', links); }); }); } diff --git a/src/app/core/data/signposting-data.service.spec.ts b/src/app/core/data/signposting-data.service.spec.ts index 091f38de2a..c76899221e 100644 --- a/src/app/core/data/signposting-data.service.spec.ts +++ b/src/app/core/data/signposting-data.service.spec.ts @@ -3,13 +3,32 @@ import { SignpostingDataService } from './signposting-data.service'; import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { of } from 'rxjs'; -import { SignpostingLinks } from './signposting-links.model'; -import { map } from 'rxjs/operators'; +import { SignpostingLink } from './signposting-links.model'; describe('SignpostingDataService', () => { let service: SignpostingDataService; let restServiceSpy: jasmine.SpyObj; let halServiceSpy: jasmine.SpyObj; + const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' + }; + + const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' + }; + + const mockResponse: any = { + statusCode: 200, + payload: [mocklink, mocklink2] + }; + + const mockErrResponse: any = { + statusCode: 500 + }; beforeEach(() => { const restSpy = jasmine.createSpyObj('DspaceRestService', ['get', 'getWithHeaders']); @@ -38,15 +57,11 @@ describe('SignpostingDataService', () => { halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - const mockResponse: any = { - self: { - href: `${baseUrl}/signposting/links/${uuid}` - } - }; - restServiceSpy.get.and.returnValue(of(mockResponse)); - let result: SignpostingLinks; + let result: SignpostingLink[]; + + const expectedResult: SignpostingLink[] = [mocklink, mocklink2]; service.getLinks(uuid).subscribe((links) => { result = links; @@ -54,20 +69,18 @@ describe('SignpostingDataService', () => { tick(); - expect(result).toEqual(mockResponse); + expect(result).toEqual(expectedResult); expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); - it('should handle error and return false', fakeAsync(() => { + it('should handle error and return an empty array', fakeAsync(() => { const uuid = '123'; const baseUrl = 'http://localhost:8080'; halServiceSpy.getRootHref.and.returnValue(`${baseUrl}/api`); - restServiceSpy.get.and.returnValue(of(null).pipe(map(() => { - throw new Error('Error'); - }))); + restServiceSpy.get.and.returnValue(of(mockErrResponse)); let result: any; @@ -77,7 +90,7 @@ describe('SignpostingDataService', () => { tick(); - expect(result).toBeFalse(); + expect(result).toEqual([]); expect(halServiceSpy.getRootHref).toHaveBeenCalled(); expect(restServiceSpy.get).toHaveBeenCalledWith(`${baseUrl}/signposting/links/${uuid}`); })); diff --git a/src/app/core/data/signposting-data.service.ts b/src/app/core/data/signposting-data.service.ts index efdf80a381..e09d68974c 100644 --- a/src/app/core/data/signposting-data.service.ts +++ b/src/app/core/data/signposting-data.service.ts @@ -1,11 +1,12 @@ import { Injectable } from '@angular/core'; -import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; + import { catchError, map } from 'rxjs/operators'; import { Observable, of as observableOf } from 'rxjs'; + +import { DspaceRestService } from '../dspace-rest/dspace-rest.service'; import { HALEndpointService } from '../shared/hal-endpoint.service'; import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; -import { HttpHeaders } from '@angular/common/http'; -import { SignpostingLinks } from './signposting-links.model'; +import { SignpostingLink } from './signposting-links.model'; @Injectable({ providedIn: 'root' @@ -15,36 +16,16 @@ export class SignpostingDataService { constructor(private restService: DspaceRestService, protected halService: HALEndpointService) { } - getLinks(uuid: string): Observable { + getLinks(uuid: string): Observable { const baseUrl = this.halService.getRootHref().replace('/api', ''); return this.restService.get(`${baseUrl}/signposting/links/${uuid}`).pipe( catchError((err) => { console.error(err); - return observableOf(false); + return observableOf([]); }), - map((res: RawRestResponse) => res.payload as SignpostingLinks[]) + map((res: RawRestResponse) => res.statusCode === 200 ? res.payload as SignpostingLink[] : []) ); } - getLinksets(uuid: string): Observable { - const baseUrl = this.halService.getRootHref().replace('/api', ''); - - const requestOptions = { - observe: 'response' as any, - headers: new HttpHeaders({ - 'accept': 'application/linkset', - 'Content-Type': 'application/linkset' - }), - responseType: 'text' - } as any; - - return this.restService.getWithHeaders(`${baseUrl}/signposting/linksets/${uuid}`, requestOptions).pipe( - catchError((err) => { - console.error(err); - return observableOf(false); - }), - map((res: RawRestResponse) => res.payload.body) - ); - } } diff --git a/src/app/core/data/signposting-links.model.ts b/src/app/core/data/signposting-links.model.ts index 19d8869ba1..11d2cafe00 100644 --- a/src/app/core/data/signposting-links.model.ts +++ b/src/app/core/data/signposting-links.model.ts @@ -1,6 +1,7 @@ -import { RawRestResponse } from '../dspace-rest/raw-rest-response.model'; - -export interface SignpostingLinks extends RawRestResponse { +/** + * Represents the link object received by the signposting endpoint + */ +export interface SignpostingLink { href?: string, rel?: string, type?: string diff --git a/src/app/core/metadata/metadata.service.spec.ts b/src/app/core/metadata/metadata.service.spec.ts index 3c5b4adc0c..553b437d71 100644 --- a/src/app/core/metadata/metadata.service.spec.ts +++ b/src/app/core/metadata/metadata.service.spec.ts @@ -8,7 +8,12 @@ import { Observable, of as observableOf, of } from 'rxjs'; import { RemoteData } from '../data/remote-data'; import { Item } from '../shared/item.model'; -import { ItemMock, MockBitstream1, MockBitstream2, MockBitstream3 } from '../../shared/mocks/item.mock'; +import { + ItemMock, + MockBitstream1, + MockBitstream3, + MockBitstream2 +} from '../../shared/mocks/item.mock'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; import { PaginatedList } from '../data/paginated-list.model'; import { Bitstream } from '../shared/bitstream.model'; @@ -25,7 +30,6 @@ import { getMockStore } from '@ngrx/store/testing'; import { AddMetaTagAction, ClearMetaTagAction } from './meta-tag.actions'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { AppConfig } from '../../../config/app-config.interface'; -import { SignpostingDataService } from '../data/signposting-data.service'; describe('MetadataService', () => { let metadataService: MetadataService; @@ -42,7 +46,6 @@ describe('MetadataService', () => { let translateService: TranslateService; let hardRedirectService: HardRedirectService; let authorizationService: AuthorizationDataService; - let signpostingDataService: SignpostingDataService; let router: Router; let store; @@ -50,12 +53,7 @@ describe('MetadataService', () => { let appConfig: AppConfig; const initialState = { 'core': { metaTag: { tagsInUse: ['title', 'description'] }}}; - const mocklink = { - href: 'http://test.org', - rel: 'test', - type: 'test' - }; - const document: any = jasmine.createSpyObj('document', ['head', 'createElement']); + beforeEach(() => { rootService = jasmine.createSpyObj({ @@ -92,10 +90,6 @@ describe('MetadataService', () => { isAuthorized: observableOf(true) }); - signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinks: observableOf([mocklink]) - }); - // @ts-ignore store = getMockStore({ initialState }); spyOn(store, 'dispatch'); @@ -121,9 +115,7 @@ describe('MetadataService', () => { store, hardRedirectService, appConfig, - document, - authorizationService, - signpostingDataService + authorizationService ); }); diff --git a/src/app/core/metadata/metadata.service.ts b/src/app/core/metadata/metadata.service.ts index c22f14b680..204c925e6b 100644 --- a/src/app/core/metadata/metadata.service.ts +++ b/src/app/core/metadata/metadata.service.ts @@ -1,4 +1,4 @@ -import { Inject, Injectable } from '@angular/core'; +import { Injectable, Inject } from '@angular/core'; import { Meta, MetaDefinition, Title } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; @@ -8,12 +8,12 @@ import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, combineLatest, - concat as observableConcat, - EMPTY, Observable, - of as observableOf + of as observableOf, + concat as observableConcat, + EMPTY } from 'rxjs'; -import { filter, map, mergeMap, switchMap, take } from 'rxjs/operators'; +import { filter, map, switchMap, take, mergeMap } from 'rxjs/operators'; import { hasNoValue, hasValue, isNotEmpty } from '../../shared/empty.util'; import { DSONameService } from '../breadcrumbs/dso-name.service'; @@ -25,7 +25,10 @@ import { BitstreamFormat } from '../shared/bitstream-format.model'; import { Bitstream } from '../shared/bitstream.model'; import { DSpaceObject } from '../shared/dspace-object.model'; import { Item } from '../shared/item.model'; -import { getFirstCompletedRemoteData, getFirstSucceededRemoteDataPayload } from '../shared/operators'; +import { + getFirstCompletedRemoteData, + getFirstSucceededRemoteDataPayload +} from '../shared/operators'; import { RootDataService } from '../data/root-data.service'; import { getBitstreamDownloadRoute } from '../../app-routing-paths'; import { BundleDataService } from '../data/bundle-data.service'; @@ -42,8 +45,6 @@ import { CoreState } from '../core-state.model'; import { AuthorizationDataService } from '../data/feature-authorization/authorization-data.service'; import { getDownloadableBitstream } from '../shared/bitstream.operators'; import { APP_CONFIG, AppConfig } from '../../../config/app-config.interface'; -import { SignpostingDataService } from '../data/signposting-data.service'; -import { DOCUMENT } from '@angular/common'; /** * The base selector function to select the metaTag section in the store @@ -62,11 +63,6 @@ const tagsInUseSelector = (state: MetaTagState) => state.tagsInUse, ); -/** - * Link elements added on Item Page - */ -let linkTags = []; - @Injectable() export class MetadataService { @@ -88,7 +84,7 @@ export class MetadataService { ]; constructor( - protected router: Router, + private router: Router, private translate: TranslateService, private meta: Meta, private title: Title, @@ -100,9 +96,7 @@ export class MetadataService { private store: Store, private hardRedirectService: HardRedirectService, @Inject(APP_CONFIG) private appConfig: AppConfig, - @Inject(DOCUMENT) private _document: Document, - private authorizationService: AuthorizationDataService, - private signpostingDataService: SignpostingDataService + private authorizationService: AuthorizationDataService ) { } @@ -123,7 +117,6 @@ export class MetadataService { private processRouteChange(routeInfo: any): void { this.clearMetaTags(); - this.clearLinkTags(); if (hasValue(routeInfo.data.value.dso) && hasValue(routeInfo.data.value.dso.payload)) { this.currentObject.next(routeInfo.data.value.dso.payload); @@ -145,7 +138,7 @@ export class MetadataService { } } - public getCurrentRoute(route: ActivatedRoute): ActivatedRoute { + private getCurrentRoute(route: ActivatedRoute): ActivatedRoute { while (route.firstChild) { route = route.firstChild; } @@ -169,7 +162,6 @@ export class MetadataService { this.setCitationAbstractUrlTag(); this.setCitationPdfUrlTag(); this.setCitationPublisherTag(); - this.setSignpostingLinks(); if (this.isDissertation()) { this.setCitationDissertationNameTag(); @@ -192,37 +184,6 @@ export class MetadataService { } - /** - * Add to the - */ - private setSignpostingLinks() { - if (this.currentObject.value instanceof Item){ - const value = this.signpostingDataService.getLinks(this.currentObject.getValue().id); - value.subscribe(links => { - links.forEach(link => { - this.setLinkTag(link.href, link.rel, link.type); - }); - }); - } - } - - setLinkTag(href: string, rel: string, type: string){ - let link: HTMLLinkElement = this._document.createElement('link'); - if (link) { - link.href = href; - link.rel = rel; - link.type = type; - this._document.head?.appendChild(link); - linkTags.push(link); - } - } - - public clearLinkTags(){ - linkTags.forEach(link => { - link.parentNode?.removeChild(link); - }); - } - /** * Add to the */ diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index 6dd50506e9..ffb6a204c6 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -36,9 +36,10 @@ export class ServerResponseService { return this.setStatus(500, message); } - setLinksetsHeader(linksets: string){ + setHeader(header: string, content: string) { + console.log(this.response); if (this.response) { - this.response.setHeader('Link', linksets); + this.response.setHeader(header, content); } } } diff --git a/src/app/item-page/full/full-item-page.component.spec.ts b/src/app/item-page/full/full-item-page.component.spec.ts index 6c59ccbc67..ec4054d888 100644 --- a/src/app/item-page/full/full-item-page.component.spec.ts +++ b/src/app/item-page/full/full-item-page.component.spec.ts @@ -11,7 +11,7 @@ import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; import { VarDirective } from '../../shared/utils/var.directive'; import { RouterTestingModule } from '@angular/router/testing'; import { Item } from '../../core/shared/item.model'; -import { BehaviorSubject, of as observableOf, of } from 'rxjs'; +import { BehaviorSubject, of as observableOf } from 'rxjs'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { By } from '@angular/platform-browser'; import { createSuccessfulRemoteDataObject, createSuccessfulRemoteDataObject$ } from '../../shared/remote-data.utils'; @@ -22,6 +22,7 @@ import { createRelationshipsObservable } from '../simple/item-types/shared/item. import { RemoteData } from '../../core/data/remote-data'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { LinkHeadService } from '../../core/services/link-head.service'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -59,6 +60,19 @@ describe('FullItemPageComponent', () => { let authorizationDataService: AuthorizationDataService; let serverResponseService: jasmine.SpyObj; let signpostingDataService: jasmine.SpyObj; + let linkHeadService: jasmine.SpyObj; + + const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' + }; + + const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' + }; beforeEach(waitForAsync(() => { authService = jasmine.createSpyObj('authService', { @@ -79,11 +93,16 @@ describe('FullItemPageComponent', () => { }); serverResponseService = jasmine.createSpyObj('ServerResponseService', { - setLinksetsHeader: jasmine.createSpy('setLinksetsHeader'), + setHeader: jasmine.createSpy('setHeader'), }); signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinksets: of('test'), + getLinks: observableOf([mocklink, mocklink2]), + }); + + linkHeadService = jasmine.createSpyObj('LinkHeadService', { + addTag: jasmine.createSpy('setHeader'), + removeTag: jasmine.createSpy('removeTag'), }); TestBed.configureTestingModule({ @@ -102,6 +121,7 @@ describe('FullItemPageComponent', () => { { provide: AuthorizationDataService, useValue: authorizationDataService }, { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, + { provide: LinkHeadService, useValue: linkHeadService }, ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(FullItemPageComponent, { @@ -154,6 +174,11 @@ describe('FullItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('.full-item-info')); expect(objectLoader.nativeElement).not.toBeNull(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); describe('when the item is withdrawn and the user is not an admin', () => { beforeEach(() => { @@ -178,6 +203,11 @@ describe('FullItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('.full-item-info')); expect(objectLoader).not.toBeNull(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); describe('when the item is not withdrawn and the user is not an admin', () => { @@ -190,5 +220,10 @@ describe('FullItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('.full-item-info')); expect(objectLoader).not.toBeNull(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/src/app/item-page/full/full-item-page.component.ts b/src/app/item-page/full/full-item-page.component.ts index 2570bf70fe..f0100eed72 100644 --- a/src/app/item-page/full/full-item-page.component.ts +++ b/src/app/item-page/full/full-item-page.component.ts @@ -16,8 +16,9 @@ import { hasValue } from '../../shared/empty.util'; import { AuthService } from '../../core/auth/auth.service'; import { Location } from '@angular/common'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { ServerResponseService } from 'src/app/core/services/server-response.service'; -import { SignpostingDataService } from 'src/app/core/data/signposting-data.service'; +import { ServerResponseService } from '../../core/services/server-response.service'; +import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { LinkHeadService } from '../../core/services/link-head.service'; /** * This component renders a full item page. @@ -44,15 +45,18 @@ export class FullItemPageComponent extends ItemPageComponent implements OnInit, subs = []; - constructor(protected route: ActivatedRoute, - router: Router, - items: ItemDataService, - authService: AuthService, - authorizationService: AuthorizationDataService, - private _location: Location, - responseService: ServerResponseService, - signpostingDataService: SignpostingDataService) { - super(route, router, items, authService, authorizationService, responseService, signpostingDataService); + constructor( + protected route: ActivatedRoute, + protected router: Router, + protected items: ItemDataService, + protected authService: AuthService, + protected authorizationService: AuthorizationDataService, + protected _location: Location, + protected responseService: ServerResponseService, + protected signpostingDataService: SignpostingDataService, + protected linkHeadService: LinkHeadService + ) { + super(route, router, items, authService, authorizationService, responseService, signpostingDataService, linkHeadService); } /*** AoT inheritance fix, will hopefully be resolved in the near future **/ diff --git a/src/app/item-page/simple/item-page.component.spec.ts b/src/app/item-page/simple/item-page.component.spec.ts index 042cac2724..005142e3f1 100644 --- a/src/app/item-page/simple/item-page.component.spec.ts +++ b/src/app/item-page/simple/item-page.component.spec.ts @@ -22,9 +22,9 @@ import { import { AuthService } from '../../core/auth/auth.service'; import { createPaginatedList } from '../../shared/testing/utils.test'; import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service'; -import { of } from 'rxjs/internal/observable/of'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { LinkHeadService } from '../../core/services/link-head.service'; const mockItem: Item = Object.assign(new Item(), { bundles: createSuccessfulRemoteDataObject$(createPaginatedList([])), @@ -39,6 +39,18 @@ const mockWithdrawnItem: Item = Object.assign(new Item(), { isWithdrawn: true }); +const mocklink = { + href: 'http://test.org', + rel: 'test', + type: 'test' +}; + +const mocklink2 = { + href: 'http://test2.org', + rel: 'test', + type: 'test' +}; + describe('ItemPageComponent', () => { let comp: ItemPageComponent; let fixture: ComponentFixture; @@ -46,6 +58,7 @@ describe('ItemPageComponent', () => { let authorizationDataService: AuthorizationDataService; let serverResponseService: jasmine.SpyObj; let signpostingDataService: jasmine.SpyObj; + let linkHeadService: jasmine.SpyObj; const mockMetadataService = { /* eslint-disable no-empty,@typescript-eslint/no-empty-function */ @@ -66,11 +79,16 @@ describe('ItemPageComponent', () => { isAuthorized: observableOf(false), }); serverResponseService = jasmine.createSpyObj('ServerResponseService', { - setLinksetsHeader: jasmine.createSpy('setLinksetsHeader'), + setHeader: jasmine.createSpy('setHeader'), }); signpostingDataService = jasmine.createSpyObj('SignpostingDataService', { - getLinksets: of('test'), + getLinks: observableOf([mocklink, mocklink2]), + }); + + linkHeadService = jasmine.createSpyObj('LinkHeadService', { + addTag: jasmine.createSpy('setHeader'), + removeTag: jasmine.createSpy('removeTag'), }); TestBed.configureTestingModule({ @@ -90,6 +108,7 @@ describe('ItemPageComponent', () => { { provide: AuthorizationDataService, useValue: authorizationDataService }, { provide: ServerResponseService, useValue: serverResponseService }, { provide: SignpostingDataService, useValue: signpostingDataService }, + { provide: LinkHeadService, useValue: linkHeadService }, ], schemas: [NO_ERRORS_SCHEMA] @@ -140,6 +159,12 @@ describe('ItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('ds-listable-object-component-loader')); expect(objectLoader.nativeElement).toBeDefined(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); + }); describe('when the item is withdrawn and the user is not an admin', () => { beforeEach(() => { @@ -164,6 +189,11 @@ describe('ItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('ds-listable-object-component-loader')); expect(objectLoader.nativeElement).toBeDefined(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); describe('when the item is not withdrawn and the user is not an admin', () => { @@ -176,6 +206,11 @@ describe('ItemPageComponent', () => { const objectLoader = fixture.debugElement.query(By.css('ds-listable-object-component-loader')); expect(objectLoader.nativeElement).toBeDefined(); }); + + it('should add the signposting links', () => { + expect(serverResponseService.setHeader).toHaveBeenCalled(); + expect(linkHeadService.addTag).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index 6483769483..10d8b32886 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -1,8 +1,8 @@ -import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { map, take } from 'rxjs/operators'; import { ItemDataService } from '../../core/data/item-data.service'; import { RemoteData } from '../../core/data/remote-data'; @@ -17,6 +17,9 @@ import { AuthorizationDataService } from '../../core/data/feature-authorization/ import { FeatureID } from '../../core/data/feature-authorization/feature-id'; import { ServerResponseService } from '../../core/services/server-response.service'; import { SignpostingDataService } from '../../core/data/signposting-data.service'; +import { SignpostingLink } from '../../core/data/signposting-links.model'; +import { isNotEmpty } from '../../shared/empty.util'; +import { LinkHeadService } from '../../core/services/link-head.service'; /** * This component renders a simple item page. @@ -30,7 +33,7 @@ import { SignpostingDataService } from '../../core/data/signposting-data.service changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInOut] }) -export class ItemPageComponent implements OnInit { +export class ItemPageComponent implements OnInit, OnDestroy { /** * The item's id @@ -59,18 +62,36 @@ export class ItemPageComponent implements OnInit { itemUrl: string; + /** + * Contains a list of SignpostingLink related to the item + */ + signpostingLinks: SignpostingLink[]; + constructor( protected route: ActivatedRoute, - private router: Router, - private items: ItemDataService, - private authService: AuthService, - private authorizationService: AuthorizationDataService, - private responseService: ServerResponseService, - private signpostingDataService: SignpostingDataService + protected router: Router, + protected items: ItemDataService, + protected authService: AuthService, + protected authorizationService: AuthorizationDataService, + protected responseService: ServerResponseService, + protected signpostingDataService: SignpostingDataService, + protected linkHeadService: LinkHeadService ) { this.route.params.subscribe(params => { - this.signpostingDataService.getLinksets(params.id).subscribe(linksets => { - this.responseService.setLinksetsHeader(linksets); + this.signpostingDataService.getLinks(params.id).pipe(take(1)).subscribe((signpostingLinks: SignpostingLink[]) => { + let links = ''; + this.signpostingLinks = signpostingLinks; + + signpostingLinks.forEach((link: SignpostingLink) => { + links = links + (isNotEmpty(links) ? ', ' : '') + `<${link.href}> ; rel="${link.rel}" ; type="${link.type}" `; + this.linkHeadService.addTag({ + href: link.href, + type: link.type, + rel: link.rel + }) + }); + + this.responseService.setHeader('Link', links); }); }); } @@ -91,4 +112,11 @@ export class ItemPageComponent implements OnInit { this.isAdmin$ = this.authorizationService.isAuthorized(FeatureID.AdministratorOf); } + + + ngOnDestroy(): void { + this.signpostingLinks.forEach((link: SignpostingLink) => { + this.linkHeadService.removeTag(`href='${link.href}'`); + }) + } } From a1b27a5fb361db209721bbc59e955782175699ec Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 16:34:02 +0200 Subject: [PATCH 657/833] [CST-5729] Revert unused changes --- src/app/core/dspace-rest/dspace-rest.service.ts | 15 +-------------- src/app/core/services/server-response.service.ts | 1 - 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/app/core/dspace-rest/dspace-rest.service.ts b/src/app/core/dspace-rest/dspace-rest.service.ts index 737714869d..ea4e8c2831 100644 --- a/src/app/core/dspace-rest/dspace-rest.service.ts +++ b/src/app/core/dspace-rest/dspace-rest.service.ts @@ -1,4 +1,4 @@ -import { Observable, throwError as observableThrowError, throwError } from 'rxjs'; +import { Observable, throwError as observableThrowError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http'; @@ -58,19 +58,6 @@ export class DspaceRestService { })); } - getWithHeaders(absoluteURL: string, reqOptions: any): Observable { - const requestOptions = reqOptions; - - return this.http.get(absoluteURL, requestOptions).pipe( - map((res) => ({ - payload: res - })), - catchError((err) => { - console.log('Error: ', err); - return throwError(() => new Error(err.error)); - })); - } - /** * Performs a request to the REST API. * diff --git a/src/app/core/services/server-response.service.ts b/src/app/core/services/server-response.service.ts index ffb6a204c6..2268e9eb03 100644 --- a/src/app/core/services/server-response.service.ts +++ b/src/app/core/services/server-response.service.ts @@ -37,7 +37,6 @@ export class ServerResponseService { } setHeader(header: string, content: string) { - console.log(this.response); if (this.response) { this.response.setHeader(header, content); } From 10c6b03c40af72e70a897d1fd460e8c39ea5ebdb Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 16:58:20 +0200 Subject: [PATCH 658/833] [CST-5729] Fix lint --- src/app/item-page/simple/item-page.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index 10d8b32886..c1c09e0eb4 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -88,7 +88,7 @@ export class ItemPageComponent implements OnInit, OnDestroy { href: link.href, type: link.type, rel: link.rel - }) + }); }); this.responseService.setHeader('Link', links); @@ -117,6 +117,6 @@ export class ItemPageComponent implements OnInit, OnDestroy { ngOnDestroy(): void { this.signpostingLinks.forEach((link: SignpostingLink) => { this.linkHeadService.removeTag(`href='${link.href}'`); - }) + }); } } From 43d78c695c7e6f763a8235361cdade0048a77e5e Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 15 May 2023 17:11:45 +0200 Subject: [PATCH 659/833] [CST-5729] Assign a default value --- src/app/item-page/simple/item-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/item-page/simple/item-page.component.ts b/src/app/item-page/simple/item-page.component.ts index c1c09e0eb4..f5ee9e1e78 100644 --- a/src/app/item-page/simple/item-page.component.ts +++ b/src/app/item-page/simple/item-page.component.ts @@ -65,7 +65,7 @@ export class ItemPageComponent implements OnInit, OnDestroy { /** * Contains a list of SignpostingLink related to the item */ - signpostingLinks: SignpostingLink[]; + signpostingLinks: SignpostingLink[] = []; constructor( protected route: ActivatedRoute, From da7cb11bcb5ba54290d8a04f3a30a20075a89f40 Mon Sep 17 00:00:00 2001 From: damian Date: Mon, 15 May 2023 20:34:46 +0200 Subject: [PATCH 660/833] Archived items moved outside initial span element(fix for tests) --- .../collection-list-element.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html index b45a9a03bc..b1900908a5 100644 --- a/src/app/shared/object-list/collection-list-element/collection-list-element.component.html +++ b/src/app/shared/object-list/collection-list-element/collection-list-element.component.html @@ -3,9 +3,10 @@ {{object.name}} - [{{object.archivedItems}}] +[{{object.archivedItems}}] +
    {{object.shortDescription}}
    From bd1881fc9a8778a3d4c047fcf06e9f8163a78fad Mon Sep 17 00:00:00 2001 From: Adam Doan Date: Tue, 16 May 2023 18:54:17 +0000 Subject: [PATCH 661/833] Add accessible button names for ORCID queue action buttons --- .../orcid-page/orcid-queue/orcid-queue.component.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html index 9358bcf835..6ba318f7fd 100644 --- a/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html +++ b/src/app/item-page/orcid-page/orcid-queue/orcid-queue.component.html @@ -34,11 +34,13 @@